2012-05-16 5 views
0

J'ai une application qui envoie parfois un e-mail avec trois pièces jointes.Erreur impaire lors de l'attachement de fichiers avec System.Net.Mail

Une pièce jointe est le fichier initialement envoyé à ma boîte aux lettres par un utilisateur, je réponds donc avec le même fichier que celui qui m'a été envoyé. Je fais cela par MemoryStream, et ça marche très bien.

Les deux autres fichiers sont un fichier .PDF et un fichier .XLSX.

var excelTemplatePath = GetFilePathToDefaultExcelFile(); 

    if (excelTemplatePath != null) 
     mailMessage.Attachments.Add(new System.Net.Mail.Attachment(excelTemplatePath)); 

    var pdfPath = GetFilePathToPDFInstructions(); 

    if (pdfPath != null) 
     mailMessage.Attachments.Add(new System.Net.Mail.Attachment(pdfPath)); 

Voici la partie étrange. Ils s'attachent très bien lorsque je débogue l'application dans Visual Studio. Parfait à chaque fois.

Lorsque j'exécute le fichier .exe compilé, que ce soit à partir de/BIN/ou de l'endroit où je choisis de le déployer, cela gâche le courrier électronique. Il se fixe pas de fichiers, et envoie simplement quelque chose qui ressemble à ce sérialisé le fichier (s) dans le corps du texte e-mail:

cHMvYXBwLnhtbFBLAQItABQABgAIAAAAIQAkRr56YQEAAG0DAAAYAAAAAAAAAAAA 
AAAAAKblAABjdXN0b21YbWwvaXRlbVByb3BzMy54bWxQSwECLQAUAAYACAAAACEA 
te/KYaMAAADVAAAAEwAAAAAAAAAAAAAAAABl5wAAY3VzdG9tWG1sL2l0ZW0xLnht 
bFBLAQItABQABgAIAAAAIQB/jqJ4TAEAAOYCAAAYAAAAAAAAAAAAAAAAAGHoAABj 
dXN0b21YbWwvaXRlbVByb3BzMS54bWxQSwECLQAUAAYACAAAACEAvYRiI5AAAADb 
AAAAEwAAAAAAAAAAAAAAAAAL6gAAY3VzdG9tWG1sL2l0ZW0yLnhtbFBLAQItABQA 
BgAIAAAAIQCQ9oX78gAAAE8BAAAYAAAAAAAAAAAAAAAAAPTqAABjdXN0b21YbWwv 
aXRlbVByb3BzMi54bWxQSwECLQAUAAYACAAAACEAZaNvWToEAACtDQAAEwAAAAAA 
AAAAAAAAAABE7AAAY3VzdG9tWG1sL2l0ZW0zLnhtbFBLAQItABQABgAIAAAAIQDc 
SoJLbAEAAJ4CAAARAAAAAAAAAAAAAAAAANfwAABkb2NQcm9wcy9jb3JlLnhtbFBL 
BQYAAAAAGwAbADoHAAB68wAAAAA= 


----boundary_0_61985b34-0fc6-4f91-99b8-464d8f613491 

Content-Type: application/octet-stream; name="Microsoft Office 2003 Compatibility 
Installation Instructions.pdf" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

----boundary_0_61985b34-0fc6-4f91-99b8-464d8f613491-- 

(Ce goobeldy Goop est juste une petite partie de tous les déchets contenus dans la e-mail, mais il semble identique partout.)

J'ai essayé d'utiliser un constructeur différent lors de la création de la pièce jointe, pour inclure un MIME-TYPE de "application/pdf" et quoi d'autre. Quand je l'ai fait, il a changé le type de contenu dans le corps de l'e-mail en application/pdf, mais l'e-mail contenait toujours toutes les ordures et n'a pas joint le fichier.

Pourquoi cela fonctionnerait-il dans l'EDI et non dans le .EXE? C'est un comportement étrange pour moi. Merci.

SOLUTION

La solution spécifique mettait l'TransferEncoding à l'aide quoted System.Net.Mime. Je fais maintenant cela pour chaque pièce jointe et les fichiers attachent comme vous le souhaitez.

+0

Ce "goobeldy goop" est l'encodage en base 64 des fichiers binaires. Pourquoi cela fonctionnerait dans le débogage et non autonome est un mystère. Votre solution d'utiliser quoted printable ne devrait pas être nécessaire, et ne répond pas à votre question de savoir pourquoi le code original n'a pas fonctionné en dehors du débogueur. À moins que vous ne trouviez cette réponse, vous risquez de rencontrer à nouveau des problèmes étranges. –

Répondre

0

La solution spécifique à mon problème était la définition du TransferEncoding à QuotedPrintable en utilisant System.Net.Mime.

var attachment = new System.Net.Mail.Attachment(filePath); 
attachment.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable; 
mailMessage.Attachments.Add(attachment); 

Maintenant, je fais cela pour chaque pièce jointe et les fichiers attachent comme vous le souhaitez.

Questions connexes