您的位置:首页 > 编程语言 > PHP开发

在.net中支持ESMTP身份验证的邮件发送简单讲解

2012-06-21 09:02 453 查看
下面是一个简单的示例:(没有做任何判断与封装,仅供参考)

代码

string smtp = "mail.com";

string from = "send@mail.com";

string pwd = "pwd";

string to = "rec@mail.com";

//建立链接

TcpClient tc = new TcpClient(smtp,25);

byte[] b = new byte[1024];

tc.GetStream().Read(b,0,b.Length);

Response.Write(Encoding.UTF8.GetString(b)+"<br/>");

//标识身份

WriteMsg(tc.GetStream(), "HELO xxxx\r\n");

Response.Write(ReadMsg(tc.GetStream()) + "<br/>");

//身份验证开始

WriteMsg(tc.GetStream(), "AUTH LOGIN\r\n");

Response.Write(ReadMsg(tc.GetStream()) + "<br/>");

//帐号 base64编码

byte[] bTxt=new byte[1024];

bTxt=Encoding.UTF8.GetBytes(from);

WriteMsg(tc.GetStream(), Convert.ToBase64String(bTxt)+"\r\n");

Response.Write(ReadMsg(tc.GetStream()) + "<br/>");

//密码base64编码

bTxt=Encoding.UTF8.GetBytes(pwd);

WriteMsg(tc.GetStream(), Convert.ToBase64String(bTxt) + "\r\n");

Response.Write(ReadMsg(tc.GetStream()) + "<br/>");

//身份验证结束

//发送邮件地址

WriteMsg(tc.GetStream(), string.Format("MAIL FROM:{0}\r\n", from));

Response.Write(ReadMsg(tc.GetStream()) + "<br/>");

//接受邮件地址,可以有多个RCPT TO

WriteMsg(tc.GetStream(), string.Format("RCPT TO:{0}\r\n", to));

Response.Write(ReadMsg(tc.GetStream()) + "<br/>");

//初如化

WriteMsg(tc.GetStream(), "DATA \r\n");

Response.Write(ReadMsg(tc.GetStream()) + "<br/>");

//邮件内容

StringBuilder sb = new StringBuilder();

sb.AppendFormat("From:{0}\r\n", from);//发信人

sb.AppendFormat("To:{0}\r\n", to);//收信人,可以有多个,用分号隔开, 这两行可以与上面的MAIL FROM和RCPT TO不同(显示在邮件内容里的)

sb.AppendFormat("Date:{0}\r\n",DateTime.Now.ToString());//时间

sb.AppendFormat("Subject:{0}\r\n", "测试");//主题

sb.Append("\r\n");

sb.Append("内容"); //正文

sb.Append("\r\n.\r\n");

WriteMsg(tc.GetStream(), sb.ToString());

Response.Write(ReadMsg(tc.GetStream()) + "<br/>");

//结束会话

WriteMsg(tc.GetStream(), "QUIT");

//关闭链接

tc.Close();

如果运行正常,上面的返回状态依次为:

220 mail.com ESMTP CMailServer 5.4.6 SMTP Service Ready

250 welcome here

334 VXNlcm5hbWU6

334 UGFzc3dvcmQ6

235 OK

250 OK

250 OK

354 send the mail data, end with .

250 OK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: