C# WinForm下实现的发送邮件 案例下载 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; namespace SendMail { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < 20; i++) { string [] recs = rec.Text.Split(';'); bool isyes = SendMail(server.Text, 25, this.txt_account.Text, recs, this.subject.Text, this.content.Text, true, this.txt_pwd.Text); } //if (isyes) //{ // MessageBox.Show("邮件发送成功"); //} } NetworkStream ns; /// <summary> /// /// </summary> /// <param name="smtpServer">smtp服务器</param> /// <param name="point">发送端口</param> /// <param name="_from">发件人</param> /// <param name="_tos">收件人</param> /// <param name="_subject">主题</param> /// <param name="_content">内容</param> /// <param name="isESMTP">是否需要身份验证</param> /// <param name="userPWD">发件人密码</param> /// <returns></returns> public bool SendMail(string smtpServer, int point, string _from, string[] _tos, string _subject, string _content, bool isESMTP, string userPWD) { try { TcpClient smtpClient = new TcpClient(); IPAddress ip = Dns.GetHostAddresses(smtpServer)[0]; smtpClient.Connect(ip, point);//连接服务器 ns = smtpClient.GetStream(); if (SMTPReceive() != 220) return false; Send("HELO/r/n"); if (SMTPReceive() != 250) return false; //身份验证 if (isESMTP) { Send("AUTH LOGIN/r/n"); if (SMTPReceive() != 334) return false; string uname=_from.Substring(0,_from.IndexOf('@')); Send(ConvertToBase64(uname) + "/r/n"); if (SMTPReceive() != 334) return false; Send(ConvertToBase64(userPWD) + "/r/n"); if (SMTPReceive() != 235) return false; } Send("Mail From:<" + _from + ">/r/n");//发件人 if (SMTPReceive() != 250) return false; if (_tos.Length < 0) return false; foreach (string to in _tos) { Send("RCPT TO:<" + to + ">/r/n"); if (SMTPReceive() != 250) return false; } Send("DATA /r/n"); if (SMTPReceive() != 354) return false; StringBuilder content = new StringBuilder(); content.Append("From:" + _from + "/r/n"); if (_tos.Length <= 0) return false; foreach (string to in _tos) { content.AppendFormat("To:{0}/r/n", to); } //邮件标题 content.AppendFormat("Subject:{0}/r/n", _subject); //邮件编码格式 content.AppendFormat("Charset=/"{0}/"/r/n", "gb2312"); content.Append("/r/n"); content.Append(_content);//追加发送的内容 content.Append("/r/n./r/n"); Send(content.ToString()); if (SMTPReceive() != 250) return false; else return true; } catch (Exception exc) { return false; } } /// <summary> /// 将string型转换为Base64 /// </summary> /// <param name="str"></param> /// <returns></returns> string ConvertToBase64(string str) { byte[] data = Encoding.UTF8.GetBytes(str); return Convert.ToBase64String(data); } /// <summary> /// 发送消息至服务器 /// </summary> /// <param name="msg"></param> public void Send(string msg) { byte[] data = Encoding.UTF8.GetBytes(msg); ns.Write(data, 0, data.Length); ns.Flush(); } public int SMTPReceive() { try { byte[] data = new byte[1024]; int size = ns.Read(data, 0, 1024); string result = Encoding.UTF8.GetString(data, 0, size); int index = result.IndexOf(' '); if (index == -1) index = result.Length; result = result.Substring(0, index); return int.Parse(result); } catch { return 0; } } } }