In previous post we saw how to send e-mails using C# in few simple steps. Here we will see how to add attachments to our messages.
Know it:
System.Net.Mail.Attachment : Used to attach any file to our MailMessage.
GUI form:
Implement it:
using System; using System.ComponentModel; using System.Net.Mail; using System.Windows.Forms; namespace MailMe { public partial class Form1 : Form { public Form1() { InitializeComponent(); mailProviderList.SelectedIndex = 0; } private void sendButton_Click(object sender, EventArgs e) { //Fetch all message details from the form. string To = this.toTextbox.Text; string BCC = this.bccTextbox.Text; string CC = this.ccTextbox.Text; string Subject = this.subjectTextbox.Text; string Body = this.bodyTextbox.Text; //Fetch all attachment file paths from Attachment list. string[] Attachments = new string[this.attachmentListbox.Items.Count]; this.attachmentListbox.Items.CopyTo(Attachments, 0); //Fetch the smtp server details string SelectedMailProvider = (string)this.mailProviderList.SelectedItem; string SmtpHost = ""; int PORT = 587; switch (SelectedMailProvider) { case "Gmail": SmtpHost = SmtpServer.Gmail; PORT = (int)SmtpServer.PORT.Gmail; break; case "Hotmail": SmtpHost = SmtpServer.Hotmail; PORT = (int)SmtpServer.PORT.Hotmail; break; case "Outlook": SmtpHost = SmtpServer.Outlook; PORT = (int)SmtpServer.PORT.Outlook; break; case "Office365": SmtpHost = SmtpServer.Office365; PORT = (int)SmtpServer.PORT.Office365; break; case "Yahoo Mail": SmtpHost = SmtpServer.YahooMail; PORT = (int)SmtpServer.PORT.YahooMail; break; case "Yahoo Mail Plus": SmtpHost = SmtpServer.YahooMailPlus; PORT = (int)SmtpServer.PORT.YahooMailPlus; break; case "Verizon": SmtpHost = SmtpServer.Verizon; PORT = (int)SmtpServer.PORT.Verizon; break; } //Fetch Authentication details string UserID = this.userIdTextbox.Text; string Password = this.passwordTextbox.Text; try { //Initializes a new SmtpClient. SmtpClient client = new SmtpClient(SmtpHost, PORT); client.EnableSsl = true; client.Credentials = new System.Net.NetworkCredential(UserID, Password); //client_SendCompleted method will be called after the email has been sent successfully. client.SendCompleted += client_SendCompleted; //Initializes new MailMessage. MailMessage msg = new MailMessage(UserID, To); //Add BCC list of the message. if (!string.IsNullOrEmpty(BCC)) { string[] BccList = BCC.Split(','); foreach (string bcc in BccList) { msg.Bcc.Add(bcc); } } //Add cc list of the message. if (!string.IsNullOrEmpty(CC)) { string[] ccList = CC.Split(','); foreach (string cc in ccList) { msg.CC.Add(cc); } } //Add subject of the message. msg.Subject = Subject; //Add Body of the message. msg.Body = Body; //Add attachments to the message. foreach (string filePaths in Attachments) { msg.Attachments.Add(new Attachment(filePaths)); } //Sends the message in backgound. client.SendAsync(msg, null); MessageBox.Show("Please wait while sending..."); } catch (Exception er) { MessageBox.Show("Unable to send mail.nError:" + er.Message, "Error"); } } void client_SendCompleted(object sender, AsyncCompletedEventArgs e) { if (e.Error != null) { MessageBox.Show("Unable to send email.nError:" + e.Error.Message, "Error"); } else { MessageBox.Show("Mail sent successfully."); } } private void closeButton_Click(object sender, EventArgs e) { //Closes the form. Environment.Exit(0); } private void addAttachmentButton_Click(object sender, EventArgs e) { OpenFileDialog FileChooser = new OpenFileDialog(); FileChooser.Multiselect = true; FileChooser.Title = "Insert Attachments"; DialogResult res = FileChooser.ShowDialog(); if (res != System.Windows.Forms.DialogResult.Cancel) { foreach (string filePath in FileChooser.FileNames) { this.attachmentListbox.Items.Add(filePath); } } } private void removeMenu_Click(object sender, EventArgs e) { //Gets the selected index from attachment listbox and remove the element from the list. int SelectedIndex = this.attachmentListbox.SelectedIndex; if (SelectedIndex >= 0) this.attachmentListbox.Items.RemoveAt(SelectedIndex); } private void removeAllMenu_Click(object sender, EventArgs e) { //Clears all elements present in Attachment listbox this.attachmentListbox.Items.Clear(); } } ////// A list of popular smtp server with their port. /// public class SmtpServer { public const string Gmail = "smtp.gmail.com"; public const string Hotmail = "smtp.live.com"; public const string Outlook = "smtp.live.com"; public const string Office365 = "smtp.office365.com"; public const string Verizon = "outgoing.yahoo.verizon.net"; public const string YahooMail = "smtp.mail.yahoo.com"; public const string YahooMailPlus = "plus.smtp.mail.yahoo.com"; //Smtp servers PORT. public enum PORT { Gmail = 587, Outlook = 587, Office365 = 587, Hotmail = 465, YahooMail = 465, YahooMailPlus = 465, Verizon = 587 } } }
Output:
Download Exe
Download Full C# Project
Happy coding 😉