单发邮箱 群发邮箱 程序 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控件实现收发邮件的几点学习记录 这几天心里颇不宁静,不是因为项目延期,而是因为自己几个月前做的邮件发送程序至今无任何进展,虽然一向谦虚的人在网上发 ...
随机推荐
- 蓝桥网试题 java 入门训练 圆的面积
---------------------------------------------------------------------------------------------------- ...
- webpack入门+react环境配置
小结放在前:这篇文章主要是为下一篇的react提前铺好路,webpack是一个前端资源模块化管理和打包工具,说白了就是方便我们管理自己的常用的一些代码,比如你开发中用到sass以及jade同时用到es ...
- Activity启动过程分析
Android的四大组件中除了BroadCastReceiver以外,其他三种组件都必须在AndroidManifest中注册,对于BroadCastReceiver来说,它既可以在AndroidMa ...
- 蓝牙门禁Android客户端
先来了解下Android传统蓝牙连接的大致简单的流程: 其中涉及到几个类依次来介绍,废话不多说,下面是从Android4.4开发指南蓝牙所用到的类的截图: 第一个类BluetoothAdapter: ...
- Codeforces 768B Code For 1
B. Code For 1 time limit per test:2 seconds memory limit per test:256 megabytes input:standard input ...
- ubuntu16.04下安装配置深度学习环境(一、cuda7.5的安装)
1.下载所需要的软件 cuda7.5下载(点击下载链接),cudnn4.0下载 2.安装NVIDIA驱动. 一般有两种方法:1)一种方法是利用"软件和更新"来安装,依次选择 系统设 ...
- spring中对象的注入方式
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...
- 【转】Java 并发:Executors 和线程池
原文地址: http://baptiste-wicht.com/posts/2010/09/java-concurrency-part-7-executors-and-thread-pools.htm ...
- js中窗口大小和单个元素大小的计算
1. 窗口的大小即浏览器的大小: window.innerWidth, window.innerHeight, window.outerHeight, window.outerWidth 在IE9+, ...
- JavaWeb之DBUtils
一.什么是DBUtils及作用 DBUtils是apache公司写的.DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可以 ...