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="[email protected]" /> <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("[email protected]"); //讀取收信人列表 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("[email protected]"); //已過時 //讀取附件列表 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#法式設計有所贊助。