Pièce jointe de courriel avec nom long non-ascii

j'essaie d'envoyer System.Net.Mail.MailMessageSystem.Net.Mail.Attachment.

le nom de l'attachement est " Счёт-договор №4321 от 4 июля.pdf"

Code pour la fixation de création:

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 à l'intérieur de MessageBodiesHelpers.EncodeAttachmentName tiré de https://social.msdn.microsoft.com/Forums/en-US/b6c764f7-4697-4394-b45f-128a24306d55/40-smtpclientsend-attachments-mit-umlauten-im-dateinamen?forum=dotnetframeworkde

si j'envoie cette pièce jointe à gmail ou ms exchange, alors le nom de l'attachement décodé avec succès. mais!

si j'envoie cette pièce jointe à icloud puis j'obtiens"????-??????? №4321 от4 ????.pdf"

en-têtes de courrier joint:

à Partir de ms exchange:

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

à Partir d'icloud:

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

comment formater le nom d'icloud?

upd

si je transmets un message d'outlook (MS exchange) à icloud, alors le nom de la pièce jointe est décodé réussi. Les en-têtes:

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

si je lis des messages en utilisant l'interface web d'icloud (icloud.com), puis le nom de la pièce jointe décodée avec succès.

10
demandé sur mif 2016-07-04 17:35:38

4 réponses

In .NET 4.0 SmtpClient implémente maintenant les limites de longueur de ligne RFC (76 caractères). Cela a nécessité des changements importants dans le processus d'encodage et n'a pas couvert quelques problèmes comme celui que vous décrivez.

dans votre cas, il y a un problème avec les noms de pièces jointes non ascii qui seraient encodés à plus de 41 octets utf-8 (encodage.UTF8.GetByteCount (fileName);). Dans ce scénario, les noms sont codés deux fois et peut avoir des sauts de ligne supplémentaires. La seule solution connue est de limiter la longueur des noms de fichiers non ascii.

vous pouvez lire ce post pour en savoir plus sur votre problème

4
répondu Abd 2016-07-11 10:12:26

essayez de changer L'encodage de Base64 à UTF8.

Référence: https://discussions.apple.com/thread/7450442

0
répondu John Meyer 2016-07-07 22:01:34

on dirait que c'est un bug icloud externe. Vous pouvez donner un retour d'informations sur cette question ici.

0
répondu Mikolaytis 2016-07-08 12:15:47

jetez un oeil à cette discussion. Vous devrez peut-être le traduire ou simplement regarder le code. a aussi quelques informations et références utiles le premier lien comme une solution de contournement.

0
répondu Dennis 2016-07-09 03:21:46