国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#郵件定時群發工具Atilia用法實例

2020-01-24 01:31:36
字體:
來源:轉載
供稿:網友

本文實例講述了C#郵件定時群發工具Atilia用法。分享給大家供大家參考。具體如下:

一、Atilia可以做什么

Atilia是一個基于命令行的C#程序,可以發送郵件給一個或多個人。Atilia通過QQ的SMTP服務發送郵件,可以發送附件,可以在配置文件中手動配置收信人。

二、運行Atilia需要什么

在Atilia應用程序的同一目錄下,有如下文件

1)一個Attachments文件夾,Atilia會將里面所有的子文件(不含子文件夾及其中文件)視作附件發送給收信人

2)AddressBook.xml文件,用于配置收信人

3)Atilia.html文件,是被發送的郵件文本

這三個文件都位于編譯環境中的根目錄下,在“程序集屬性→生成事件→后期生成事件命令行”中可以將編譯環境中的文件復制到Debug目錄中

xcopy "$(ProjectDir)Atilia.html" "$(TargetDir)" /Yxcopy "$(ProjectDir)AddressBook.xml" "$(TargetDir)" /Yxcopy "$(ProjectDir)Attachments/*" "$(TargetDir)/Attachments/" /Y

三、收信人的配置

收信人配置的規則很簡單,保存在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

四、輸入參數

1)沒有輸入參數:當即準備發送所有的郵件,發送前詢問是否發送:要求輸入(y/n)

2)兩個輸入參數:8位的年月日 和 6位的時分秒,如2014年9月30日23時40分00秒,就需要輸入如下命令運行:Atilia 20140930 234000

五、程序代碼

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 style="color:red;font-size:250%;font-weight:800">      江有汜 攜 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 >        維基共享資源:飄揚在北京的五星紅旗      </a>    </p>    <p>      程序源碼:      <a >        源碼地址      </a>    </p>    刮開涂層贏千萬大獎:    <span style="background-color:black;color:black">      Atilia 很萌的,乃們不要黑她 :P    </span>   </body></html>

發送后的效果展示:

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 樟树市| 合水县| 西吉县| 贵定县| 额敏县| 龙川县| 吴忠市| 大庆市| 肥西县| 伊川县| 麟游县| 嘉义县| 墨竹工卡县| 嘉定区| 长丰县| 永平县| 得荣县| 丹阳市| 会同县| 宜兴市| 蒲城县| 应用必备| 方城县| 德格县| 定结县| 通化县| 茌平县| 海口市| 延长县| 罗田县| 济源市| 二连浩特市| 高要市| 柘荣县| 湘西| 常熟市| 长春市| 平昌县| 油尖旺区| 宁晋县| 襄垣县|