using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Configuration;
using System.Net;
using System.Reflection;
using System.Text;
namespace SendMailMessage.Uitls
{
public class EMail
{
// 实例化一个邮件类
MailMessage _mailMessage = new MailMessage();
/// <summary>
/// 发件使用的邮箱地址
/// </summary>
private string _fromEmail = ConfigurationManager.AppSettings["EmailSender"].ToString();
/// <summary>
/// 发件邮箱地址密码
/// </summary>
private string _senderPassword = ConfigurationManager.AppSettings["EmailServer_Pwd"].ToString();
/// <summary>
/// 显示在邮件上的发件人名称
/// </summary>
private string _displayName = ConfigurationManager.AppSettings["EmailSenderName"].ToString();
/// <summary>
/// 发件邮箱使用的服务器
/// </summary>
private string _smtp = ConfigurationManager.AppSettings["EmailServer"].ToString();
/// <summary>
/// 邮件的接收者
/// </summary>
private string ToEmail { set; get; }
/// <summary>
/// 抄送
/// </summary>
private string CC { set; get; }
/// <summary>
/// 密送
/// </summary>
private string Bcc { set; get; }
/// <summary>
/// 邮件标题
/// </summary>
private string Subject { set; get; }
/// <summary>
/// 邮件正文
/// </summary>
private string Body { set; get; }
/// <summary>
/// 附件
/// </summary>
private string Attachments { set; get; }
public EMail(string toEmail, string subject, string body)
{
ToEmail = toEmail;
Subject = subject;
Body = body;
}
public EMail(string toEmail, string cc, string bcc, string subject, string body, string attachments)
{
CC = cc;
Bcc = bcc;
ToEmail = toEmail;
Subject = subject;
Body = body;
Attachments = attachments;
}
/// <summary>
/// 发送email
/// </summary>
/// <param name="toEmail">邮件的接收者,支持群发,多个地址之间用半角逗号分开</param>
/// <param name="subject">主题</param>
/// <param name="body">正文</param>
public static bool SendEmail(string toEmail, string subject, string body)
{
EMail email = new EMail(toEmail, subject, body);
return email.Send();
}
/// <summary>
/// 发送email
/// </summary>
/// <param name="toEmail">邮件的接收者,支持群发,多个地址之间用半角逗号分开</param>
/// <param name="cc">抄送,多个地址之间用半角逗号分开</param>
/// <param name="bcc">密送,多个地址之间用半角逗号分开</param>
/// <param name="subject">主题</param>
/// <param name="body">正文</param>
/// <param name="attachments">附件地址</param>
public static bool SendEmail(string toEmail, string cc, string bcc, string subject, string body, string attachments)
{
EMail email = new EMail(toEmail, cc, bcc, subject, body, attachments);
return email.Send();
}
/// <summary>
/// 邮件发送
/// </summary>
public bool Send()
{
Type type = typeof(SmtpClient);
SmtpClient _smtpClient = new SmtpClient();
bool result = false;
try
{
// 将smtp的出站方式设为Network
_smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
// smtp服务器是否启用SSL加密
_smtpClient.EnableSsl = false;
// 指定smtp服务器地址
_smtpClient.Host = _smtp;
// 指定smtp服务器的端口,默认是25,如果采用默认端口,可省去
//smtp.Port = 25;
// 如果你的SMTP服务器不需要身份认证,则使用下面的方式,不过,目前基本没有不需要认证的了
//smtp.UseDefaultCredentials = true;
// 如果需要认证,则用下面的方式
_smtpClient.Credentials = new NetworkCredential(_fromEmail, _senderPassword);
// 邮件的优先级,分为Low、Normal、 High,通常用Normal即可
_mailMessage.Priority = MailPriority.High;
// 收件方看到的邮件来源;第一个参数是发信人邮件地址,第二参数是发信人显示的名称,第三个参数是第二个参数所使用的编码,如果指定不正确,则对方收到后显示乱码,936是简体中文的codepage值
_mailMessage.From = new MailAddress(_fromEmail, _displayName, Encoding.GetEncoding(936));
// ReplyTo 表示对方回复邮件时默认的接收地址,即:你用一个邮箱发信,但却用另一个来收信,后两个参数的意义,同From
_mailMessage.ReplyTo = new MailAddress(_fromEmail, _displayName, Encoding.GetEncoding(936));
// 邮件的接收者,支持群发,多个地址之间用半角逗号分开
_mailMessage.To.Add(ToEmail);
// 抄送
if (!string.IsNullOrEmpty(CC))
{
_mailMessage.CC.Add(CC);
}
// 密送
if (!string.IsNullOrEmpty(Bcc))
{
_mailMessage.Bcc.Add(Bcc);
}
// 邮件标题
_mailMessage.Subject = Subject;
// 这里非常重要,如果你的邮件标题包含中文,这里一定要指定,否则对方收到的极有可能是乱码
_mailMessage.SubjectEncoding = Encoding.GetEncoding(936);
// 邮件正文是否是HTML格式
_mailMessage.IsBodyHtml = true;
// 邮件正文的编码,设置不正确,接收者会收到乱码
_mailMessage.BodyEncoding = Encoding.GetEncoding(936);
// 邮件正文
_mailMessage.Body = Body;
// 附件
if (!string.IsNullOrEmpty(Attachments))
{
string[] attachmentsArray = Attachments.Split(',');
for (int i = 0; i < attachmentsArray.Length; i++)
{
_mailMessage.Attachments.Add(new Attachment(attachmentsArray[i]));
}
}
// 发送邮件
_smtpClient.Send(_mailMessage);
result = true;
}
catch (Exception ex)
{
result = false;
}
return result;
}
}
}