Java自学的网站(Java全栈工程师 | 以实例驱动学习 | how2j.cn)
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Runtime.Remoting.Contexts;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace 发邮件
{
class Program
{
static void Main(string[] args)
{
///<summary>
///读取到excel中的邮箱
///</summary>
SmtpClient client = new SmtpClient();//生成SmtpClient实例,用它发送电子邮件
client.UseDefaultCredentials = true;
client.Host = "smtp.163.com";//指定SMTP服务器主机
client.Port = 25;//指定要使用的端口,这个是默认的端口
string username = "发件人邮箱";
string pwd = "发件人邮箱密码";
System.Net.NetworkCredential nc = new System.Net.NetworkCredential(username, pwd);//发件人邮箱的用户和密码.中的密码更改为授权码号
client.Credentials = nc.GetCredential(client.Host, client.Port, "NTLM");
MailMessage message = new MailMessage();
MailAddress from = new MailAddress("发件人邮箱");//获取输入的发件人的邮箱地址
message.From = from;//设置邮件发件人
IWorkbook workbook = null;//新建IWorkbook对象
string fileName = @"你的Excel表格";
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
if (fileName.IndexOf(".xlsx") > 0)
{
workbook = new XSSFWorkbook(fileStream);
}
ISheet sheet = workbook.GetSheetAt(0);//获取第一个工作表
IRow row;//新建当前工作表行数据
string cellValue = "";
StreamWriter sw = null;
StreamWriter sw1 = null;
MailAddress to = null;
Attachment attach = new Attachment(@"添加你的附件路径");//获取选择的附件
Attachment attach1 = new Attachment(@"添加你的附件路径");
message.Attachments.Add(attach);//将附件添加到邮件中,MailMessage类的Attachments属性可以Add多个附件
message.Attachments.Add(attach1);
for (int i = 1; i <= sheet.LastRowNum; i++)
{
row = sheet.GetRow(i);//row读取第i行数据
if (row != null)
{
for (int j = 0; j < row.LastCellNum; j++) //对工作表每一列
{
cellValue = row.GetCell(0).ToString(); //获取i行0列数据
message.Subject = "发送邮件的主题";//获取输入的邮件标题
message.Body = "发送邮件的内容";
message.IsBodyHtml = true;//设置为HTML格式
to = new MailAddress(cellValue);
}
}
//随机设置休眠时间
Random random = new Random();
int time = random.Next(120, 180) * 1000;
Thread.Sleep(time);
string shijian = "当前已经休眠"+(time / 1000) + "秒钟";//休眠时间尽量2分钟以上,企业邮箱可以发送1000份邮件,免费企业邮箱可以发送500份邮箱。
string shoujianren = "邮箱:" + cellValue + "已发送";
string shoujianrenRow = "当前行数----第" + i + "行";
try {
client.Send(message);
Console.WriteLine(shijian);
Console.WriteLine(shoujianren);
message.To.Clear();//清空收件人集合
message.To.Add(to);//收件人集合
//记录收件人信息文本
sw = new StreamWriter("D:\\发邮件\\发送收件人的详细信息(休眠时间、是否发送、读取excel当前行数、系统当前时间格式)", true);
System.DateTime currentTime = new System.DateTime();//获取系统时间及时间格式
currentTime = System.DateTime.Now;
sw.WriteLine(shijian);
sw.WriteLine(currentTime);
sw.WriteLine(shoujianren);
sw.WriteLine(shoujianrenRow);
sw.Flush();
//只记录收件人邮箱
sw1 = new StreamWriter("D:\\发邮件\\收件人的邮箱.txt", true);//收件人邮箱
sw1.WriteLine(cellValue);
sw1.Flush();
}
catch(Exception ex)
{
StreamWriter sw2 = null;
sw2 = new StreamWriter("D:\\发邮件\\错误的收件人的邮箱.txt", true);//错误的收件人邮箱
sw2.WriteLine(cellValue);//开始写入
sw2.Flush();//清空缓冲区
sw2.Close();
}
sw1.Close();
sw.Close();//关闭流
}
Console.ReadLine();
fileStream.Close();//关闭流
workbook.Close();//关闭流
}
}
}