资源描述
C#发送Email邮件方法总结
通过.Net FrameWork 2.0下提供的“System.Net.Mail”可以轻松的实现,本文列举了3种途径来发送:
1.通过Localhost;
2.通过普通SMTP;
3.通过SSL的SMTP;
下面一个一个来说:
1.通过LocalHost
1public void SendMailLocalhost()
2 ...{
3 System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
4 msg.To.Add("a@");
5 msg.To.Add("b@");
6 /**//*
7 * msg.To.Add("b@");
8 * msg.To.Add("b@");
9 * msg.To.Add("b@");可以发送给多人
10 */
11 msg.CC.Add("c@");
12 /**//*
13 * msg.CC.Add("c@");
14 * msg.CC.Add("c@");可以抄送给多人
15 */
16 msg.From = new MailAddress("a@", "AlphaWu", System.Text.Encoding.UTF8);
17 /**//* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
18 msg.Subject = "这是测试邮件";//邮件标题
19 msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
20 msg.Body = "邮件内容";//邮件内容
21 msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
22 msg.IsBodyHTML = false;//是否是HTML邮件
23 msg.Priority = MailPriority.High;//邮件优先级
24
25 SmtpClient client = new SmtpClient();
26 client.Host = "localhost";
27 object userState = msg;
28 try
29 ...{
30 client.SendAsync(msg, userState);
31 //简单一点儿可以client.Send(msg);
32 MessageBox.Show("发送成功");
33 }
34 catch (System.Net.Mail.SmtpException ex)
35 ...{
36 MessageBox.Show(ex.Message, "发送邮件出错");
37 }
38 }
39
2.通过普通SMTP
1public void SendMailUseZj()
2 ...{
3 System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
4 msg.To.Add("a@");
5 msg.To.Add("b@");
6 /**//*
7 * msg.To.Add("b@");
8 * msg.To.Add("b@");
9 * msg.To.Add("b@");可以发送给多人
10 */
11 msg.CC.Add("c@");
12 /**//*
13 * msg.CC.Add("c@");
14 * msg.CC.Add("c@");可以抄送给多人
15 */
16 msg.From = new MailAddress("a@", "AlphaWu", System.Text.Encoding.UTF8);
17 /**//* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
18 msg.Subject = "这是测试邮件";//邮件标题
19 msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
20 msg.Body = "邮件内容";//邮件内容
21 msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
22 msg.IsBodyHtml = false;//是否是HTML邮件
23 msg.Priority = MailPriority.High;//邮件优先级
24
25 SmtpClient client = new SmtpClient();
26 client.Credentials = new System.Net.NetworkCredential("username@", "userpass");
27 //在注册的邮箱和密码
28 client.Host = "";
29 object userState = msg;
30 try
31 ...{
32 client.SendAsync(msg, userState);
33 //简单一点儿可以client.Send(msg);
34 MessageBox.Show("发送成功");
35 }
36 catch (System.Net.Mail.SmtpException ex)
37 ...{
38 MessageBox.Show(ex.Message, "发送邮件出错");
39 }
40 }
41
上述方法不适用于所有SMTP,经测试可以,而不行
3.通过SSL的SMTP
1public void SendMailUseGmail()
2 ...{
3 System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
4 msg.To.Add("a@");
5 msg.To.Add("b@");
6 /**//*
7 * msg.To.Add("b@");
8 * msg.To.Add("b@");
9 * msg.To.Add("b@");可以发送给多人
10 */
11 msg.CC.Add("c@");
12 /**//*
13 * msg.CC.Add("c@");
14 * msg.CC.Add("c@");可以抄送给多人
15 */
16 msg.From = new MailAddress("a@", "AlphaWu", System.Text.Encoding.UTF8);
17 /**//* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
18 msg.Subject = "这是测试邮件";//邮件标题
19 msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
20 msg.Body = "邮件内容";//邮件内容
21 msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
22 msg.IsBodyHtml = false;//是否是HTML邮件
23 msg.Priority = MailPriority.High;//邮件优先级
24
25 SmtpClient client = new SmtpClient();
26 client.Credentials = new System.Net.NetworkCredential("username@", "password");
27 //上述写你的GMail邮箱和密码
28 client.Port = 587;//Gmail使用的端口
29 client.Host = "";
30 client.EnableSsl = true;//经过ssl加密
31 object userState = msg;
32 try
33 ...{
34 client.SendAsync(msg, userState);
35 //简单一点儿可以client.Send(msg);
36 MessageBox.Show("发送成功");
37 }
38 catch (System.Net.Mail.SmtpException ex)
39 ...{
40 MessageBox.Show(ex.Message, "发送邮件出错");
41 }
42 }
43
通过Gmail来发送邮件,成功率极高,几乎都可以发到,推荐使用
C#发送Email邮件三种方法的总结
通过.Net FrameWork 2.0下提供的“System.Net.Mail”可以轻松的实现,本文列举了3种途径来发送:
1.通过Localhost;
2.通过普通SMTP;
3.通过SSL的SMTP;
下面一个一个来说:
1.通过LocalHost
public void SendMailLocalhost()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add("a@");
msg.To.Add("b@");
/* msg.To.Add("b@");
* msg.To.Add("b@");
* msg.To.Add("b@");可以发送给多人
*/
msg.CC.Add(c@);
/*
* msg.CC.Add("c@");
* msg.CC.Add("c@");可以抄送给多人
*/
msg.From = new MailAddress("a@", "AlphaWu", System.Text.Encoding.UTF8);
/* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
msg.Subject = "这是测试邮件";//邮件标题
msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
msg.Body = "邮件内容";//邮件内容
msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
msg.IsBodyHtml = false;//是否是HTML邮件
msg.Priority = MailPriority.High;//邮件优先级
SmtpClient client = new SmtpClient();
client.Host = "localhost";
object userState = msg;
try
{
client.SendAsync(msg, userState);
//简单一点儿可以client.Send(msg);
MessageBox.Show("发送成功");
}
catch (System.Net.Mail.SmtpException ex)
{
MessageBox.Show(ex.Message, "发送邮件出错");
}
}
2.通过普通SMTP
public void SendMailUseZj()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(a@);
msg.To.Add(b@);
/*
* msg.To.Add("b@");
* msg.To.Add("b@");
* msg.To.Add("b@");可以发送给多人
*/
msg.CC.Add("c@");
/*
* msg.CC.Add("c@");
* msg.CC.Add("c@");可以抄送给多人
*/
msg.From = new MailAddress("a@", "AlphaWu", System.Text.Encoding.UTF8);
/* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
msg.Subject = "这是测试邮件";//邮件标题
msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
msg.Body = "邮件内容";//邮件内容
msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
msg.IsBodyHtml = false;//是否是HTML邮件
msg.Priority = MailPriority.High;//邮件优先级
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential("username@", "userpass");
//在注册的邮箱和密码
client.Host = "";
object userState = msg;
try
{
client.SendAsync(msg, userState);
//简单一点儿可以client.Send(msg);
MessageBox.Show("发送成功");
}
catch (System.Net.Mail.SmtpException ex)
{
MessageBox.Show(ex.Message, "发送邮件出错");
}
}
上述方法不适用于所有SMTP,经测试可以,而不行
3.通过SSL的SMTP
public void SendMailUseGmail()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(a@);
msg.To.Add(b@);
/*
* msg.To.Add("b@");
* msg.To.Add("b@");
* msg.To.Add("b@");可以发送给多人
*/
msg.CC.Add(c@);
/*
* msg.CC.Add("c@");
* msg.CC.Add("c@");可以抄送给多人
*/
msg.From = new MailAddress("a@", "AlphaWu", System.Text.Encoding.UTF8);
/* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
msg.Subject = "这是测试邮件";//邮件标题
msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
msg.Body = "邮件内容";//邮件内容
msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
msg.IsBodyHtml = false;//是否是HTML邮件
msg.Priority = MailPriority.High;//邮件优先级
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential("username@", "password");
//上述写你的GMail邮箱和密码
client.Port = 587;//Gmail使用的端口
client.Host = "";
client.EnableSsl = true;//经过ssl加密
object userState = msg;
try
{
client.SendAsync(msg, userState);
//简单一点儿可以client.Send(msg);
MessageBox.Show("发送成功");
}
catch (System.Net.Mail.SmtpException ex)
{
MessageBox.Show(ex.Message, "发送邮件出错");
}
}
通过Gmail来发送邮件,成功率极高,几乎都可以发到,推荐使用。
c# email 发送|c# email 接收
SMTP
1.添加 using System.Web.Mail;引用
2.Mail 发送:
private System.Web.Mail.MailMessage m_Mail=new MailMessage();
m_Mail.From="admin@";
//m_Mail.To="flashcjy@"
msg.To.Add("flashcjy@");
msg.To.Add("flashcjy@");
m_Mail.Subject="发送Email测试";
m_Mail.BodyFormat=MailFormat.Html;
m_Mail.Body="
SmtpMail.Send(m_Mail);
txtMsg.Text="发送成功";
3.Mail接收
using System;
using System.Net.Sockets;
using System.Net;
using System.Security.Cryptography;
using System.IO;
/////////////////////////////////////////////
// 类名:Pop3 //
// 功能:接收电子邮件 //
/////////////////////////////////////////////
namespace ZTSX.Email
{
/// <summary>
/// Pop3 的摘要说明。
/// </summary>
public class Pop3
{
private string mstrHost = null; //主机名称或IP地址
private int mintPort = 110; //主机的端口号(默认为110)
private TcpClient mtcpClient = null; //客户端
private NetworkStream mnetStream = null; //网络基础数据流
private StreamReader m_stmReader = null; //读取字节流
private string mstrStatMessage = null; //执行STAT命令后得到的消息(从中得到邮件数)
/// <summary>
/// 构造函数
/// </summary>
/// <remarks>一个邮件接收对象</remarks>
public Pop3()
{
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="host">主机名称或IP地址</param>
public Pop3(string host)
{
mstrHost = host;
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="host">主机名称或IP地址</param>
/// <param name="port">主机的端口号</param>
/// <remarks>一个邮件接收对象</remarks>
public Pop3(string host,int port)
{
mstrHost = host;
mintPort = port;
}
#region 属性
/// <summary>
/// 主机名称或IP地址
/// </summary>
/// <remarks>主机名称或IP地址</remarks>
public string HostName
{
get{return mstrHost;}
set{mstrHost = value;}
}
/// <summary>
/// 主机的端口号
/// </summary>
/// <remarks>主机的端口号</remarks>
public int Port
{
get{return mintPort;}
set{mintPort = value;}
}
#endregion
#region 私有方法
/// <summary>
/// 向网络访问的基础数据流中写数据(发送命令码)
/// </summary>
/// <param name="netStream">可以用于网络访问的基础数据流</param>
/// <param name="command">命令行</param>
/// <remarks>向网络访问的基础数据流中写数据(发送命令码)</remarks>
private void WriteToNetStream(ref NetworkStream netStream,String command)
{
string strToSend = command + "\r\n";
byte[] arrayToSend = System.Text.Encoding.ASCII.GetBytes(strToSend.ToCharArray());
netStream.Write(arrayToSend,0,arrayToSend.Length);
}
/// <summary>
/// 检查命令行结果是否正确
/// </summary>
/// <param name="message">命令行的执行结果</param>
/// <param name="check">正确标志</param>
/// <returns>
/// 类型:布尔
/// 内容:true表示没有错误,false为有错误
/// </returns>
/// <remarks>检查命令行结果是否有错误</remarks>
private bool CheckCorrect(string message,string check)
{
if(message.IndexOf(check) == -1)
return false;
else
return true;
}
/// <summary>
/// 邮箱中的未读邮件数
/// </summary>
/// <param name="message">执行完LIST命令后的结果</param>
/// <returns>
/// 类型:整型
/// 内容:邮箱中的未读邮件数
/// </returns>
/// <remarks>邮箱中的未读邮件数</remarks>
private int GetMailNumber(string message)
{
string[] strMessage = message.Split(' ');
return Int32.Parse(strMessage[1]);
}
/// <summary>
/// 得到经过解码后的邮件的内容
/// </summary>
/// <param name="encodingContent">解码前的邮件的内容</param>
/// <returns>
/// 类型:字符串
/// 内容:解码后的邮件的内容
/// </returns>
/// <remarks>得到解码后的邮件的内容</remarks>
private string GetDecodeMailContent(string encodingContent)
{
string strContent = encodingContent.Trim();
string strEncode = null;
int iStart = strContent.IndexOf("Base64");
if(iStart == -1)
throw new Pop3Exception("邮件内容不是Base64编码,请检查");
else
{
strEncode = strContent.Substring(iStart + 6,strContent.Length - iStart - 6);
try
{
return SX.Encode.TransformToString(strEncode);
}
catch(SX.EncodeException exc)
{
throw new Pop3Exception(exc.Message);
}
}
}
#endregion
/// <summary>
/// 与主机建立连接
/// </summary>
/// <returns>
/// 类型:布尔
/// 内容:连接结果(true为连接成功,false为连接失败)
/// </returns>
/// <remarks>与主机建立连接</remarks>
public bool Connect()
{
if(mstrHost == null)
throw new Exception("请提供SMTP主机名称或IP地址!");
if(mintPort == 0)
throw new Exception("请提供SMTP主机的端口号");
try
{
mtcpClient = new TcpClient(mstrHost,mintPort);
mnetStream = mtcpClient.GetStream();
m_stmReader = new StreamReader(mtcpClient.GetStream());
string strMessage = m_stmReader.ReadLine();
if(CheckCorrect(strMessage,"+OK") == true)
return true;
else
return false;
}
catch(SocketException exc)
{
throw new Pop3Exception(exc.ToString());
}
catch(NullReferenceException exc)
{
throw new Pop3Exception(exc.ToString());
}
}
#region Pop3命令
/// <summary>
/// 执行Pop3命令,并检查执行的结果
/// </summary>
/// <param name="command">Pop3命令行</param>
/// <returns>
/// 类型:字符串
/// 内容:Pop3命令的执行结果
/// </returns>
private string ExecuteCommand(string command)
{
string strMessage = null; //执行Pop3命令后返回的消息
try
{
//发送命令
WriteToNetStream(ref mnetStream,command);
//读取多行
if(command.Substring(0,4).Equals("LIST") || command.Substring(0,4).Equals("RETR") || command.Substring(0,4).Equals("UIDL")) //记录STAT后的消息(其中包含邮件数)
{
strMessage = ReadMultiLine();
if(command.Equals("LIST")) //记录LIST后的消息(其中包含邮件数)
mstrStatMessage = strMessage;
}
//读取单行
else
strMessage = m_stmReader.ReadLine();
//判断执行结果是否正确
if(CheckCorrect(strMessage,"+OK"))
return strMessage;
else
return "Error";
}
catch(IOException exc)
{
throw new Pop3Exception(exc.ToString());
}
}
/// <summary>
/// 在Pop3命令中,LIST、RETR和UIDL命令的结果要返回多行,以点号(.)结尾,
/// 所以如果想得到正确的结果,必须读取多行
/// </summary>
/// <returns>
/// 类型:字符串
/// 内容:执行Pop3命令后的结果
/// </returns>
private string ReadMultiLine()
{
string strMessage = m_stmReader.ReadLine();
string strTemp = null;
while(strMessage != ".")
{
strTemp = strTemp + strMessage;
strMessage = m_stmReader.ReadLine();
}
return strTemp;
}
//USER命令
private string USER(string user)
{
return ExecuteCommand("USER " + user) + "\r\n";
}
//PASS命令
private string PASS(string password)
{
return ExecuteCommand("PASS " + password) + "\r\n";
}
//LIST命令
private string LIST()
{
return ExecuteCommand("LIST") + "\r\n";
}
//UIDL命令
private string UIDL()
{
return ExecuteCommand("UIDL") + "\r\n";
}
//NOOP命令
private string NOOP()
{
return ExecuteCommand("NOOP") + "\r\n";
}
//STAT命令
private string STAT()
{
return ExecuteCommand("STAT") + "\r\n";
}
//RETR命令
private string RETR(int number)
展开阅读全文