using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Mail;
using System.Net.Mime;
using System.Text;
namespace Azylee.YeahWeb.EmailUtils
{
public class EmailTool
{
private MailMessage mMailMessage; //主要处理发送邮件的内容(如:收发人地址、标题、主体、图片等等)
private SmtpClient mSmtpClient; //主要处理用smtp方式发送此邮件的配置信息(如:邮件服务器、发送端口号、验证方式等等)
private int mSenderPort; //发送邮件所用的端口号(htmp协议默认为25)
private string mSenderServerHost; //发件箱的邮件服务器地址(IP形式或字符串形式均可)
private string mSenderPassword; //发件箱的密码
private string mSenderUsername; //发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)
private bool mEnableSsl; //是否对邮件内容进行socket层加密传输
private bool mEnablePwdAuthentication; //是否对发件人邮箱进行密码验证
///
/// 构造函数
///
/// 发件人地址
/// 收件人地址(多个电子邮件地址之间必须用逗号字符(“,”)分隔)
/// 邮件标题
/// 邮件内容(可以以html格式进行设计)
/// 发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)
/// 发件人邮箱密码
/// 邮件附件
/// 对邮件内容进行socket层加密传输,false表示不加密
/// 对发件人邮箱进行密码验证,false表示不对发件人邮箱进行密码验证
/// 发送邮件所用的端口号(htmp协议默认为25)
public EmailTool(string fromMail, string toMail, string subject, string emailBody,
string username, string password,
string[] attachments = null, bool sslEnable = false, bool pwdCheckEnable = false, int port = 25)
{
try
{
mMailMessage = new MailMessage();
mMailMessage.To.Add(toMail);
mMailMessage.From = new MailAddress(fromMail);
mMailMessage.Subject = subject;
mMailMessage.Body = emailBody;
mMailMessage.IsBodyHtml = true;
mMailMessage.BodyEncoding = System.Text.Encoding.UTF8;
mMailMessage.Priority = MailPriority.Normal;
mSenderServerHost = GetSmtp(fromMail);
mSenderUsername = username;
mSenderPassword = password;
mSenderPort = port;
mEnableSsl = sslEnable;
mEnablePwdAuthentication = pwdCheckEnable;
AddAttachments(attachments);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
private static string GetSmtp(string fromMail)
{
string result = "";
if (!string.IsNullOrWhiteSpace(fromMail) && fromMail.IndexOf('@') > 0)
{
string ext = fromMail.Substring(fromMail.IndexOf('@') + 1);
switch (ext)
{
case "163.com":
result = "smtp.163.com";
break;
case "gmail.com":
result = "smtp.gmail.com";
break;
case "qq.com":
result = "smtp.qq.com";
break;
case "sina.com":
result = "smtp.sina.com";
break;
}
}
return result;
}
private bool AddAttachments(string[] attachments)
{
try
{
if (attachments != null && attachments.Count() > 0)
{
Attachment data;
ContentDisposition disposition;
foreach (var item in attachments)
{
data = new Attachment(item, MediaTypeNames.Application.Octet);
disposition = data.ContentDisposition;
disposition.CreationDate = File.GetCreationTime(item);
disposition.ModificationDate = File.GetLastWriteTime(item);
disposition.ReadDate = File.GetLastAccessTime(item);
mMailMessage.Attachments.Add(data);
}
}
return true;
}
catch (Exception ex)
{
return false;
}
}
public bool Send()
{
try
{
if (mMailMessage != null)
{
mSmtpClient = new SmtpClient();
//mSmtpClient.Host = "smtp." + mMailMessage.From.Host;
mSmtpClient.Host = mSenderServerHost;
mSmtpClient.Port = mSenderPort;
mSmtpClient.UseDefaultCredentials = false;
mSmtpClient.EnableSsl = mEnableSsl;
if (mEnablePwdAuthentication)
{
System.Net.NetworkCredential nc = new System.Net.NetworkCredential(mSenderUsername, mSenderPassword);
//mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
//NTLM: Secure Password Authentication in Microsoft Outlook Express
mSmtpClient.Credentials = nc.GetCredential(mSmtpClient.Host, mSmtpClient.Port, "NTLM");
}
else
{
mSmtpClient.Credentials = new System.Net.NetworkCredential(mSenderUsername, mSenderPassword);
}
mSmtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
mSmtpClient.Send(mMailMessage);
}
return true;
}
catch (Exception ex)
{
return false;
}
}
///
/// 发送邮件 [hiwaka@163.com]
///
/// 邮件标题
/// 邮件内容(html格式)
/// 目标地址
///
public static bool SendEmail(string title, string report, string address = "yuzhyn@163.com")
{
try
{
EmailTool email = new EmailTool("邮箱地址", address,
title, report,
"用户名", "密码");
if (email.Send())
return true;
}
catch { }
return false;
}
}
}