1、微软已经帮我们封装好了发送邮件的类 MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。MailMessage常用的一些属性有:
1.1、From:发件人邮箱地址。
1.2、To:收件人的邮箱地址。
1.3、CC:抄送人邮箱地址。
1.4、Subject:邮件标题。
1.5、Body:邮件内容。
1.6、Attachments:邮件附件
2、还需要用到SmtpClient类进行发送邮件。SmtpClient类的意思是:允许应用程序使用简单邮件传输协议 (SMTP) 来发送电子邮件。SmtpClient类常用的一些属性和方法:
2.1、Host: 获取或设置用于 SMTP 事务的主机的名称或 IP 地址。
2.2、EnableSsl:是否使用安全套接字层加密连接。
2.3、UseDefaultCredentials:是否随请求一起发送。
2.4、Credentials:获取或设置用于验证发件人身份的凭证。
2.5、Send():发送。
3、上代码。
-
-
#region 发送邮件
-
static void Main(string[] args)
-
{
-
Program p = new Program();
-
-
string FromMail = "155@163.com";
-
string ToMail = "172@qq.com;1725@163.com";
-
string AuthorizationCode = "sx*****l";
-
// string ReplyTo="";
-
// string CCMail="";
-
string File_Path = "C:/Users/xinlings-v/Desktop/啦啦啦.docx";
-
-
p.SendMail(FromMail, ToMail, AuthorizationCode, null, null, File_Path);
-
}
-
-
/// <summary>
-
/// 发送邮件方法
-
/// </summary>
-
/// <param name="FromMail">发件人邮箱</param>
-
/// <param name="ToMail">收件人邮箱(多个收件人地址用";"号隔开)</param>
-
/// <param name="AuthorizationCode">发件人授权码</param>
-
/// <param name="ReplyTo">对方回复邮件时默认的接收地址(不设置也是可以的)</param>
-
/// <param name="CCMail">//邮件的抄送者(多个抄送人用";"号隔开)</param>
-
/// <param name="File_Path">附件的地址</param>
-
public void SendMail(string FromMail, string ToMail, string AuthorizationCode, string ReplyTo, string CCMail, string File_Path)
-
{
-
try
-
{
-
//实例化一个发送邮件类。
-
MailMessage mailMessage = new MailMessage();
-
-
//邮件的优先级,分为 Low, Normal, High,通常用 Normal即可
-
mailMessage.Priority = MailPriority.Normal;
-
-
//发件人邮箱地址。
-
mailMessage.From = new MailAddress(FromMail);
-
-
//收件人邮箱地址。需要群发就写多个
-
//拆分邮箱地址
-
List<string> ToMaillist = ToMail.Split(\';\').ToList();
-
for (int i = 0; i < ToMaillist.Count; i++)
-
{
-
mailMessage.To.Add(new MailAddress(ToMaillist[i])); //收件人邮箱地址。
-
}
-
-
if (ReplyTo == "" || ReplyTo == null)
-
{
-
ReplyTo = FromMial;
-
}
-
-
//对方回复邮件时默认的接收地址(不设置也是可以的哟)
-
mailMessage.ReplyTo = new MailAddress(ReplyTo);
-
-
if (CCMail != "" && CCMail != null)
-
{
-
List<string> CCMaillist = ToMail.Split(\';\').ToList();
-
for (int i = 0; i < CCMaillist.Count; i++)
-
{
-
//邮件的抄送者,支持群发
-
mailMessage.CC.Add(new MailAddress(CCMail));
-
}
-
}
-
//如果你的邮件标题包含中文,这里一定要指定,否则对方收到的极有可能是乱码。
-
mailMessage.SubjectEncoding = Encoding.UTF8;
-
-
//邮件正文是否是HTML格式
-
mailMessage.IsBodyHtml = false;
-
-
//邮件标题。
-
mailMessage.Subject = "发送邮件测试";
-
//邮件内容。
-
mailMessage.Body = "测试群发邮件,以及附件邮件!.....";
-
-
//设置邮件的附件,将在客户端选择的附件先上传到服务器保存一个,然后加入到mail中
-
if (File_Path != "" && File_Path != null)
-
{
-
//将附件添加到邮件
-
mailMessage.Attachments.Add(new Attachment(File_Path));
-
//获取或设置此电子邮件的发送通知。
-
mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
-
}
-
-
//实例化一个SmtpClient类。
-
SmtpClient client = new SmtpClient();
-
-
#region 设置邮件服务器地址
-
-
//在这里我使用的是163邮箱,所以是smtp.163.com,如果你使用的是qq邮箱,那么就是smtp.qq.com。
-
// client.Host = "smtp.163.com";
-
if (FromMail.Length != 0)
-
{
-
//根据发件人的邮件地址判断发件服务器地址 默认端口一般是25
-
string[] addressor = FromMail.Trim().Split(new Char[] { \'@\', \'.\' });
-
switch (addressor[1])
-
{
-
case "163":
-
client.Host = "smtp.163.com";
-
break;
-
case "126":
-
client.Host = "smtp.126.com";
-
break;
-
case "qq":
-
client.Host = "smtp.qq.com";
-
break;
-
case "gmail":
-
client.Host = "smtp.gmail.com";
-
break;
-
case "hotmail":
-
client.Host = "smtp.live.com";//outlook邮箱
-
//client.Port = 587;
-
break;
-
case "foxmail":
-
client.Host = "smtp.foxmail.com";
-
break;
-
case "sina":
-
client.Host = "smtp.sina.com.cn";
-
break;
-
default:
-
client.Host = "smtp.exmail.qq.com";//qq企业邮箱
-
break;
-
}
-
}
-
#endregion
-
-
//使用安全加密连接。
-
client.EnableSsl = true;
-
//不和请求一块发送。
-
client.UseDefaultCredentials = false;
-
-
//验证发件人身份(发件人的邮箱,邮箱里的生成授权码);
-
client.Credentials = new NetworkCredential(FromMail, AuthorizationCode);
-
-
//如果发送失败,SMTP 服务器将发送 失败邮件告诉我
-
mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
-
//发送
-
client.Send(mailMessage);
-
Console.WriteLine("发送成功");
-
}
-
catch (Exception)
-
{
-
-
Console.WriteLine("发送失败");
-
}
-
}
-
#endregion
4、常见错误信息及解决办法。
4.1、mail from address must be same as authorization user
一般出这种情况的原因有两种:
4.1.1、POP3/IMAP/SMTP未开启。(这里以易网邮箱为例)
解决办法:进入邮箱 - - - - -》设置- - - - -》常规设置- - - - -》然后找到POP3/IMAP/SMTP开启即可。
4.1.2、授权码错误。
解决办法:进入邮箱- - - - -》设置- - - - -》常规设置- - - - -》然后找到客户端授权密码,开启客户端授权码
4.2、Error: need EHLO and AUTH first !
一般情况系出现这种错误原因是SmtpClient类的EnableSsl、UseDefaultCredentials属性放到了Credentials属性之下。
解决办法:将SmtpClient类的EnableSsl、UseDefaultCredentials属性放到了Credentials属性之上。