单发邮箱 群发邮箱 程序 Email winform
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Mail;
using System.Net.Mime;
using System.Net;
using System.IO;
using System.Data.OleDb;
namespace SendEmail1._0
{
public partial class mail : Form
{
public mail()
{
InitializeComponent();
}
List<string> listEmail = new List<string>();
/// <summary>
/// 窗体加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Mail_Load(object sender, EventArgs e)
{
//添加俩个smpt服务器的名称
cmbBoxSMTP.Items.Add("smtp.163.com");
cmbBoxSMTP.Items.Add("SMTP.QQ.COM");
cmbBoxSMTP.Items.Add("smtp.gmail.com");
//设置为下拉列表
cmbBoxSMTP.DropDownStyle = ComboBoxStyle.DropDownList;
//默认选中第一个选项
cmbBoxSMTP.SelectedIndex = 1;
//在下面添加你想要初始化的内容,比如显示姓名、用户名等
}
private void btn_send_Click(object sender, EventArgs e)
{
try
{
MessageBox.Show(sendEmail(txtEmail.Text));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private string sendEmail(string ToEmail)
{
try
{
//确定smtp服务器地址。实例化一个Smtp客户端
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(cmbBoxSMTP.Text);
//生成一个发送地址
string strFrom = string.Empty;
if (cmbBoxSMTP.SelectedIndex == 0)
{
strFrom = txtUserName.Text + "@163.com";
}
else if (cmbBoxSMTP.SelectedIndex == 1)
{
strFrom = txtUserName.Text + "@QQ.com";
}
else
{
strFrom = txtUserName.Text + "@gmail.com";
}
//构造一个发件人地址对象
MailAddress from = new MailAddress(strFrom, txtDisplayName.Text, Encoding.UTF8);
//构造一个收件人地址对象
MailAddress to = new MailAddress(txtEmail.Text, txtToName.Text, Encoding.UTF8);
//构造一个Email的Message对象
MailMessage message = new MailMessage();
message.To.Add(ToEmail);
//message.To.Add("344283361@qq.com");
message.From = from;
//为 message 添加附件
foreach (TreeNode treeNode in treeViewFileList.Nodes)
{
//得到文件名
string fileName = treeNode.Text;
//判断文件是否存在
if (File.Exists(fileName))
{
//构造一个附件对象
Attachment attach = new Attachment(fileName);
//得到文件的信息
ContentDisposition disposition = attach.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(fileName);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
disposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
//向邮件添加附件
message.Attachments.Add(attach);
}
else
{
MessageBox.Show("文件" + fileName + "未找到!");
}
}
//添加邮件主题和内容
message.Subject = txtSubject.Text;
message.SubjectEncoding = Encoding.UTF8;
message.Body = rtxtBody.Text;
message.BodyEncoding = Encoding.UTF8;
//设置邮件的信息
client.DeliveryMethod = SmtpDeliveryMethod.Network;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.IsBodyHtml = false;
//如果服务器支持安全连接,则将安全连接设为true。
//gmail支持,163不支持,如果是gmail则一定要将其设为true
if (cmbBoxSMTP.SelectedText == "smpt.163.com")
client.EnableSsl = false;
else
client.EnableSsl = true;
//设置用户名和密码。
//string userState = message.Subject;
client.UseDefaultCredentials = false;
string username = txtUserName.Text;
string passwd = txtPassword.Text;
//用户登陆信息
NetworkCredential myCredentials = new NetworkCredential(username, passwd);
client.Credentials = myCredentials;
//发送邮件
client.Send(message);
//提示发送成功
return "成功:" + ToEmail;
// MessageBox.Show("发送成功!");
}
catch (Exception ex)
{
return "失败:" + ToEmail + ";原因:" + ex.Message;
//MessageBox.Show(ex.Message);
}
}
private void btnAdd_Click(object sender, EventArgs e)
{ //定义并初始化一个OpenFileDialog类的对象
OpenFileDialog openFile = new OpenFileDialog();
openFile.InitialDirectory = Application.StartupPath;
openFile.FileName = "";
openFile.RestoreDirectory = true;
openFile.Multiselect = false;
//显示打开文件对话框,并判断是否单击了确定按钮
if (openFile.ShowDialog() == DialogResult.OK)
{
//得到选择的文件名
string fileName = openFile.FileName;
//将文件名添加到TreeView中
treeViewFileList.Nodes.Add(fileName);
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
//判断是否选中了节点
if (treeViewFileList.SelectedNode != null)
{
//得到选择的节点
TreeNode tempNode = treeViewFileList.SelectedNode;
//删除选中的节点
treeViewFileList.Nodes.Remove(tempNode);
}
else
{
MessageBox.Show("请选择要删除的附件。");
}
}
/// <summary>
/// 群发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnsends_Click(object sender, EventArgs e)
{
List<string> list = new List<string>();
int sendnum = 0;
string s = txtToEmails.Text;
string[] sArray = s.Split(new char[] { '\r', '\n' });
for (int i = 0; i < sArray.Length; i++)
{
// sArray[i] 即为每一行内容
if (!string.IsNullOrEmpty(sArray[i]))
{
list.Add(sArray[i]);
}
}
foreach (var item in list)
{
string str = sendEmail(item);
if (str.Split(':')[0].Equals("成功"))
{
sendnum += 1;
txtlog.Text += str + System.Environment.NewLine;
}
else
{
txtlog.Text += str + System.Environment.NewLine;
}
}
MessageBox.Show("成功发送" + sendnum + "条邮件");
}
/// <summary>
/// 上传联系人
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnUpToEmail_Click(object sender, EventArgs e)
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.InitialDirectory = Application.StartupPath;
openFile.FileName = "";
openFile.RestoreDirectory = true;
openFile.Multiselect = false;
//显示打开文件对话框,并判断是否单击了确定按钮
if (openFile.ShowDialog() == DialogResult.OK)
{
//得到选择的文件名
string fileName = openFile.FileName;
//将文件名添加到TreeView中
// txtToEmails.Text=fileName;
DataSet ds = ExcelToDS(fileName);
foreach (DataRow cRow in ds.Tables[0].Rows)
{
txtToEmails.Text += cRow["Email"].ToString() + System.Environment.NewLine;
}
}
}
/// <summary>
/// 读取Excel
/// </summary>
/// <param name="Path"></param>
/// <returns></returns>
public DataSet ExcelToDS(string Path)
{
//此连接只能操作Excel2007之前(.xls)文件
// string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
//此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)
//备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数据,"HDR=No;"正好与前面的相反。
// "IMEX=1 "如果列中的数据类型不一致,使用"IMEX=1"可必免数据类型冲突。
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + Path + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel = "select * from [sheet1$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet(); myCommand.Fill(ds, "table1");
return ds;
}
}
}