C#郵件准時群發對象Atilia用法實例。本站提示廣大學習愛好者:(C#郵件准時群發對象Atilia用法實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#郵件准時群發對象Atilia用法實例正文
本文實例講述了C#郵件准時群發對象Atilia用法。分享給年夜家供年夜家參考。詳細以下:
1、Atilia可以做甚麼

Atilia是一個基於敕令行的C#法式,可以發送郵件給一個或多小我。Atilia經由過程QQ的SMTP辦事發送郵件,可以發送附件,可以在設置裝備擺設文件中手動設置裝備擺設收信人。
2、運轉Atilia須要甚麼
在Atilia運用法式的統一目次下,有以下文件
1)一個Attachments文件夾,Atilia會將外面一切的子文件(不含子文件夾及個中文件)視作附件發送給收信人
2)AddressBook.xml文件,用於設置裝備擺設收信人
3)Atilia.html文件,是被發送的郵件文本
這三個文件都位於編譯情況中的根目次下,在“法式集屬性→生成事宜→前期生成事宜敕令行”中可以將編譯情況中的文件復制到Debug目次中
xcopy "$(ProjectDir)Atilia.html" "$(TargetDir)" /Y xcopy "$(ProjectDir)AddressBook.xml" "$(TargetDir)" /Y xcopy "$(ProjectDir)Attachments\*" "$(TargetDir)\Attachments\" /Y
3、收信人的設置裝備擺設
收信人設置裝備擺設的規矩很簡略,保留在AddressBook.xml中
<?xml version="1.0" encoding="gb2312"?> <!--通信錄--> <Root Subject="測試郵件"> <Person Name="江有汜" Email="1239063237@qq.com" /> <Person Name="淫俠" Email="****@qq.com" /> </Root>
每個Person代表了一小我,Name是前面Email的一個標識,Email是收信人的地址
Atilia運轉後會將郵件發給通訊錄中存在的每個Person
4、輸出參數
1)沒有輸出參數:立即預備發送一切的郵件,發送前訊問能否發送:請求輸出(y/n)
2)兩個輸出參數:8位的年代日 和 6位的時分秒,如2014年9月30日23時40分00秒,就須要輸出以下敕令運轉:Atilia 20140930 234000
5、法式代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net.Mime;
using System.Xml;
using System.Text.RegularExpressions;
namespace Atilia
{
class Program
{
static void Main(string[] args)
{
MailMessage mlmssg = new MailMessage();
mlmssg.From = new MailAddress("1254355584@qq.com");
//讀取收信人列表
Console.WriteLine("正在讀取收信人列表");
XmlDocument xdoc = new XmlDocument();
xdoc.Load("AddressBook.xml");
XmlNode xroot = xdoc.SelectSingleNode("Root");
foreach (var xe in xroot.ChildNodes)
{
//斷定讀取到的是XmlElement而不是正文
if (xe is XmlElement)
{
mlmssg.To.Add((xe as XmlElement).GetAttribute("Email"));
Console.WriteLine("增長收信人 {0} 郵箱地址為 {1}",
(xe as XmlElement).GetAttribute("Name"),
(xe as XmlElement).GetAttribute("Email"));
}
}
Console.WriteLine("正在生成郵件主題,設定編碼格局");
mlmssg.Subject = (xroot as XmlElement).GetAttribute("Subject");
mlmssg.SubjectEncoding = System.Text.Encoding.UTF8;
Console.WriteLine("正在讀取郵件內容(Atilia.html),設定編碼格局");
mlmssg.Body = File.ReadAllText(
"Atilia.html", Encoding.GetEncoding("gb2312"));
mlmssg.BodyEncoding = System.Text.Encoding.UTF8;
mlmssg.IsBodyHtml = true;
Console.WriteLine("設定郵件發送級別:Normal");
mlmssg.Priority = MailPriority.Normal;
//mailMessage.ReplyTo = new MailAddress("1239063237@qq.com"); //已過時
//讀取附件列表
Console.WriteLine("正在讀取附件列表");
if (System.IO.Directory.Exists("Attachments"))
{
System.IO.DirectoryInfo dif = new DirectoryInfo("Attachments");
if (dif.GetFiles().Count() != 0) //只讀取文件,不檢查子文件夾
{
System.Net.Mail.Attachment att = null;
//查詢文件夾中的各個文件
foreach (FileInfo f in dif.GetFiles())
{
//分類評論辯論幾種文件類型
switch (f.Extension.ToLower())
{
case ".rar":
case ".zip":
{
att = new Attachment(f.FullName,
MediaTypeNames.Application.Zip);
}
break;
case ".pdf":
{
att = new Attachment(f.FullName,
MediaTypeNames.Application.Pdf);
}
break;
case ".rtf":
{
att = new Attachment(f.FullName,
MediaTypeNames.Application.Rtf);
}
break;
default: //其他格局不指定格局
{
att = new Attachment(f.FullName,
MediaTypeNames.Application.Octet);
}
break;
}
ContentDisposition cd = att.ContentDisposition;
cd.CreationDate = File.GetCreationTime(f.FullName);
cd.ModificationDate = File.GetLastWriteTime(f.FullName);
cd.ReadDate = File.GetLastAccessTime(f.FullName);
Console.WriteLine("勝利添加附件 {0}", f.Name);
mlmssg.Attachments.Add(att);
}
}
}
//設定SMTP辦事器
Console.WriteLine("預備設置SMTP辦事");
SmtpClient smtpclt = new SmtpClient();
smtpclt.DeliveryMethod = SmtpDeliveryMethod.Network;
Console.WriteLine("正在填寫SMTP辦事器地址");
smtpclt.Host = "smtp.qq.com";
Console.WriteLine("正在填寫登錄賬戶和登錄暗碼");
smtpclt.Credentials =
new System.Net.NetworkCredential("1254355584", "****");
//沒有指准時間
if (args.Length == 0)
{
//發送郵件前的最初提醒
while (true)
{
Console.WriteLine("您確切要發送這些郵件嗎? (y/n)");
string result;
result = Console.ReadLine();
result = result.ToLower().Trim();
if (result == "y")
{
break;
}
else if (result == "n")
{
Environment.Exit(0);
}
else
{
Console.WriteLine("輸出毛病");
}
}
}
else
{
int time_a = 0; //年代日
int time_b = 0; //時分秒
int time_now_a;
int time_now_b;
try
{
//時光分為兩部門
//前一部門是8位數字表現的時光 如:20140930
//後一部門是4位數字表現的時光 如:210755
if (args.Length != 2)
{
throw new Exception("參數不准確");
}
//年代日
if (!Regex.IsMatch(args[0], "^[0-9]{8}$"))
{
throw new Exception("毛病的時光數據");
}
bool b1 = int.TryParse(args[0], out time_a);
//時分秒
if (!Regex.IsMatch(args[1], "^[0-9]{6}$"))
{
throw new Exception("毛病的時光數據");
}
bool b2 = int.TryParse(args[1], out time_b);
if ((!b1) || (!b2))
{
throw new Exception("時光數據轉換掉敗");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine("敕令示例: Atilia 20140930 210755");
//按隨意率性鍵持續
Console.WriteLine("按隨意率性鍵持續...");
Console.ReadKey();
Console.WriteLine("\b");
Environment.Exit(0);
}
int counter = 0;
while (true)
{
time_now_a = DateTime.Now.Year * 10000 +
DateTime.Now.Month * 100 + DateTime.Now.Day;
time_now_b = DateTime.Now.Hour * 10000 +
DateTime.Now.Minute * 100 + DateTime.Now.Second;
if (time_now_a < time_a ||
(time_now_a >= time_a && time_now_b < time_b))
{
System.Threading.Thread.Sleep(500);
counter++;
if (counter % 10 == 0)
{
Console.WriteLine("正在期待發信時光 {0} {1}",
time_a, time_b);
counter = 0;
}
}
else
{
break;
}
}
}
//發送郵件
Console.WriteLine("正在發送郵件,請稍候 ...");
smtpclt.Send(mlmssg);
//mail from address must be same as authorization user
//QQ郵箱→設置→賬戶→POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV辦事
//勾選POP3/SMTP辦事
Console.WriteLine("郵件發送終了,正在釋放資本");
smtpclt.Dispose();
mlmssg.Dispose();
Console.WriteLine("按隨意率性鍵持續...");
Console.ReadKey();
Console.WriteLine("\b");
}
}
}
附:慶賀國慶節的Atilia.html內容
<html>
<head>
<title>
國慶快活!
</title>
<style>
body{text-align:center}
</style>
</head>
<body>
<span >
江有汜 攜 Atilia 恭祝年夜家 國慶快活!!!
</span>
<hr />
<img src="http://upload.wikimedia.org/wikipedia/commons/c/ce/Chinese_flag_%28Beijing%29_-_IMG_1104.jpg"
alt="中華國民共和國國旗" height="400" width="660"/>
<hr>
<b>十一小長假,可要留意好好歇息啊~~~</b><br>
<p>
圖片起源:
<a href="http://upload.wikimedia.org/wikipedia/commons/c/ce/Chinese_flag_%28Beijing%29_-_IMG_1104.jpg">
維基同享資本:飄蕩在北京的五星紅旗
</a>
</p>
<p>
法式源碼:
<a href="http://my.oschina.net/Tsybius2014/blog/323703">
源碼地址
</a>
</p>
刮開塗層贏萬萬年夜獎:
<span >
Atilia 很萌的,乃們不要黑她 :P
</span>
</body>
</html>
發送後的後果展現:

願望本文所述對年夜家的C#法式設計有所贊助。