邮件群发工具(C#版)
引言
经常会参与组织一些社区活动,涉及到和不同的人进行交流,微信当然是必须的,同样邮件也是一种不可或缺的方式。
一般群发的邮件不是很友好,如果是一对一的,收到邮件的人是不是会比较重视,而且还有他的名字在里面。
所以抽点时间写了一个工具,使用C#做个发邮件的工具非常简单。
完整代码
class Program
{
private static string baseDir = "";
private static string email = "";
static void Main(string[] args)
{
Console.WriteLine("--- 开始执行 --- ");
baseDir = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
email = ConfigurationManager.AppSettings["email"];
var date = DateTime.Now.ToString("yyyy-MM-dd");
FileStream fs = new FileStream($"{baseDir}\\[Log]{date}.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("===== 发送日志 =====");
List<Contact> contacts = GetContacts();
var smtpClient = GetSmtpClient();
foreach (var contact in contacts)
{
SendMail(smtpClient, contact, sw);
}
sw.WriteLine("===== 执行完成 =====");
sw.Flush();
sw.Close();
fs.Close();
Console.WriteLine("--- 执行完成 --- ");
Console.ReadLine();
}
private static SmtpClient GetSmtpClient()
{
string server = ConfigurationManager.AppSettings["server"];
string port = ConfigurationManager.AppSettings["port"];
string password = ConfigurationManager.AppSettings["password"];
SmtpClient smtpClient = new SmtpClient();
smtpClient.Host = server;
smtpClient.Port = Convert.ToInt32(port);
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.EnableSsl = true;
smtpClient.Credentials = new NetworkCredential(email, password);
return smtpClient;
}
private static void SendMail(SmtpClient smtpClient, Contact contact, StreamWriter sw)
{
try
{
var mailMessage = GetMailMessage(contact);
smtpClient.Send(mailMessage);
Console.WriteLine($" --- 发送成功, Email = {contact.Email} --- ");
sw.WriteLine($" --- 发送成功, Email = {contact.Email} --- ");
}
catch (Exception ex)
{
Console.WriteLine($" === 发送失败, Email = {contact.Email} === ");
sw.WriteLine($" === 发送失败, Email = {contact.Email} === ");
}
}
private static MailMessage GetMailMessage(Contact contact)
{
string subject = ConfigurationManager.AppSettings["subject"];
string introduce = ConfigurationManager.AppSettings["introduce"];
string link = ConfigurationManager.AppSettings["link"];
string content = "<p style=\"font - size:16px\">Dear " + contact.Name + " , </p> " +
"<p style=\"font - size:16px\">" + introduce + "</p>"+
"<p style=\"font - size:16px\">报名链接:<a target=\"_blank\" href=\"" + link + "\">"+ link + "</a></p>"
+ GetContent();
MailMessage mailMessage = new MailMessage(email, contact.Email);
mailMessage.Subject = subject;
mailMessage.Body = content;
mailMessage.BodyEncoding = Encoding.UTF8;
mailMessage.IsBodyHtml = true;
mailMessage.Priority = MailPriority.Normal;
return mailMessage;
}
private static string GetContent()
{
var dir = baseDir + "\\content.txt";
StreamReader sr = new StreamReader(dir, Encoding.UTF8);
string content = sr.ReadToEnd();
sr.Close();
return content;
}
private static List<Contact> GetContacts()
{
List<Contact> contacts = new List<Contact>();
var dir = baseDir + "\\contacts.txt";
StreamReader sr = new StreamReader(dir, Encoding.UTF8);
string line;
while ((line = sr.ReadLine()) != null)
{
line = line.Replace(",", ",");
var contact = line.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries);
if (contact.Length == 2 && !string.IsNullOrEmpty(contact[0]) && !string.IsNullOrEmpty(contact[1]))
{
contacts.Add(new Contact() {Name = contact[0], Email = contact[1]});
}
}
sr.Close();
return contacts;
}
public class Contact
{
public string Name { get; set; }
public string Email { get; set; }
}
}
app.config
<appSettings>
<add key="server" value="smtp.live.com" />
<add key="port" value="25" />
<add key="email" value="***@hotmail.com" />
<add key="password" value="" />
<add key="subject" value="敏捷个人北京2016年6月活动:玩转生涯狂想曲" />
<add key="introduce" value="欢迎参加敏捷个人北京2016年6月活动:玩转生涯狂想曲活动!" />
<add key="link" value="http://www.hdb.com/party/qz1eu?h_share_uid=f0bv" />
</appSettings>
注意
1)读取app.config的配置信息
2)读取程序根目录下的联系人文件:contacts.txt
--------------------------------
测试1,***@gmail.com
测试2,***@qq.com
测试3,***@163.com
--------------------------------
3)读取程序根目录下的内容文件,包含Html代码:content.txt
发送结果截图
1)控制台输出日志

2)收到邮件内容,dear **

代码下载
邮件群发工具(C#版)的更多相关文章
- 通什翡翠商城大站协议邮件群发系统日发20-30万封不打码不换ip不需发件箱100%进收件箱
用一种新的技术思维去群发邮件一种不用换IP,不需要任何发件箱的邮件群发方式一种不需要验证码,不需要**代码变量的邮件群发方式即使需要验证码也能全自动识别验证码的超级智能软件教你最核心的邮件群发思维和软 ...
- 懒人邮件群发日发50-100万封不打码不换IP不需发件箱大站协议系统营销软件100%进收件箱
用一种新的技术思维去群发邮件 一种不用换IP,不需要任何发件箱的邮件群发方式 一种不需要验证码,不需要**代码变量的邮件群发方式 即使需要验证码也能全自动识别验证码的超级智能软件 教你最核心的邮件群发 ...
- 各大免费邮箱邮件群发账户SMTP服务器配置及SMTP发送量限制情况
网络产品推广和新闻消息推送时,经常用到的工具就是用客户邮箱发送邮件了,如果是要发送的邮件量非常大的话,一般的建议是搭建自己的邮局服务器,或者是花钱购买专业的邮件群发服务,免费邮箱的SMTP适合少量的邮 ...
- Visual Studio 版本转换工具WPF版开源了
想法的由来 入职一家新公司,领导给了个任务,要编写一个视频监控软件,等我编写调试好,领导满意了以后,这个软件要加入到公司的一个软件系统中去(这个添加工作不用我来做,嘻嘻,看着自己的软件被别人使用,心情 ...
- C++实现邮件群发的方法
这篇文章主要介绍了C++实现邮件群发的方法,较为详细的分析了邮件发送的原理与C++相关实现技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C++实现邮件群发的方法.分享给大家供大家参考.具 ...
- GnuPG 1.4.15 发布,邮件加密工具
GnuPG 1.4.15 改进包括: * Fixed possible infinite recursion in the compressed packet parser. [CVE-2013-44 ...
- 邮件发送工具类 SendMail.java
package com.util; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.Simp ...
- QC邮件转发工具Mail Direct安装配置手册
QC邮件转发工具Mail Direct安装配置手册 2010-06-11 10:00:56| 分类: 软件测试 | 标签: |举报 |字号大中小 订阅 QC邮件转发工具安装配置手册 由于公司没有独立的 ...
- java 邮件发送工具类
首先需要下载mail.jar文件,我个人通常是使用maven中心库的那个: <dependency> <groupId>javax.mail</groupId> & ...
随机推荐
- multi-CPU, multi-core and hyper-thread--转
原文地址:http://stackoverflow.com/questions/680684/multi-cpu-multi-core-and-hyper-thread Multi-CPU was t ...
- mysql按汉语拼音首字母排序
如果数据表table的某字段name的字符编码是utf8_general_ci : SELECT * FROM `table` ORDER BY convert(name USING gbk ...
- Android 开发有用代码积累
Android开发需求变化快,开发周期要求尽量短,接下来一系列文章从实际使用出发总结一些常用的代码片段,便于查找,也为后来人提供一份参考. 1.获取Manifest的基本信息(升级页面和软件关于页面一 ...
- SQL Server 2016里TempDb的提升
几个星期前,SQL Server 2016的最新CTP版本已经发布了:CTP 2.4(目前已经是CTP 3.0).这个预览版相比以前的CTP包含了很多不同的提升.在这篇文章里我会谈下对于SQL Ser ...
- SQL Server 2014,表变量上的非聚集索引
从Paul White的推特上看到,在SQL Server 2014里,对于表变量(Table Variables),它是支持非唯一聚集索引(Non-Unique Clustered Indexes) ...
- Jquery几个比较实用,但又让很多人忽略的几个函数
工作中接触的人中,这些函数的使用频率比较少,我用的又比较好用的几个函数 来给大家分享一下. 你有你喜欢的,也可以分享一下 1.filter 使用了我要什么就有什么 这个函数不但可以很方便的筛选自定义H ...
- ASP.NET MVC 5 默认模板的JS和CSS 是怎么加载的?
当创建一个默认的mvc模板后,项目如下: 运行项目后,鼠标右键查看源码,在源码里看到头部和尾部都有js和css文件被引用,他们是怎么被添加进来的呢? 首先我们先看对应的view文件index.csht ...
- 【第〇课】用更好的IDE开发
推荐的IDE IntelliJ IDEA JetBrains是一家捷克的软件开发公司,这家公司做出了很多的优秀的IDE,有写python的.php的.web前端的……IDEA就是其中一款非常优秀的ja ...
- mysql主从复制replication的一些相关命令
主服务器上的相关命令:show master status; mysql> show master status\G . row *************************** Posi ...
- [Solution] 简单数字识别之Tesseract
图像识别涉及的理论:傅里叶变换,图形形态学,滤波,矩阵变换等等. Tesseract的出现为了解决在没有这些复杂的理论基础,快速识别图像的框架. 准备: 1.样本图像学习,预处理 (平均每1个元素出现 ...