System.Net.Mail创建无效的电子邮件和eml文件?在主机名中插入额外的点

Bee*_*eep 29 .net c# email smtpclient

如果点出现在MIME编码行的开头(例如test.com有时显示为test..com),.NET的SmtpClient似乎正在创建主机名中带有额外点的电子邮件.示例代码:

[TestMethod]
public void TestEmailIssue()
{
    var mail = new System.Net.Mail.MailMessage();
    var smtpClient = new System.Net.Mail.SmtpClient();

    mail.To.Add("Test@test.com");
    mail.Subject = "Test";
    mail.From = new System.Net.Mail.MailAddress("test@test.com");
    mail.Body = "Hello this is  a short test of the issue:"
             +" <a href='https://test.com/'>https://test.com/</a>: ";

    smtpClient.PickupDirectoryLocation = "C:\\temp\\";
    smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory;
    smtpClient.Send(mail);
}
Run Code Online (Sandbox Code Playgroud)

这会创建一个如下所示的.eml文件:

X-Sender:test@test.com

X-Receiver:Test@test.com

MIME版本:1.0

来自:test@test.com

致:Test@test.com

日期:2011年7月6日15:55:28 -0400

主题:测试

内容类型:text/plain; 字符集= US-ASCII

Content-Transfer-Encoding:quoted-printable

您好,这是对该问题的简短测试:https:// test =

..com /'> https://test.com/:= 20

当发送文件,或开口在Outlook(或任何其他程序),双点显示(即test..com).请注意,如果我删除了额外的空格(在"是"中),则test.com会正确显示,因为该点不再出现在行的开头.

这在尝试发送网站地址时会出现问题,我们会收到来自客户的电话,说他们无法点击我们的链接.

还有其他人经历过这个吗?除了编写自己的编码之外,我们如何解决这个问题呢?

Chr*_*aas 48

这实际上符合RFC 2821(4.5.2透明度)

在发送一行邮件文本之前,SMTP客户端会检查该行的第一个字符.如果是句点,则在行的开头插入一个附加句点.

.Net只是将文件存储在"准备发送"模式,这意味着它不必在发送之前使用电子邮件,而是可以按原样传输.不幸的是,这种格式与Outlook Express的EML格式显然不是100%相同.您应该能够将编码设置为UTF-8(或类似的东西),并为您启用Base-64编码.

mail.BodyEncoding = System.Text.Encoding.UTF8;
Run Code Online (Sandbox Code Playgroud)