如何在 C# 中通过电子邮件发送本地链接(共享服务器链接)?

Posted

技术标签:

【中文标题】如何在 C# 中通过电子邮件发送本地链接(共享服务器链接)?【英文标题】:How to send a local link (shared server link) via Email in C#? 【发布时间】:2015-10-09 02:26:40 【问题描述】:

我正在实施一个应用程序,它可以向公司的员工发送电子邮件。该电子邮件包含指向共享服务器文件夹上的 pdf 文件的超链接。

服务器文件夹的示例 url:

\\server_name\folder_parent\folder_child\file.pdf

在我的 C# 代码中,我使用一个字符串来包含 html 代码,如下面的代码

private static string getHTML(DataTable dt)    
     string myBuilder = "";
     myBuilder += "<table id='customers' style='font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; width: 100%; border-collapse: collapse;'";
     myBuilder += "<tr>";
     foreach (DataColumn myColumn in dt.Columns)
     
         myBuilder += "<th style='font-size: 1.1em; border: 1px solid #98bf21; padding: 5px 7px 4px 7px;background-color: #A7C942;'>";
         myBuilder += myColumn.ColumnName;
         myBuilder += "</th>";
         
     myBuilder += "</tr>";
     int count = 0;
     foreach (DataRow myRow in dt.Rows)
     
         myBuilder += "<tr>";
         if (count % 2 == 0)
                             
            foreach (DataColumn myColumn in dt.Columns)
            
                 myBuilder += "<td style='font-size: 1em; border: 1px solid #98bf21; padding: 3px 7px 2px 7px;'>";
                 if (myColumn.ColumnName == "Address")
                 
                     myBuilder += "<a href='" + myRow[myColumn.ColumnName].ToString() + "' style='display:block;'>Link!</a>";
                 
                 else
                                                                        
                     myBuilder += myRow[myColumn.ColumnName].ToString();
                 
                 myBuilder += "</td>";
             
         
         else
         
             foreach (DataColumn myColumn in dt.Columns)
             
                 myBuilder += "<td style='font-size: 1em; border: 1px solid #98bf21; padding: 3px 7px 2px 7px; color: #000000; background-color: #EAF2D3;'>";
                 if (myColumn.ColumnName == "Address")
                                          
                     myBuilder += "<a href='" + myRow[myColumn.ColumnName].ToString() + "' style='display:block;'>Link!</a>";
                 
                 else
                 
                      myBuilder += myRow[myColumn.ColumnName].ToString();
                 
                 myBuilder += "</td>";
             
                 
         count++;
         myBuilder += "</tr>";
     
     myBuilder += "</table>";
     return myBuilder;
 

此代码从 DataTable 中获取数据并将其显示为 html 代码中的表格。

这是 DataTable 的数据

dt.Rows.Add("bala", "24", "http://www.google.com", "999444444");
dt.Rows.Add("chendur", "23", "http://www.facebook.com", "9999999999");
dt.Rows.Add("chchandru", "22", @"file:///\\server_name\folderA\folderB\file.pdf", "888888888");

因此,当我在 chrome (mail.google.com) 上打开电子邮件时,包含本地链接的链接不起作用,并且该文本中没有超链接。

我尝试使用 google 或 facebook 之类的 http 链接,但该链接有效,但文件链接无效,如下图所示。

关于file:///,我尝试编写一个html文件并且成功了。

<td><a href="file:///\\server_name\folderA\folderB\file.pdf">LINK</a></td>

我读过很多关于这个的文章,他们说“安全问题”。

问题是这个应用程序只在同一家公司的员工之间发送电子邮件,他们使用共享服务器来使用互联网和发送电子邮件。 (公司内的所有计算机都连接到同一台服务器)。

那么有没有办法像这种情况一样发送本地链接?如果没有,我是否有任何可能的解决方案来解决这种情况?要求只是“您单击电子邮件中的链接,它会自动打开本地链接上的文件。”

p/s:我当然知道了

MailMessage completeMessage = new MailMessage(From, To, Subject, mailBody);
completeMessage.IsBodyHtml = true;

【问题讨论】:

为文件夹创建网络共享,而不是使用服务器路径 @Gregg:你能告诉我更多细节吗? An URL to a Windows shared folder 的可能重复项 【参考方案1】:

我知道这是旧胎面,但我遇到了同样的问题..

我没有将地址作为链接发送,而是在打开和关闭雪佛龙内部发送网络位置,这样 Outlook 将其作为一个整体链接。 details

所以我们有 Intranet 应用程序,它将网络文件位置发送给员工,所有员工都使用 Outlook。我正在发送像你一样的文件位置

\\server_name\folder_parent\folder_child\file.pdf

下面的代码:

myBuilder += @"&lt;\\server_name\folder_parent\folder_child\file.pdf&gt;";

PS:我的 MailMessage 实例有 utf8 编码。

mail.BodyEncoding = Encoding.UTF8;

【讨论】:

以上是关于如何在 C# 中通过电子邮件发送本地链接(共享服务器链接)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux命令行中通过SMTP服务器发送电子邮件

从 C# 发送 html 电子邮件

Exchange 2016共享邮箱不保存已发送邮件的问题

在 JAVA 中通过 gmail smtp 服务器发送电子邮件

捕获文件在 C# 中通过蓝牙发送

如何在 Android 中通过电子邮件发送图片,预览但未附加..?