希望有人能够帮助解决这个问题,我一直在寻找,我似乎无法在任何地方找到答案。
我正在创建一个使用该邮件的邮件将被传递到指定的代答目录,此代码在过去已经多次使用而没有问题。现在,当我检查生成的文件,更具体地说是在eml文件中检查URL时,我可以看到中间有一个双.
。根据我一直在阅读的内容,我了解如果邮件中第一行的第一个字符以.
开头,则这是SMTP协议的一部分。此文件稍后将被另一项服务接收,该服务将最终执行电子邮件的发送。
当我致电client.Send()
时,我已经能够将其缩小到确切的行。如果我在发送之前检查邮件正文,则表明URL已正确形成。在我调用消息正文后检查消息正文,URL中存在..
。
我的问题或者我想问的问题如下:
SmtpDeliveryMethod.SpecifiedPickupDirectory
时,是否有其他人遇到点填充问题?我之前尝试过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);
}
答案 0 :(得分:3)
保存到文件时,SmtpClient不应该是字节填充。只有在实际“上传”消息流到SMTP服务器时才需要这样做,以防止过早结束DATA命令(终止于行:“。\ r \ n”)。
如果保存到文件时SmtpClient是字节填充,那就是非常破坏的行为。
如果您使用System.Net.Mail(我假设您是),则无法解决此问题,我建议您使用MimeKit创建消息并将其保存到文件中。
然后,如果您需要重新解析邮件并通过SMTP发送邮件,则可以使用MailKit来执行此操作。
答案 1 :(得分:0)
实际上,“接受的”答案可能对原始问题有所帮助-因为它建议使用替代的lib,但分析/解释不准确。
当将邮件正文传递到SMTP服务器时,邮件客户端应该进行点填充。
“提取”目录不是您“保存”邮件的地方,而是SMTP服务器要“拾取” HAND OVER邮件的地方。这是使用端口25连接将同一邮件移交给SMTP服务器的替代方法。
中继SMTP服务器应该在接收方“取消填充”,在发送方“重新填充”。因此,传递给SMTP服务器的任何东西都必须已经塞满才能使整个“点填充”概念正常工作!