C# 如何通过mailto标签和SMTP协议两种方式发送邮件
本文主要讲解如何通过如现mailto标签和SMTP协议两种方式发送邮件,下面就直入主题
方法一、通过mailto标签发送邮件
通过mailto不是正真意义上的发送邮件,它只是会自动调用我们本地默认的邮件服务软件(这取决于我们本地安装了什么邮件软件,outlook,firemail等等),发送还是需要我们自己点击发送才能完成。
mailto标签有很多实用的方法,比如:加入邮件的默认主题、抄送地址、暗送(密件抄送)地址,邮件内容等待.....
1、为邮件加入发件人
格式:mailto:发件人地址
代码示例
1 /// <summary> 2 /// sendFrom:发件人 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 7 { 8 string message = string.Format("mailto:{0}", sendFrom); 9 System.Diagnostics.Process.Start(message);//调用进程启动邮件 10 }
2、为邮件加入默认标题
格式:mailto:发件人地址?subject=邮件主题
代码示例
1 /// <summary> 2 /// sendFrom:发件人 3 /// subjetc:主题 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 8 { 9 string message = string.Format("mailto:{0}?subject={1}", sendFrom, subjetc); 10 System.Diagnostics.Process.Start(message);//调用进程启动邮件 11 }
3、为邮件加入默认的抄送地址
格式:mailto:发件人地址?cc=抄送地址
代码示例
1 /// <summary> 2 /// sendFrom:发件人 3 /// sendCC:抄送地址 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 8 { 9 string message = string.Format("mailto:{0}?cc={1}", sendFrom, sendCC); 10 System.Diagnostics.Process.Start(message);//调用进程启动邮件 11 }
4、为邮件加入默认暗送(密件抄送)地址
格式:mailto:发件人地址?bcc=密送地址
代码示例
1 /// <summary> 2 /// sendFrom:发件人 3 /// sendBCC:密送地址 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 8 { 9 string message = string.Format("mailto:{0}?bcc={1}", sendFrom, sendBCC); 10 System.Diagnostics.Process.Start(message);//调用进程启动邮件 11 }
5、为邮件加入默认的内容
格式:mailto:发件人地址?body=邮件内容
代码示例
1 /// <summary> 2 /// sendFrom:发件人 3 /// content:邮件内容 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 8 { 9 string message = string.Format("mailto:{0}?body={1}", sendFrom, content); 10 System.Diagnostics.Process.Start(message);//调用进程启动邮件 11 }
6、多个邮件地址
格式:mailto:发件人地址1,发件地址2,发件地址3(以逗号分隔)
7、综合型的:加入默认抄送地址,标题,内容
格式:mailto:发件人地址1,发件人地址2?cc=抄送地址&bcc=密送地址&subject=主题&body=邮件内容
代码示例
1 /// <summary> 2 /// sendFrom:发件人 3 /// sendCC:抄送 4 /// subjetc:密送 5 /// subjetc:主题 6 /// content:邮件内容 7 /// </summary> 8 /// <param name="sender"></param> 9 /// <param name="e"></param> 10 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 11 { 12 string message = string.Format("mailto:{0}?cc={1}&bcc={2}&subject={3}&body={4}", sendFrom, sendCC, 13 sendBCC, subjetc, content); 14 System.Diagnostics.Process.Start(message);//调用进程启动邮件 15 }
如图所示:
方法二、通过SMTP协议发送邮件
核心代码:
1 /// <summary> 2 /// 发送邮件 3 /// </summary> 4 /// <param name="userEmailAddress">发件人地址</param> 5 /// <param name="userName">发件人姓名(可为空)</param> 6 /// <param name="password">密码</param> 7 /// <param name="host">邮件服务器地址</param> 8 /// <param name="port"></param> 9 /// <param name="sendToList">收件人(多个电子邮件地址之间必须用逗号字符(“,”)分隔)</param> 10 /// <param name="sendCCList">抄送人(多个电子邮件地址之间必须用逗号字符(“,”)分隔)</param> 11 /// <param name="subject">主题</param> 12 /// <param name="body">内容</param> 13 /// <param name="attachmentsPath">附件路径</param> 14 /// <param name="errorMessage">错误信息</param> 15 public static bool SendMessage(string userEmailAddress, string userName, string password, string host, int port, 16 string[] sendToList, string[] sendCCList, string subject, string body, string[] attachmentsPath, out string errorMessage) 17 { 18 errorMessage = string.Empty; 19 SmtpClient client = new SmtpClient(); 20 client.Credentials = new System.Net.NetworkCredential(userEmailAddress, password);//用户名、密码 21 client.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式 22 client.Host = host;//邮件服务器 23 client.Port = port;//端口号 非SSL方式,默认端口号为:25 24 client.UseDefaultCredentials = true; 25 26 MailMessage msg = new MailMessage(); 27 //加发件人 28 foreach (string send in sendToList) 29 { 30 msg.To.Add(send); 31 } 32 //加抄送 33 foreach (string cc in sendCCList) 34 { 35 msg.To.Add(cc); 36 } 37 38 //在有附件的情况下添加附件 39 if (attachmentsPath != null && attachmentsPath.Length > 0) 40 { 41 foreach (string path in attachmentsPath) 42 { 43 var attachFile = new Attachment(path); 44 msg.Attachments.Add(attachFile); 45 } 46 } 47 msg.From = new MailAddress(userEmailAddress, userName);//发件人地址 48 msg.Subject = subject;//邮件标题 49 msg.Body = body;//邮件内容 50 msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码 51 msg.IsBodyHtml = true;//是否是HTML邮件 52 msg.Priority = MailPriority.High;//邮件优先级 53 54 try 55 { 56 client.Send(msg); 57 return true; 58 } 59 catch (System.Net.Mail.SmtpException ex) 60 { 61 errorMessage = ex.Message; 62 return false; 63 } 64 }
如图所示:
PS:如有疑问,请留言,未经允许,不得私自转载,转载请注明出处:http://www.cnblogs.com/xuliangxing/p/7987282.html