程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#郵件准時群發對象Atilia用法實例

C#郵件准時群發對象Atilia用法實例

編輯:C#入門知識

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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved