2017-02-27 49 views
0

リモートサーバーが '550 5.6.2 SMTPSEND.BareLinefeedsAreIllegal;を返しました。メッセージは、私はすでに同じ結果とContentEncoding.Base64とContentEncoding.Binaryをコードする試みた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); 
      } 

を介して送信することができない裸改行を含んでいます。添付ファイルをスキップすると、メールが正しく送信されます。 "Test.gif"は私がアップロードしているランダムなgifです。

私はCHUNKING or the BDAT commandについて読んだことがありますが、このことやメールキットでどのように使用するのかは分かりません...どのような提案ですか?私は添付ファイル付きの通常のSMTPメールを送信しようとしています。これは難しくありません。

+0

@Jstedfast

おかげでContentEncoding.Base64' 'に' attachment.ContentTransferEncoding'を設定してみてください。 – jstedfast

+0

これでうまくいかない場合は、添付ファイルをまったく追加しないと正しく送信されますか?たぶん、裸の改行がヘッダーにあるのでしょうか? – jstedfast

+0

これ以上見ると、MailKitは適切なContentTransferEncoding自体を設定しているはずです。私が地元のテストをするとき、それはします。 SMTPサーバーはどのような機能を提供していますか? [ProtocolLog](https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog)を取得した場合、本当に 'DATA'コマンドを送信しますか?それとも適切なBDATを送るのですか?サーバが 'BINARYMIME'をサポートしている場合、MailKitはエンコーディングを"バイナリ "に自動設定し、' BDAT'コマンドを使用します。 – jstedfast

答えて

0

変更する@Jstedfastにより示唆されるように解決策があった:

ContentTransferEncoding = ContentEncoding.Base64 

私は誤解とContentObjectのencondingを変えてみました。

+0

さて、ContentObjectのエンコーディング値はソースエンコーディングであり、トランスポートエンコーディングではありません:) – jstedfast