2017-02-27 6 views
0

Remoteserver zurückgegeben 550 550 5.6.2 SMTPSEND.BareLinefeedsAreIllegal; Nachricht enthält blanken Zeilenvorschübe, die über DATA‘können nichtMailkit-SMTP-Fehler - 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); 
      } 

ich mit kodieren ContentEncoding.Base64 und ContentEncoding.Binary mit demselben Ergebnis bereits versucht habe, geschickt. Wenn ich den Anhangteil überspringe, wird die Post korrekt gesendet. Das "Test.gif" ist nur ein zufälliges Gif, das ich hochlade.

Ich habe über CHUNKING or the BDAT command gelesen aber nicht wirklich sicher darüber oder wie man es mit mailkit verwendet ... irgendwelche Vorschläge? Ich versuche nur, eine normale SMTP-Mail mit Anhängen zu senden, das kann nicht so schwer sein: |

+0

Versuchen 'attachment.ContentTransferEncoding' zu' ContentEncoding.Base64' Einstellung. – jstedfast

+0

Wenn das nicht funktioniert, wird es korrekt gesendet, wenn Sie keinen Anhang hinzufügen? Vielleicht ist der nackte Zeilenvorschub in den Headern? – jstedfast

+0

Wenn Sie dies genauer betrachten, sollte MailKit einfach die richtige ContentTransferEncoding-Funktion selbst gesetzt haben. Wenn ich lokale Tests mache, tut es das. Welche Funktionen meldet Ihr SMTP-Server? Wenn Sie ein [ProtocolLog] (https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog) erhalten, sendet es wirklich einen 'DATA' Befehl? oder sendet es eine richtige "BDAT"? Wenn Ihr Server "BINARYMIME" unterstützt, sollte MailKit die Codierung automatisch auf "binary" setzen und den Befehl "BDAT" verwenden. – jstedfast

Antwort

0

Die Lösung war, wie @Jstedfast vorgeschlagen zu ändern:

ContentTransferEncoding = ContentEncoding.Base64 

ich falsch verstanden und versucht, die ContentObject enconding ändern.

Dank @Jstedfast

+0

Ja, der Encoder-Wert des ContentObjects ist die Quellcodierung, nicht die Transportcodierung :) – jstedfast