2016-07-04 27 views
10

Ich versuche System.Net.Mail.MailMessage mit System.Net.Mail.Attachment zu senden.E-Mail-Anhang mit langen nicht-ASCII-Name

Name des Anhangs ist "Счёт-договор №4321 от 4 июля.pdf"

-Code für die Befestigung Schöpfung:

var nameEncoding = Encoding.UTF8; 
return new System.Net.Mail.Attachment(new MemoryStream(bytes), 
             MessageBodiesHelpers.EncodeAttachmentName(fileName, nameEncoding), 
             attachment.MediaType) 
     { 
      TransferEncoding = TransferEncoding.Base64, 
      NameEncoding = nameEncoding 
     }; 

-Code innerhalb MessageBodiesHelpers.EncodeAttachmentName genommen von https://social.msdn.microsoft.com/Forums/en-US/b6c764f7-4697-4394-b45f-128a24306d55/40-smtpclientsend-attachments-mit-umlauten-im-dateinamen?forum=dotnetframeworkde

Wenn ich senden, dass Anhang zu Google Mail oder MS Exchange, dann Name des Anhangs erfolgreich decodiert. ABER!

Wenn ich diese Bindung an icloud senden dann bekomme ich "???? - ??????? №4321 от4 ???? pdf."

Mail-Anhang Header:

Von ms Austausch:

Content-Type: application/pdf; 
    name="=?utf-8?B?0KHRh9GR0YIt0LTQ?==?utf-8?B?vtCz0L7QstC+0YAg?==?utf-8?B?4oSWNDMyMSDQvtGC?==?utf-8?B?IDQg0LjRjtC70Y8u?==?utf-8?B?cGRm?=" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

Von icloud:

Content-Transfer-Encoding: BASE64 
Content-Type: APPLICATION/PDF; 
    name="????-??????? =?utf-8?B?4oSWNDMyMSDQvtGC?= 4 ????.pdf" 

Wie formatiere ich den Namen für iCloud? erfolgreich

upd

Wenn ich Nachricht aus Outlook (ms exchange) weiterleiten icloud, dann decodiert Namen der Befestigung. Header:

Content-Transfer-Encoding: BASE64 
Content-Disposition: ATTACHMENT; 
    size=200702; 
    modification-date="Mon, 04 Jul 2016 13:40:22 GMT"; 
    filename*=utf-8''%D0%A1%D1%87%D1%91%D1%82%2D%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%20%E2%84%964321%20%D0%BE%D1%82%204%20%D0%B8%D1%8E%D0%BB%D1%8F.pdf; 
    creation-date="Mon, 04 Jul 2016 13:40:22 GMT" 
Content-Type: APPLICATION/PDF; 
    name*=utf-8''%D0%A1%D1%87%D1%91%D1%82%2D%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%20%E2%84%964321%20%D0%BE%D1%82%204%20%D0%B8%D1%8E%D0%BB%D1%8F.pdf 

Upd2

Wenn ich lesen Nachrichten mit Web-Interface von icloud (icloud.com), dann Name der Bindung erfolgreich decodiert.

+1

Sind Sie in der Lage die Anlage richtig zu iCloud mit einem normalen E-Mail-Client zu senden? Outlook zum Beispiel? –

+0

@MartinBrown, bearbeitet Post – mif

+3

Vielleicht unterstützt icloud Unicode nicht. Aber ich würde versuchen, Encoding.UTF16; – Paparazzi

Antwort

3

In .NET 4.0 SmtpClient implementiert jetzt die RFC-Linienlängenbeschränkungen (76 Zeichen). Dies erforderte umfangreiche Änderungen am Codierprozess und behandelte nicht einige Probleme wie das von Ihnen beschriebene.

In Ihrem Fall gibt es ein Problem mit nicht-ASCII-Anhang-Namen, die zu mehr als 41 Utf-8 Bytes (Encoding.UTF8.GetByteCount (fileName);) codiert werden würde. In diesem Szenario werden die Namen zweimal codiert und können zusätzliche Zeilenumbrüche enthalten. Die einzige bekannte Problemumgehung besteht darin, die Länge von Nicht-ASCII-Dateinamen zu begrenzen.

Sie können diese post für weitere Informationen über Ihr Problem lesen

+0

Ich kenne diesen Fehler. Und wenn ich den Namen der Datei einschränke, ist alles in Ordnung. Aber warum behandeln andere Mail-Apps das Problem? – mif

0

Sieht aus wie es externe icloud Fehler ist. Sie können ein Feedback zu diesem Problem geben here.

0

Werfen Sie einen Blick auf diese discussion. Sie müssen es vielleicht übersetzen oder sehen Sie sich den Code an. This hat auch einige nützliche Informationen und verweist auf den ersten Link als Workaround.

+0

Ich habe bereits Code aus dieser Diskussion verwenden. Link in der Frage. – mif