Mailkit SMTP错误 - BareLinefeedsAreIllegal

问题描述:

远程服务器返回'550 5.6.2 SMTPSEND.BareLinefeedsAreIllegal;消息包含裸换行符,不能经由DATA”Mailkit SMTP错误 - BareLinefeedsAreIllegal

  var message = new MimeMessage(); 
      message.From.Add(new MailboxAddress(nameFrom, mailboxFrom)); 
      message.Subject = Subject; 
      message.To.Add(new MailboxAddress(mailboxTo)); 

      var bodyBuilder = new BodyBuilder(); 

      var multipart = new Multipart("mixed"); 

      bodyBuilder.HtmlBody = "Test Body"; 

      multipart.Add(bodyBuilder.ToMessageBody()); 


      byte[] bytes = System.IO.File.ReadAllBytes("Test.gif"); 


      var attachment = new MimePart("binary", "bin") 
      { 
       ContentObject = new ContentObject(new MemoryStream(bytes), ContentEncoding.Base64), 
       ContentDisposition = new ContentDisposition(ContentDisposition.Attachment), 
       ContentTransferEncoding = ContentEncoding.Binary, 
       FileName = "F2.pdf" 
      }; 

      multipart.Add(attachment); 

      message.Body = multipart; 


      using (var client = new SmtpClient()) 
      { 
       // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS) 
       client.ServerCertificateValidationCallback = (s, c, h, e) => true; 

       client.Connect(ssServer, ssPort, MailKit.Security.SecureSocketOptions.Auto); 

       // Note: since we don't have an OAuth2 token, disable 
       // the XOAUTH2 authentication mechanism. 
       client.AuthenticationMechanisms.Remove("XOAUTH2"); 

       // Note: only needed if the SMTP server requires authentication 
       client.Authenticate(ssMailBox, ssMailBoxPassword); 

       client.Send(message); 
      } 

我已经用相同的结果编码ContentEncoding.Base64和ContentEncoding.Binary试图发送。当我跳过附件时,邮件正确发送。 “Test.gif”只是我上传的一个随机gif。

我已阅读关于CHUNKING or the BDAT command,但不确定这个或如何使用它与邮件包...任何建议?我只是想用附件发送一个正常的SMTP邮件,这不可能很难:|

+0

尝试将'attachment.ContentTransferEncoding'设置为'ContentEncoding.Base64'。 – jstedfast

+0

如果这不起作用,如果您根本不添加附件,它会正确发送吗?也许纯粹的换行符在头文件中? – jstedfast

+0

考虑到这一点,MailKit应该只设置合适的ContentTransferEncoding本身。当我做本地测试时,它确实如此。你的SMTP服务器做了什么功能宣传?如果你得到[ProtocolLog](https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog),它真的发送了一个'DATA'命令吗?还是发送一个适当的'BDAT'?如果您的服务器支持'BINARYMIME',则MailKit应自动将编码设置为“二进制”并使用“BDAT”命令。 – jstedfast

的解决方案是,通过@Jstedfast所建议的改变:

ContentTransferEncoding = ContentEncoding.Base64 

我误解和试图改变ContentObject enconding。

谢谢@Jstedfast

+0

是的,ContentObject的编码值是源编码,而不是传输编码:) – jstedfast