• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#邮件定时群发工具Atilia用法实例

C#邮件定时群发工具Atilia用法实例

作者:北风其凉 字体:[增加 减小] 来源:互联网 时间:2017-05-28

北风其凉 通过本文主要向大家介绍了马桶c的个人空间,c语言,欲情 c max,维生素c,奔驰c200等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了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)" /Y
xcopy "$(ProjectDir)AddressBook.xml" "$(TargetDir)" /Y
xcopy "$(ProjectDir)Attachments\*" "$(TargetDir)\Attachments\" /Y

</div>

三、收信人的配置

收信人配置的规则很简单,保存在AddressBook.xml中

<?xml version="1.0" encoding="gb2312"?>
<!--通讯录-->
<Root Subject="测试邮件">
 <Person Name="江有汜" Email="1239063237@qq.com" />
 <Person Name="淫侠" Email="****@qq.com" />
</Root>
</div>

每一个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 ||



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#利用ReportViewer生成报表
  • C#基于正则去掉注释的方法示例
  • C#中new的用法及与override的区别分析
  • C#实现两个richtextbox控件滚动条同步滚动的简单方法
  • C# for循环的经典案例集锦
  • C#操作word的方法示例
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法
  • C# WinForm制作异形窗体与控件的方法
  • C#实现Excel表数据导入Sql Server数据库中的方法
  • C#使用NPOI上传excel

相关文章

  • 2017-05-28C#向PPT文档插入图片以及导出图片的实例
  • 2017-05-28C#中控制远程计算机的服务的方法
  • 2017-05-28C# Socket实现简单控制台案例
  • 2017-05-28C#启动windows服务方法的相关问题分析
  • 2017-05-28C#七大经典排序算法系列(下)
  • 2017-05-28C#实现图片上传与浏览切换的方法
  • 2017-05-28C# Resources资源详解
  • 2017-05-28C#中使用Interlocked进行原子操作的技巧
  • 2017-05-28c#继承中的函数调用实例
  • 2017-05-28C#通过yield实现数组全排列的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#中委托(Delegates)的使用方法详解
    • C#异常处理详解
    • C#中抛出异常用法实例
    • WPF实现图片合成或加水印的方法【2种方法】
    • C#实现Json转Unicode的方法
    • C#实现过滤sql特殊字符的方法集合
    • C#遍历文件夹及子目录下所有图片
    • C#七大经典排序算法系列(上)
    • 使用mutex实现应用程序单实例运行代码分享
    • C#语法相比其它语言比较独特的地方(三)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有