最近搞了一个关于员工生日邮件提醒的接口。对C#下邮件发送进行了学习,下面和大家分享下我的经验.
基于C#邮件发送的方式有哪几种?
第一种:System.Net.Mail,此类是.Net2.0后引用的,支持邮件的群发,抄送,内容切图...用起来更方便,清晰,安全机制更高.
但这个也有弊端,就是关于stmp身份验证的问题,我们公司邮箱服务器是Mail.ghepc.com,用这个类就发送不了,查了很多资料
有人说是微软的Bug问题。后来就用了另一种方法System.Web.Mail,这个是.net1.0的东西,比较老,可以解决类似QQ邮箱,168,
公司邮箱...身份验证的问题.
具体发送方法: MailMessage mailMessage;
SmtpClient smtpClient;
//构造方法
public SendMails(string To, string From, string Body, string Title, string Password)
{
mailMessage = new MailMessage();
mailMessage.To.Add(To);
mailMessage.From = new System.Net.Mail.MailAddress(From);
mailMessage.Subject = Title;
mailMessage.Body = Body;
mailMessage.IsBodyHtml = true;
mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
mailMessage.Priority = System.Net.Mail.MailPriority.Normal;
this.password = Password;
}
/// <summary>
/// 添加附件
/// </summary>
public void Attachments(string Path)
{
string[] path = Path.Split(',');
Attachment data;
ContentDisposition disposition;
for (int i = 0; i < path.Length; i++)
{
data = new Attachment(path[i], MediaTypeNames.Application.Octet);//实例化附件
disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(path[i]);//获取附件的创建日期
disposition.ModificationDate = System.IO.File.GetLastWriteTime(path[i]);//获取附件的修改日期
disposition.ReadDate = System.IO.File.GetLastAccessTime(path[i]);//获取附件的读取日期
mailMessage.Attachments.Add(data);//添加到附件中
}
}
/// <summary>
/// 发送邮件
/// </summary>
public void Send()
{
//smtpClient.EnableSsl = true;Gmail需要设置SSl连接
if (mailMessage != null)
{
smtpClient = new SmtpClient();
smtpClient.Credentials = new NetworkCredential
(mailMessage.From.Address, password, "CropDomain");//设置发件人身份的票据
smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtpClient.Host = "smtp." + mailMessage.From.Host;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.Send(mailMessage);
}
}
}
需要注意的是Gmail需要这个smtpClient.EnableSsl = true;Gmail需要设置SSl连接,126,163不需要
第二种方法:System.Web.Mail,需要引入com组件system.web.这个类比较老,而且不是很好用,很多方法都不支持,但可以解决我上诉的
一些身份验证问题,所以要根据自己情况来用
具体Code:
private MailMessage _mailMessage;
public WebSendMail(string To, string From, string Body, string Title, string Password)
{
_mailMessage = new MailMessage();
_mailMessage.To = To;
_mailMessage.From = From;
_mailMessage.Subject = Title;
_mailMessage.Body = Body;
_mailMessage.BodyFormat = MailFormat.Html;
_mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
_mailMessage.Priority = MailPriority.Normal;
_mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1);
_mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", From);
_mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", Password);
}
/// <summary>
/// 发送附件
/// </summary>
public void sendPass(string pass)
{
MailAttachment attachment = new System.Web.Mail.MailAttachment(pass);
_mailMessage.Attachments.Add(attachment);
}
/**/
/// <summary>
/// 发送邮件
/// </summary>
public bool Send()
{
try
{
SmtpMail.SmtpServer = "mail.ghepc.com";
SmtpMail.Send(_mailMessage);
return true;
}
catch (Exception ex)
{
LogHelp.WriteInLog("发送异常:" + ex.Message, true);
return false;
}
}
希望对大家有帮助...第一次写东西!s