由于网络路径中的空格,电子邮件正文中省略了部分网络路径

part of the network path is omitted from the email body because of the space in network path

提问人:rimi 提问时间:5/3/2023 最后编辑:rimi 更新时间:5/4/2023 访问量:31

问:

我正在尝试使用 C# 控制台应用程序向我们的员工发送电子邮件。在电子邮件的正文中,我需要嵌入一个网络路径。我正在使用 stringBuilder 创建电子邮件的正文。网络路径如下:

\\pcm-test2\shared\PCM_GEO_TEST\NGS Forms

我创建了 C# 代码来嵌入网络路径,如下所示:

StringBuilder TelURL = new StringBuilder().Append("<a href=" + @"\\pcm-test2\shared\PCM_GEO_TEST\NGS Forms
").Append(">HERE</a>"); 

我用 C# 将上述字符串放在电子邮件的正文中。当我收到电子邮件时,我看到显示“HERE”的链接,但是当我将鼠标悬停在“HERE”上时,我看到的是这样的网络路径: \pcm-test2\共享\PCM_GEO_TEST\NGS

不知何故,“表格”部分没有出现在电子邮件的正文中。这是我的完整代码:

public void sendEmail(List<string> toList)
    {
        string from = "[email protected]";
        string UserName = ConfigurationManager.AppSettings["UserName"].ToString();
        string password = ConfigurationManager.AppSettings["password"].ToString();
        StringBuilder TelURL = new StringBuilder().Append("<a href=" + @"\\pcm- test2\shared\PCM_GEO_TEST\NGS Forms
").Append(">HERE</a>"); 
    
        using (MailMessage mm = new MailMessage())
        {
            mm.From = new MailAddress(from);

            mm.To.Add(new MailAddress("[email protected]"));
          
            mm.Subject = "Test subject";
            mm.Body = TelURL.ToString();
            mm.IsBodyHtml = true;

            SmtpClient client = new SmtpClient();

            client.Credentials = new NetworkCredential(UserName, password);
            client.Port = 111;
            client.EnableSsl = true;
            client.Host = "smtp.office365.com";
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.Send(mm);

        }


    }

我怎样才能将带有“表单”的整个网络路径放在电子邮件的正文中。当我尝试使用

var URL = $"<a href='{System.Net.WebUtility.UrlEncode(@"\\pcm-test2\shared\PCM_GEO_TEST\NGS Forms")}'>HERE</a>"; 

它在电子邮件正文中显示如下所示,并带有加号,如您所见:

enter image description here

任何帮助将不胜感激。

C# SMTP客户端

评论


答:

0赞 jmcilhinney 5/3/2023 #1

我相信这应该有效:

var url = $"<a href='{System.Net.WebUtility.UrlEncode(@"\\pcm-test2\shared\PCM_GEO_TEST\NGS Forms")}'>HERE</a>";

这将对空间进行编码,因此它不会被解释为两个单独的值。请注意,ur 毫无意义,不应在此处使用。StringBuilder

评论

0赞 rimi 5/3/2023
它仍然不起作用,请在我的原始问题中查看上面的屏幕截图。我必须将 url 转换为 url.tostring 才能在电子邮件正文中使用它
1赞 jmcilhinney 5/3/2023
@rimi,我想知道您是否需要使用实际的 URL,而不是 UNC 路径。我会把它放在评论中,如果它有效,我会把它添加到我的答案中。而不是 ,请尝试 。@"\\pcm-test2\shared\PCM_GEO_TEST\NGS Forms""file://pcm-test2/shared/PCM_GEO_TEST/NGS Forms"
0赞 rimi 5/3/2023
我将如何放置“这里”。我需要把它放在 <a href 中吗
0赞 jmcilhinney 5/3/2023
阅读我写的实际单词。将我说要替换的部分替换为我说要替换的部分。其他什么都没有改变。
1赞 Anjali 5/4/2023 #2

将 TelURL 字符串替换为以下内容:

StringBuilder TelURL = new StringBuilder().Append("<a href=\"" + @"\\pcm-test2\shared\PCM_GEO_TEST\NGS Forms" + "\">HERE</a>");

整个代码将如下所示:

public void sendEmail(List<string> toList)
    {
        string from = "[email protected]";
        string UserName = ConfigurationManager.AppSettings["UserName"].ToString();
        string password = ConfigurationManager.AppSettings["password"].ToString();
   StringBuilder TelURL = new StringBuilder().Append("<a href=\"" + @"\\pcm-test2\shared\PCM_GEO_TEST\NGS Forms" + "\">HERE</a>"); 
    
        using (MailMessage mm = new MailMessage())
        {
            mm.From = new MailAddress(from);

            mm.To.Add(new MailAddress("[email protected]"));
          
            mm.Subject = "Test subject";
            mm.Body = TelURL.ToString();
            mm.IsBodyHtml = true;

            SmtpClient client = new SmtpClient();

            client.Credentials = new NetworkCredential(UserName, password);
            client.Port = 111;
            client.EnableSsl = true;
            client.Host = "smtp.office365.com";
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.Send(mm);

        }


    }

评论

0赞 rimi 5/4/2023
这马上就奏效了