单发邮箱 群发邮箱 程序 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;
}
}
}
单发邮箱 群发邮箱 程序 Email winform的更多相关文章
- Node.js 把抓取到的电影节目列表单发或者群发到QQ邮箱
代码地址如下:http://www.demodashi.com/demo/12381.html 一.前言 上一节我们演示了如何用Node的各种包去抓取电影天堂最新电影列表,接下来我们会讲解如何发送我们 ...
- C#邮件发送(最坑爹的邮箱-QQ邮箱)
最近工作挺清闲的,有空的时候陪妹子出去玩玩,自己看看小说,看看电影,日子过的挺欢乐的,这个星期幡然悔悟,代码才是我的最爱,做点小东西,就写个邮件发送程序.说的邮件发送相信工作过基本上都会用到过,用户注 ...
- C#邮件发送(最坑爹的邮箱-QQ邮箱)---转发(SmallFlyElephant)
C#邮件发送(最坑爹的邮箱-QQ邮箱) 最近工作挺清闲的,有空的时候陪妹子出去玩玩,自己看看小说,看看电影,日子过的挺欢乐的,这个星期幡然悔悟,代码才是我的最爱,做点小东西,就写个邮件发送程序.说的邮 ...
- 黑马程序员+Winform基础(上)
黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...
- 十、.NET使用本地Outlook邮箱指定邮箱用户名和密码发送邮件
十..NET使用本地Outlook邮箱指定邮箱用户名和密码发送邮件 1.添加Microsoft.Office.Interop.Outlook引用 2.封装发送邮件方法 using System; us ...
- 模拟邮箱输入邮箱地址、收藏标签。input框输入内容后回车,内容显示成小方块并带删除按钮。
模拟邮箱输入邮箱地址.收藏标签: 文本框输入文字后按回车键或者分号键,输入框中的文字变成小块并带删除按钮和操作. 页面代码: <!DOCTYPE html> <%@ page lan ...
- .Net 桌面程序(winform,wpf,跨平台avalonia)打安装包部署到windows 入门
.Net 桌面程序(winform,wpf,跨平台avalonia)部署到windows 入门 本文以为avalonia为例,用Setup Factory 将.Net桌面程序(winform,wpf, ...
- C#-Excel导入工资条群发邮箱
第一次写随笔,一名在实习的程序猿,做的一个小应用,需要的朋友可以参考参考, 使用WinForm实现了一个导入Excel,群发工资条的功能.功能已经实现,还不够完善,. 大致运用了OleDbConnec ...
- Delphi中,indy控件实现收发邮件的几点学习记录( 可以考虑加入多线程,用多个邮箱做一个邮箱群发器) 转
关于用Delphi中的Indy控件实现收发邮件的几点学习记录 这几天心里颇不宁静,不是因为项目延期,而是因为自己几个月前做的邮件发送程序至今无任何进展,虽然一向谦虚的人在网上发 ...
随机推荐
- 自己开发轻量级ORM(一)
在开发ORM之前,先简单的介绍下ORM的基本概念. 对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的 ...
- 移动端开发(一. Viewport(视窗))
手机与浏览器 移动端开发主要针对手机,ipad等移动设备,随着地铁里的低头族越来越多,移动端开发在前端的开发任务中站的比重也越来越大.各种品牌及尺寸的手机也不尽相同.尺寸不同就算了分辨率,视网膜屏 ...
- jvm的内存空间分区
在方法(代码块)中定义一个变量时,java就在栈中为这个变量分配JVM内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的JVM内存空间:而在堆中分配的JVM内存由java虚拟机的自动 ...
- 数组&&函数数组
数组:一次性定义多个同类型的变量,数组在 内存中存储空间必须是连续的(查询比较快)定义数组: int a[]; int[] a;分配空间: a=new int[5]; 自动为数组元素赋以默认值 a[0 ...
- ZooKeeper配额
ZooKeeper可以在znode上设置配额限制.如果超出了配置限制,ZooKeeper将会在log日志中打印WARN日志.如果超出配额限制,并不会停止行为操作. ZooKeeper的配额是存储在/z ...
- JS中都有哪些数据类型呢?
js中有5种数据类型:Undefined.Null.Boolean.Number和String.还有一种复杂的数据类型Object,Object本质是一组无序的名值对组成的.
- shell基础学习系列(一)
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行. 输入一些代码: #!/bin/bash echo "Hello World !" &qu ...
- Myeclipse 搭建Java Web 项目 《一》
今天将图文并茂的介绍如何使用myclipse 创建Java Web 项目;我使用的是myclipse 8.6 来进行创建: 1.打开Myeclipse,点击File --->然后New ---- ...
- Angular.js之Router学习笔记
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Ionic2中集成第三方控件Sweetalert
Ionic2混合开发,入坑系列:Ionic2中集成第三方控件Sweetalert 注:Sweetalert2已经可以直接从npm中下载安装 npm install --save sweetalert2 ...