关于C#程序中的SMTP发邮件
关于发邮件,在.net之前, 做Delphi、vb、c,asp,我们都去调用jmail组件。到了.net,框架中已经集成此功能,在.net中发邮件,也就是调用框架完成一个功能, 较为简单, 所以直接贴出代码
.Net1.1/.Net1.0中的方式(using System.Web.Mail;):
MailAttachment mlA = new MailAttachment(@"附件文件路径"); //新建邮件附件对象。
MailMessage mlMsg = new MailMessage(); //新建邮件对象。
//mlMsg.Cc 抄送:可以看到邮件转发过来的详细信息。
//mlMsg.Bcc 密送:
mlMsg.From = "xxxxxx@163.com"; //发件人地址
mlMsg.Subject = "test mail11"; //主题
mlMsg.To = "zzzzzzzzz@tom.com"; //收件人地址
mlMsg.Body = "<html>......";
mlMsg.BodyFormat = MailFormat.Html;
mlMsg.BodyEncoding = System.Text.Encoding.UTF8;
//下面的三项,很多朋友都喜欢问为什么,当然这个大家就有必要去了解一下现在邮件系统 邮件地址的反向查询 技术。
mlMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
//是否需要验证,一般是要的
mlMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "xxxxxx");
//xxxxxx:自己邮箱的用户名
mlMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "123456");
//123456:自己邮箱的密码
SmtpMail.SmtpServer = "smtp.163.com"; //smtp服务器名称
mlMsg.Attachments.Add(mlA); //增加附件对象
SmtpMail.Send(mlMsg); //发送邮件
以上方式,有一个问题就是好像不支持ssl,所以2.0中做了进一步的改进
.net2.0中的方式(using System.Net.Mail;)
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="subject">邮件标题</param>
/// <param name="tos">收件人列表</param>
/// <param name="content">邮件内容</param>
/// <returns></returns>
static public bool Send(string subject, List<string> tos, string content)
{
try
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress("发件人邮件地址", "发件人名称");
mail.Subject = subject;
mail.Body = content;
mail.IsBodyHtml = true;
foreach (string to in tos)
{
mail.To.Add(to);
}
SmtpClient client = new SmtpClient("smtp.gmail.com");
//下面的一项,很多朋友都喜欢问为什么,当然这个大家就有必要去了解一下现在邮件系统 邮件地址的反向查询 技术。
client.Credentials = new NetworkCredential("发件人邮箱用户名", "发件人邮箱密码");
client.EnableSsl = true;
client.Send(mail);
return true;
}
catch
{
return false;
}
}
这个代码是简单,copy过去基本就可以发邮件, 但是碰到最多的使用上面代码不能发送成功的原因大体有2种,
1、邮箱不支持smtp功能,比如现在新申请的网易的免费邮箱
2、正常发送一段时间之后, 就不能使用了。 这个一般是邮箱运营商把你的这个邮箱地址当垃圾邮件的发送者给封了; 比如gmail,若你每注册一个用户给用户发送一封邮件,若发送的过于频繁,则很有可能被封掉。