C#控制台程序,发送邮件,可带附件

    最近几天由于公司发送了大量内容相同的邮件,而被国外的反垃圾邮件组织列入了黑名单,致使很多客户收不到我们的邮件,客服接到投诉,而之前做的一个查询日志的小页面,因为某种原因,访问速度很慢,甚至这几天人一多,页面就总是超时.刚开始以为是程序问题或者是数据量比较大,但是程序也只是一句简单的两表联查,两张表大概也就200W左右的数据,在线下跑的时候速度很快,可是一到线上就慢了很多.后来到系统组那边找了一下,发现是线上的机器在连数据库的时候,没有将数据库的IP添加到Host里,添进去之后速度瞬间就提了上去.

    昨天在研究解决策略的时候,同事建议建立一个定时任务,将查询的结果以附件的形式发送给查询人,所以写了一个控制台程序来跑.因为以前没有接触过这方面的东西,所以查了很多,最后还是发现MSDN真是个好东西,呵呵,不说了,代码帖上来,大家把***换成自己的邮件服务器,然后发件人和收件人相应地改一下,程序就可以跑了.有什么问题还请大家积极地反应,帮助小弟提高.

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
using System.Net;
using System.Net.Mime;
using System.Net.Mail;

namespace SendEmail
{
    class Program
    {
        //smtp.UseDefaultCredentials = true;
        //client.Credentials = CredentialCache.DefaultNetworkCredentials;
        static void Main(string[] args)
        {
         
           //DefaultSendEmail();
           // WriteEmail();
            Console.WriteLine(WriteEmail().ToString());
            //CreateMessageWithAttachment();
        }
      
        //Single receiver test.MSDN上最简单的发送邮件
        public static void DefaultSendEmail(string server)//你的邮件服务器
        {
            string to = "job.chang@live.cn";
            string from = "job.chang@live.cn";
            string subject = "Using the new SMTP client.";
            string body = @"Using this new feature, you can send an e-mail message from an application very easily.";
            MailMessage message = new MailMessage(from, to, subject, body);
           
            SmtpClient client = new SmtpClient(server);
            //Console.WriteLine("Changing time out from {0} to 100.", client.Timeout);
            //client.Timeout = 100;
            // Credentials are necessary if the server requires the client
            // to authenticate before it will send e-mail on the client's behalf.
            client.Credentials = CredentialCache.DefaultNetworkCredentials;
            client.Send(message);
            Console.WriteLine("Email sended.");
        }

        //Multiply users test.
        public static string MultiSendEmail(string mailFrom,string mailTo,string mailCC,string mailHead,string mailBody,ArrayList mailAttach,bool isHtml)
        {
            //改用XML文件在Web.Configure中配置.
            string eServer = "***.**.**.**";//需要换成你的邮件服务器
            int ePort = 25;//默认
            MailMessage eMail = new MailMessage();
            SmtpClient eClient = new SmtpClient(eServer,ePort);
            eClient.UseDefaultCredentials = true;

            eMail.Subject = mailHead;
            eMail.SubjectEncoding = Encoding.UTF8;
           
            eMail.Body = mailBody;
            eMail.BodyEncoding = Encoding.UTF8;

            eMail.From = new MailAddress(mailFrom);
            //Receiver
            string[] arrMailAddr;
            try
            {
               
                //用";"分割多个收件人.
                eMail.To.Clear();
                if(!string.IsNullOrEmpty(mailTo))
                {
                    arrMailAddr=mailTo.Split(';');
                    foreach(string strTo in arrMailAddr)
                    {
                        if(!string.IsNullOrEmpty(strTo))
                        {
                            eMail.To.Add(strTo);
                        }
                    }
                }

                //用";"分割多个抄送人.
                eMail.CC.Clear();
                if(!string.IsNullOrEmpty(mailCC))
                {
                    arrMailAddr=mailCC.Split(';');
                    foreach(string strCC in arrMailAddr)
                    {
                        if(!string.IsNullOrEmpty(strCC))
                        {
                            eMail.CC.Add(strCC);
                        }
                    }
                }

                //用";"分割多个秘件抄送人.
                //eMail.Bcc.Clear();
                //if(!string.IsNullOrEmpty(mailBCC))
                //{
                //    arrMailAddr=mailBCC.Split(';');
                //    foreach(string strBCC in arrMailAddr)
                //    {
                //        if(!string.IsNullOrEmpty(strBCC))
                //        {
                //            eMail.Bcc.Add(strBCC);
                //        }
                //    }
                //}
                if(isHtml)
                {
                    eMail.IsBodyHtml=true;
                }
                else
                {
                    eMail.IsBodyHtml=false;
                }

                //Attachment
                eMail.Attachments.Clear();
                if(mailAttach!=null)
                {
                    for(int i=0;i<mailAttach.Count;i++)
                    {
                        if(!string.IsNullOrEmpty(mailAttach[i].ToString()))
                        {
                            eMail.Attachments.Add(new Attachment(mailAttach[i].ToString()));
                        }
                    }
                }
                eClient.Send(eMail);
                return "邮件已发送,请查收!";

 
            }
            catch(Exception ex)
            {
                return "邮件发送失败,原因:"+ex.Message.ToString();
            }
 
        }

        public static string strMailFrom;
        public static string strMailTo;
        public static string strMailCC;
        public static string strMailSubject;
        //public static string strStartTime;
        //public static string strEndTime;
        public static string strMailBody;
        public static ArrayList arrAttachment;
        public static string  WriteEmail()
        {
            strMailFrom = "job.chang@live.cn";
            Console.WriteLine("请输入收件人邮箱,以"+";"+"间隔!");
            strMailTo = Console.ReadLine().ToString();
            strMailCC = "job.chang@live.cn";
            strMailSubject = "Test Mail";
            strMailBody = "Test Mail";

            arrAttachment=new ArrayList ();
            arrAttachment.Add(@"c:\cmd.txt");
            arrAttachment.Add(@"c:\job.txt");
            arrAttachment.Add(@"c:\t.txt");
           
            return MultiSendEmail(strMailFrom,strMailTo,strMailCC,strMailSubject,strMailBody,arrAttachment ,false );
        }

        //微软家自带的发送带附件.
        public static void CreateMessageWithAttachment(string server)
        {
            // Specify the file to be attached and sent.
            // This example assumes that a file named Data.xls exists in the
            // current working directory.
            string file = @"c:\t.txt";
            // Create a message and set up the recipients.
            MailMessage message = new MailMessage(
               "job.chang@live.cn",
               "job.chang@live.cn",
               "Quarterly data report.",
               "See the attached spreadsheet.");

            // Create  the file attachment for this e-mail message.
            Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
            // Add time stamp information for the file.
            ContentDisposition disposition = data.ContentDisposition;
            disposition.CreationDate = System.IO.File.GetCreationTime(file);
            disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
            disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
            // Add the file attachment to this e-mail message.
            message.Attachments.Add(data);
            //Send the message.
            SmtpClient client = new SmtpClient(server);
            // Add credentials if the SMTP server requires them.
            client.Credentials = CredentialCache.DefaultNetworkCredentials;
            client.Send(message);
            // Display the values in the ContentDisposition for the attachment.
            ContentDisposition cd = data.ContentDisposition;
            Console.WriteLine("Content disposition");
            Console.WriteLine(cd.ToString());
            Console.WriteLine("File {0}", cd.FileName);
            Console.WriteLine("Size {0}", cd.Size);
            Console.WriteLine("Creation {0}", cd.CreationDate);
            Console.WriteLine("Modification {0}", cd.ModificationDate);
            Console.WriteLine("Read {0}", cd.ReadDate);
            Console.WriteLine("Inline {0}", cd.Inline);
            Console.WriteLine("Parameters: {0}", cd.Parameters.Count);
            foreach (DictionaryEntry d in cd.Parameters)
            {
                Console.WriteLine("{0} = {1}", d.Key, d.Value);
            }
            data.Dispose();
        }
    }
}

转载于:https://www.cnblogs.com/zhangkun-w/archive/2008/12/05/1348518.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】从零开始学图形学:10分钟看懂贝塞尔曲线

转自&#xff1a;https://zhuanlan.zhihu.com/p/344934774 引入 在画画的时候&#xff0c;你可能会遇到画曲线的情况。比如你想画一个肥宅的大肚子轮廓&#xff0c;此时你随手一画&#xff0c;发现不好看&#xff0c;感觉太鼓了&#xff0c;于是你只能重新画&#xff0c;再画一…

Linux重启网卡的方法

重启网卡的几种方法&#xff1a;一、network利用root帐户# service network restart二、ifdown/ifup# ifdown eth0# ifup eth0三、ifconfig# ifconfig eth0 down# ifconfig eth0 up

android webview url scheme,Android Webview ERR_UNKNOWN_URL_SCHEME错误

当我点击链接到mailto&#xff1a;adminikiyuzoniki.net时,我收到此错误&#xff1a;net: ERR_UNKNOWN_URL_SCHEME我试图添加一个if(url.startsWith(“mailto&#xff1a;”))条件,但它不起作用.这是我的MyWebViewClient方法&#xff1a;public class MyWebViewClient extends …

【转】编译DCMTK

转自&#xff1a;https://blog.51cto.com/u_2845385/1053291 也许是DCMTK的开发人员认为DCMTK是一个专用的库&#xff0c;没有必要做成动态链接库。 也许是DCMTK的开发人员认为DCMTK需要跨平台&#xff0c;做成动态链接库就平台相关了&#xff0c;违背了跨平台的本意。 …

WinCE6下的kernelIoControl使用方法

WinCE6下的kernelIoControl可不是谁都可以调的。 这个可能很多人曾经知道&#xff0c;但是老是忘记&#xff0c;比如我&#xff0c;哈哈。 kerneliocontrol以前在CE5下面耍惯了&#xff0c;用这个接口&#xff0c;AP简直可以无法无天啊&#xff0c;动不动就reset你&#xff0…

Flex 学习随笔 ---- 使用WebService 与数据库连接

任何一个网络工具&#xff0c; 如果不能和数据打交道&#xff0c;那它就是失败的。 还好Flex是可以的&#xff0c;由于本人刚学&#xff0c;就用asp.netc#来讲下这个简单的连接。 Flex 和数据库通讯现在只能使用Service&#xff0c;如httpservice,rpcservice,webservice等等。 …

第三方登录android代码,Android Learning:微信第三方登录(示例代码)

这两天&#xff0c;解决了微信第三方授权登录的问题&#xff0c;作为一个新手&#xff0c;想想也是一把辛酸泪。我想着&#xff0c;就把我的遇到的坑给大家分享一下&#xff0c;避免新手遇到我这样的问题能够顺利避开。步骤一 微信开发者平台我开始的解决思路是&#xff0c;去这…

【转】基于DCMTK的DICOM相关程序编写攻略

转自&#xff1a;https://blog.csdn.net/jackmacro/article/details/5332654 零、前言&#xff1a; 由于现在的医学影像设备的图像存储和传输正在逐渐向DICOM标准靠拢&#xff0c;因此&#xff0c;我们在进行医学图像处理的过程中&#xff0c;经常需要自己编写和DICOM格式的图…

对象与函数

摘自《UMLOOPC嵌入式C语言开发精讲》 11.3 对象与函数11.3.1 函数的角色经济诺贝尔奖得主H.A.Simon&#xff08;H.A.Simon&#xff0c;计算机人工智能之父&#xff09;在其1962年的文章《The Architecture of Complexity》中说道&#xff1a;“从小系统建造成庞大系统时&…

android打包工具多渠道批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案...

今天写一篇文章来总结下android批量打渠道包美团版本。之前项目上一直用的是gradle 批量打包方式&#xff0c;那个速度啊真是令人发指&#xff0c;15个渠道得跑上半个小时&#xff0c;出去吃顿饭回来&#xff0c;还在跑。特别是赶上项目上线的话&#xff0c;如果给测试提交了正…

【转】云社区 博客 博客详情 二维异形件排版算法介绍(一)

转自&#xff1a;https://bbs.huaweicloud.com/blogs/175385 【摘要】 排样问题&#xff08;Nesting Problem&#xff09;又称为下料问题(Cutting and stock problems)或填充问题(Packing Problem)&#xff0c;其目标是在材料切割过程中寻找一个较高的材料利用率。排样问题属于…

增加RIL组件时编辑出现的问题

当我把RIL组件加进到CE6的项目里去编译,本来好好的项目编译不过去了,我就选择了RIL的所有feature&#xff0c;没有改任何东西,理论上sysgen就可以了&#xff0c;但是确总是编译不过去 看根目录下的build.log: E:/WINCE600/OSDesigns/POS410/POS410/Wince600/E6000_ARMV4I/cesy…

android 微信两个服务的,微信上线两个新功能

微信又上线新功能了&#xff01;一个与你的钱包相关&#xff0c;一个与你的微信号相关&#xff0c;赶紧来看看吧微信支付分全面开放每个微信用户都拥有自己的一个分数值 &#xff0c;且每月根据综合数据更新一次。达到一定的分值门槛&#xff0c;用户即可享受超千项便捷服务。这…

【转】二维异形件排版算法介绍(二)

转自&#xff1a;https://bbs.huaweicloud.com/blogs/196289【摘要】 二维不规则异形件主要有两种策略&#xff1a;分别是基于可行解的排样策略和基于重叠移除的排样策略。所谓基于可行解的排样策略&#xff0c;是指在排样过程中零件之间始终是不重叠的&#xff0c;而基于重叠移…

解决用户控件循环引用的笨办法

在上一篇中提到使用MagicAjax开发了一个项目,因为做这个项目之前对MagicAjax不是很了解,在里面使用了用户控件,我发现这是一个很致命的错误,用户控件在MagicAjax中用起来很痛苦.因我们的项目不是简单的只要求"看起来像"没有刷新页面,其中一个主要的页面有那么一点点复…

【转】介绍一些免费/开源的医学影像后处理工具

转自&#xff1a;https://blog.csdn.net/liaopiankun0618/article/details/84328331 来源&#xff1a;融视影像科技 综述 医学影像的处理有两个特质。一是复杂&#xff0c;整个处理流程涉及多种算法&#xff0c;需要调整的参数较多。二是发展快&#xff0c;从采集、重建到后…

android 安卓市场,安卓市场(Android Market).doc

安卓市场(Android Market)安卓市场(Android Market)Android (HiMarket) China market is the earliest and largest Android software and online game download platform, Netdragon well-known products, provide good service for users of mobile phone software. Since it…

IROM 浅见

IROM其实是三星已经固化在CPU里面的一段代码&#xff0c;我们要做的事情就是提供一段可以供IROM读取的8K代码程序&#xff0c;至于这8K代码放在哪里&#xff0c;由CPU的相关引脚决定&#xff08;OM1-OM4&#xff0c;GPN13-GPN15&#xff09;。也就是说从哪里启动的意思。 如果从…

LINQ是死是活?——很奇怪为什么会有这样的话题?

LINQ是死是活?&#xff1f;&#xff1f; 如果我问您&#xff1a;机器代码死了吗&#xff1f;汇编死了吗&#xff1f;C死了吗&#xff1f;VB6.0死了吗&#xff1f;Delphi死了吗&#xff1f;您可能会觉得我很无聊。所以我觉得“LINQ是死是活”的说法也很奇怪&#xff1f; LINQ诞…

android gradle 语法,Gradle 1.语法

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;gradle 语法解析:gradle的语法十分简洁,以至于看起来跟像是配置文件。先看一个简单的android项目完整的gradle脚本&#xff1a;build.gradle123456789101112131415…