Envoi d’e-mails avec pièces jointes de C #, les pièces jointes arrivent en tant que partie 1.2 dans Thunderbird

J’ai une application C # qui envoie des rapports Excel par courrier électronique via un serveur Exchange 2007 utilisant SMTP. Ceux-ci arrivent bien pour les utilisateurs d’Outlook, mais pour les utilisateurs de Thunderbird et Blackberry, les pièces jointes ont été renommées en “Part 1.2”.

J’ai trouvé cet article qui décrit le problème, mais ne semble pas me donner une solution de contournement. Je n’ai pas le contrôle du serveur Exchange, je ne peux donc pas y apporter de modifications. Y a-t-il quelque chose que je puisse faire à la fin du C #? J’ai essayé d’utiliser des noms de fichiers courts et le codage HTML pour le corps, mais aucun n’a fait de différence.

Mon code d’envoi de mail est simplement ceci:

public static void SendMail(ssortingng recipient, ssortingng subject, ssortingng body, ssortingng attachmentFilename) { SmtpClient smtpClient = new SmtpClient(); NetworkCredential basicCredential = new NetworkCredential(MailConst.Username, MailConst.Password); MailMessage message = new MailMessage(); MailAddress fromAddress = new MailAddress(MailConst.Username); // setup up the host, increase the timeout to 5 minutes smtpClient.Host = MailConst.SmtpServer; smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = basicCredential; smtpClient.Timeout = (60 * 5 * 1000); message.From = fromAddress; message.Subject = subject; message.IsBodyHtml = false; message.Body = body; message.To.Add(recipient); if (attachmentFilename != null) message.Attachments.Add(new Attachment(attachmentFilename)); smtpClient.Send(message); } 

Merci pour toute aide.

Remplir explicitement les champs ContentDisposition a fait l’affaire.

 if (attachmentFilename != null) { Attachment attachment = new Attachment(attachmentFilename, MediaTypeNames.Application.Octet); ContentDisposition disposition = attachment.ContentDisposition; disposition.CreationDate = File.GetCreationTime(attachmentFilename); disposition.ModificationDate = File.GetLastWriteTime(attachmentFilename); disposition.ReadDate = File.GetLastAccessTime(attachmentFilename); disposition.FileName = Path.GetFileName(attachmentFilename); disposition.Size = new FileInfo(attachmentFilename).Length; disposition.DispositionType = DispositionTypeNames.Attachment; message.Attachments.Add(attachment); } 

Code simple pour envoyer un email avec pièce jointe.

source: http://www.coding-issues.com/2012/11/sending-email-with-attachments-from-c.html

 using System.Net; using System.Net.Mail; public void email_send() { MailMessage mail = new MailMessage(); SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com"); mail.From = new MailAddress("your [email protected]"); mail.To.Add("[email protected]"); mail.Subject = "Test Mail - 1"; mail.Body = "mail with attachment"; System.Net.Mail.Attachment attachment; attachment = new System.Net.Mail.Attachment("c:/textfile.txt"); mail.Attachments.Add(attachment); SmtpServer.Port = 587; SmtpServer.Credentials = new System.Net.NetworkCredential("your [email protected]", "your password"); SmtpServer.EnableSsl = true; SmtpServer.Send(mail); } 

Voici un simple code d’envoi de courrier avec pièce jointe

 try { SmtpClient mailServer = new SmtpClient("smtp.gmail.com", 587); mailServer.EnableSsl = true; mailServer.Credentials = new System.Net.NetworkCredential("[email protected]", "mypassword"); ssortingng from = "[email protected]"; ssortingng to = "[email protected]"; MailMessage msg = new MailMessage(from, to); msg.Subject = "Enter the subject here"; msg.Body = "The message goes here."; msg.Attachments.Add(new Attachment("D:\\myfile.txt")); mailServer.Send(msg); } catch (Exception ex) { Console.WriteLine("Unable to send email. Error : " + ex); } 

En savoir plus Envoi d’e-mails avec pièce jointe en C #

Compléter la solution de Ranadheer, en utilisant Server.MapPath pour localiser le fichier

 System.Net.Mail.Attachment attachment; attachment = New System.Net.Mail.Attachment(Server.MapPath("~/App_Data/hello.pdf")); mail.Attachments.Add(attachment); 
 private void btnSent_Click(object sender, EventArgs e) { try { MailMessage mail = new MailMessage(); SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com"); mail.From = new MailAddress(txtAcc.Text); mail.To.Add(txtToAdd.Text); mail.Subject = txtSub.Text; mail.Body = txtContent.Text; System.Net.Mail.Attachment attachment; attachment = new System.Net.Mail.Attachment(txtAttachment.Text); mail.Attachments.Add(attachment); SmtpServer.Port = 587; SmtpServer.Credentials = new System.Net.NetworkCredential(txtAcc.Text, txtPassword.Text); SmtpServer.EnableSsl = true; SmtpServer.Send(mail); MessageBox.Show("mail send"); } catch (Exception ex) { MessageBox.Show(ex.ToSsortingng()); } } private void button1_Click(object sender, EventArgs e) { MailMessage mail = new MailMessage(); openFileDialog1.ShowDialog(); System.Net.Mail.Attachment attachment; attachment = new System.Net.Mail.Attachment(openFileDialog1.FileName); mail.Attachments.Add(attachment); txtAttachment.Text =Convert.ToSsortingng (openFileDialog1.FileName); } 

Essaye ça:

 private void btnAtt_Click(object sender, EventArgs e) { openFileDialog1.ShowDialog(); Attachment myFile = new Attachment(openFileDialog1.FileName); MyMsg.Attachments.Add(myFile); } 

bonjour frères j’ai fait un code court pour faire que je voudrais partager avec vous

ici le code principal

  public void Send(ssortingng from, ssortingng password, ssortingng to, ssortingng Message, ssortingng subject, ssortingng host, int port, ssortingng file) { MailMessage email = new MailMessage(); email.From = new MailAddress(from); email.To.Add(to); email.Subject = subject; email.Body = Message; SmtpClient smtp = new SmtpClient(host, port); smtp.UseDefaultCredentials = false; NetworkCredential nc = new NetworkCredential(from, password); smtp.Credentials = nc; smtp.EnableSsl = true; email.IsBodyHtml = true; email.Priority = MailPriority.Normal; email.BodyEncoding = Encoding.UTF8; if (file.Length > 0) { Attachment attachment; attachment = new Attachment(file); email.Attachments.Add(attachment); } // smtp.Send(email); smtp.SendCompleted += new SendCompletedEventHandler(SendCompletedCallBack); ssortingng userstate = "sending ..."; smtp.SendAsync(email, userstate); } private static void SendCompletedCallBack(object sender,AsyncCompletedEventArgs e) { ssortingng result = ""; if (e.Cancelled) { MessageBox.Show(ssortingng.Format("{0} send canceled.", e.UserState),"Message",MessageBoxButtons.OK,MessageBoxIcon.Information); } else if (e.Error != null) { MessageBox.Show(ssortingng.Format("{0} {1}", e.UserState, e.Error), "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("your message is sended", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); } } 

dans votre bouton faire des choses comme ça
vous pouvez append des filtres jpg ou pdf et plus .. c’est juste un exemple

 using (OpenFileDialog attachement = new OpenFileDialog() { Filter = "Exel Client|*.png", ValidateNames = true }) { if (attachement.ShowDialog() == DialogResult.OK) { Send("[email protected]", "gmail_password", "[email protected]", "just smile ", "mail with attachement", "smtp.gmail.com", 587, attachement.FileName); } } 

voter si cela aide de donner un retour merci

J’ai essayé le code fourni par Ranadheer Reddy (ci-dessus) et cela a très bien fonctionné. Si vous utilisez un ordinateur d’entreprise doté d’un serveur restreint, vous devrez peut-être remplacer le port SMTP par 25 et laisser votre nom d’utilisateur et votre mot de passe vides car ils seront automatiquement remplis par votre administrateur.

À l’origine, j’ai essayé d’utiliser EASendMail du gestionnaire de paquets nugent, pour réaliser que c’était une version payante avec une version d’essai de 30 jours. Ne taillez pas votre temps avec cela, sauf si vous prévoyez de l’acheter. J’ai remarqué que le programme fonctionnait beaucoup plus rapidement avec EASendMail, mais pour moi, libre rapidement.

Juste ma valeur de 2 cents.