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 

posted @ 2017-12-07 00:38  法号阿兴  阅读(...)  评论(...编辑  收藏