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;
}
}
}
}
C#,WinForm发送邮件
最新推荐文章于 2020-05-18 16:51:37 发布