.NET 4.5 SMTP 客户端点填充问题,当传送到取件目录时
Posted
技术标签:
【中文标题】.NET 4.5 SMTP 客户端点填充问题,当传送到取件目录时【英文标题】:.NET 4.5 SMTP Client Dot Stuffing Issue when Delivering to Pickup Directory 【发布时间】:2014-12-20 18:17:27 【问题描述】:希望有人能够帮助解决这个问题,我一直在四处寻找,但似乎无法在任何地方找到答案。
我正在创建一封邮件,使用该邮件将被传递到指定的取件目录,此代码过去已被多次使用,没有问题。现在,当我检查生成的文件,更具体地说是 eml 文件中的 URL 时,我可以看到中间有一个双 .
。根据我一直在阅读的内容,我知道如果消息中一行的第一个字符以.
开头,这是 SMTP 协议的一部分。该文件稍后将被另一个服务接收,该服务最终将执行电子邮件的发送。
当我调用client.Send()
时,我已经能够将范围缩小到确切的行。如果我在发送之前检查消息正文,则 URL 格式正确。调用后检查消息正文,URL 中有..
。
我的问题或我想的问题如下:
-
有其他人在使用
SmtpDeliveryMethod.SpecifiedPickupDirectory
时遇到点填充问题吗?
正确处理这个问题是谁的工作? .NET SMTP 或辅助服务在以后接收此消息并将其发送到最终目的地?
关于如何解决此问题的任何建议?
我之前尝试过approach described here,但它失败了,有很多例外。
我主要是在寻找一种方法来将此 eml 文件保存到磁盘上的某个位置,以便稍后将其备份并发送,我对 C# 的了解仍然相当有限,所以可能有一些简单的东西我只是在寻找,所以任何建议或指导将不胜感激!
我创建了一小段代码来尝试重新创建问题,这不是我正在使用的确切内容,但它确实表明通过 client.Send() 方法发送后,有 2 '..' 在字符串的开头。
using (var client = new SmtpClient())
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
client.PickupDirectoryLocation = @"C:\temp";
var message = new MailMessage();
message.To.Add(new MailAddress("alice@a.com"));
message.From = new MailAddress("bob@b.com");
message.Subject = "Smtp Dot Stuffing Test";
message.Body = ".A.B.C..... .0.1.2.3.4.5.6.7.8.9";
client.Send(message);
【问题讨论】:
你能给我们看一些相关的代码吗? @Dawnkeeper 我刚刚添加了一小段示例代码来演示这个问题 【参考方案1】:实际上,“已接受”的答案可能对原始问题有所帮助 - 因为它建议了一个替代库,但分析/解释并不准确。
邮件客户端在将邮件正文传递给 SMTP 服务器时应该做点填充。
“pickup”目录不是您“保存”邮件的地方,它是 SMTP 服务器要“提取”的 HAND OVER 邮件的地方。它是使用端口 25 连接将同一消息移交给 SMTP 服务器的替代方法。
中继 SMTP 服务器应该在接收端“取消填充”,在发送端“重新填充”。因此,为了使整个“点填充”概念起作用,必须已经填充了任何传递给 SMTP 服务器的内容!
【讨论】:
【参考方案2】:保存到文件时,SmtpClient 不应填充字节。只有在实际将消息流“上传”到 SMTP 服务器时才需要这样做,以防止过早结束 DATA 命令(该命令以以下行结束:“.\r\n”)。
如果 SmtpClient 在保存到文件时是字节填充,这是非常糟糕的行为。
如果您使用 System.Net.Mail(我假设您是),这是不可能解决的问题,我可能会建议您使用 MimeKit 创建邮件并将其保存到文件中。
然后,如果您需要重新解析邮件并通过 SMTP 发送,您可以使用MailKit 来执行此操作。
【讨论】:
是的,我正在使用 System.Net.Mail,所以听起来好像是那里出了问题。至少我没有做任何明显错误的事情,我会试试你的建议,看看我的进展如何。感谢您的建议 试一试,一旦我调用了 MimeKits 的“WriteTo()”方法并检查了生成的 eml 文件,它的格式都很好。感谢您提供有关 Mimekit 的提示,非常有用的库!以上是关于.NET 4.5 SMTP 客户端点填充问题,当传送到取件目录时的主要内容,如果未能解决你的问题,请参考以下文章