C# 如何通过mailto标签和SMTP协议两种方式发送邮件

时间:2022-03-02 09:22:14

  本文主要讲解如何通过如现mailto标签和SMTP协议两种方式发送邮件,下面就直入主题

方法一、通过mailto标签发送邮件

  通过mailto不是正真意义上的发送邮件,它只是会自动调用我们本地默认的邮件服务软件(这取决于我们本地安装了什么邮件软件,outlook,firemail等等),发送还是需要我们自己点击发送才能完成。

  mailto标签有很多实用的方法,比如:加入邮件的默认主题、抄送地址、暗送(密件抄送)地址,邮件内容等待.....

1、为邮件加入发件人

  格式:mailto:发件人地址

  代码示例

         /// <summary>
/// sendFrom:发件人
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}", sendFrom);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}

2、为邮件加入默认标题

  格式:mailto:发件人地址?subject=邮件主题

  代码示例

         /// <summary>
/// sendFrom:发件人
/// subjetc:主题
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}?subject={1}", sendFrom, subjetc);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}

3、为邮件加入默认的抄送地址

    格式:mailto:发件人地址?cc=抄送地址

  代码示例

         /// <summary>
/// sendFrom:发件人
/// sendCC:抄送地址
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}?cc={1}", sendFrom, sendCC);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}

4、为邮件加入默认暗送(密件抄送)地址

    格式:mailto:发件人地址?bcc=密送地址

  代码示例

         /// <summary>
/// sendFrom:发件人
/// sendBCC:密送地址
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}?bcc={1}", sendFrom, sendBCC);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}

5、为邮件加入默认的内容

    格式:mailto:发件人地址?body=邮件内容

  代码示例

         /// <summary>
/// sendFrom:发件人
/// content:邮件内容
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}?body={1}", sendFrom, content);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}

6、多个邮件地址

    格式:mailto:发件人地址1,发件地址2,发件地址3(以逗号分隔)

7、综合型的:加入默认抄送地址,标题,内容

    格式:mailto:发件人地址1,发件人地址2?cc=抄送地址&bcc=密送地址&subject=主题&body=邮件内容

  代码示例

         /// <summary>
/// sendFrom:发件人
/// sendCC:抄送
/// subjetc:密送
/// subjetc:主题
/// content:邮件内容
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e)
{
string message = string.Format("mailto:{0}?cc={1}&bcc={2}&subject={3}&body={4}", sendFrom, sendCC,
sendBCC, subjetc, content);
System.Diagnostics.Process.Start(message);//调用进程启动邮件
}

如图所示:

C# 如何通过mailto标签和SMTP协议两种方式发送邮件

方法二、通过SMTP协议发送邮件

核心代码:

         /// <summary>
/// 发送邮件
/// </summary>
/// <param name="userEmailAddress">发件人地址</param>
/// <param name="userName">发件人姓名(可为空)</param>
/// <param name="password">密码</param>
/// <param name="host">邮件服务器地址</param>
/// <param name="port"></param>
/// <param name="sendToList">收件人(多个电子邮件地址之间必须用逗号字符(“,”)分隔)</param>
/// <param name="sendCCList">抄送人(多个电子邮件地址之间必须用逗号字符(“,”)分隔)</param>
/// <param name="subject">主题</param>
/// <param name="body">内容</param>
/// <param name="attachmentsPath">附件路径</param>
/// <param name="errorMessage">错误信息</param>
public static bool SendMessage(string userEmailAddress, string userName, string password, string host, int port,
string[] sendToList, string[] sendCCList, string subject, string body, string[] attachmentsPath, out string errorMessage)
{
errorMessage = string.Empty;
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential(userEmailAddress, password);//用户名、密码
client.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
client.Host = host;//邮件服务器
client.Port = port;//端口号 非SSL方式,默认端口号为:25
client.UseDefaultCredentials = true; MailMessage msg = new MailMessage();
//加发件人
foreach (string send in sendToList)
{
msg.To.Add(send);
}
//加抄送
foreach (string cc in sendCCList)
{
msg.To.Add(cc);
} //在有附件的情况下添加附件
if (attachmentsPath != null && attachmentsPath.Length > )
{
foreach (string path in attachmentsPath)
{
var attachFile = new Attachment(path);
msg.Attachments.Add(attachFile);
}
}
msg.From = new MailAddress(userEmailAddress, userName);//发件人地址
msg.Subject = subject;//邮件标题
msg.Body = body;//邮件内容
msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
msg.IsBodyHtml = true;//是否是HTML邮件
msg.Priority = MailPriority.High;//邮件优先级 try
{
client.Send(msg);
return true;
}
catch (System.Net.Mail.SmtpException ex)
{
errorMessage = ex.Message;
return false;
}
}

如图所示:

C# 如何通过mailto标签和SMTP协议两种方式发送邮件

 PS:如有疑问,请留言,未经允许,不得私自转载,转载请注明出处:http://www.cnblogs.com/xuliangxing/p/7987282.html

C# 如何通过mailto标签和SMTP协议两种方式发送邮件

C# 如何通过mailto标签和SMTP协议两种方式发送邮件