`

C#带数据多线程发邮件

阅读更多

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Web.Mail;

namespace ConsoleApplication1
{
 
    class Program
    {
        static void Main(string[] args)
        {
            int tempCount = 12;
            int tempWhileCount = (tempCount / 10) * 10;
            int tempOtherCount = tempCount - tempWhileCount;

            Console.WriteLine(tempWhileCount);
            Console.WriteLine(tempOtherCount);

            //指定线程数
            int size = 5;
            List<MailInfo> lall = new List<MailInfo>();
            //添加邮件信息
            for (int i = 0; i <= tempCount; i++)
            {
                lall.Add(new MailInfo("三毛"+ i.ToString(),"wangdetian16" + i.ToString() + "@qq.com"));
            }
            //创建多线程
            for (int i = 0; i < size; i++)
            {
                ThreadData temptd = new ThreadData();
                List<MailInfo> tempLi = new List<MailInfo>();
                for (int j = i * (tempWhileCount / size); j < (i * (tempWhileCount / size) + tempWhileCount / size); j++)
                {
                    tempLi.Add(lall[j]);
                }
                temptd.LisMails = tempLi;
                Thread tempThread = new Thread(new ThreadStart(temptd.Run));
                tempThread.Start();


            }
            ThreadData temptdOther = new ThreadData();
            List<MailInfo> tempLiOther = new List<MailInfo>();
            for (int j = tempWhileCount; j < tempCount; j++)
            {
                tempLiOther.Add(lall[j]);
            }
            temptdOther.LisMails = tempLiOther;
            Thread tempThreadOther = new Thread(new ThreadStart(temptdOther.Run));
            tempThreadOther.Start();
           

 

            //ThreadData thdata1 = new ThreadData();
            //List<string> l1 = new List<string>();
            //for (int i = 0; i < 1000; i++)
            //{
            //    l1.Add("wangdetian16"+i.ToString()+"@163.com");
            //}
           
            //thdata1.LisMails = l1;
            //Thread thread = new Thread(new ThreadStart(thdata1.Run));
            //thread.Start();

            //ThreadData thdata2 = new ThreadData();
            //List<string> l2 = new List<string>();
            //for (int i = 0; i < 10; i++)
            //{
            //    l2.Add("wangdetian18" + i.ToString() + "@163.com");
            //}
            //thdata2.LisMails = l2;
            //Thread thread1 = new Thread(new ThreadStart(thdata2.Run));
            //thread1.Start();
           
  
        }
    }

    public class ThreadData
    {
    
        public static string MailMessage = "{0}你好你人物要做近三分萨拉夫接撒立法精神多了几分当上了副驾驶的发生大风蓝色队服那里公司发展规划的";
        private List<MailInfo> _LisMails;
        public static string frommail = "mailto:wangdetian116688@163.com%22;//System.Configuration.ConfigurationManager.AppSettings[%22frommail"];
        public static string username = "wangdetian116688";//System.Configuration.ConfigurationManager.AppSettings["username"];
        public static string password = "987654321";//System.Configuration.ConfigurationManager.AppSettings["password"];
        public List<MailInfo> LisMails
        {
            set { this._LisMails = value; }
            get { return this._LisMails; }
        }
        public void Run()
        {
            foreach (MailInfo s in LisMails)
            {
                System.Threading.Thread.Sleep(1000);
                Console.WriteLine(string.Format(MailMessage,s.MailName+s.MailAddress));
                SendMail20(s.MailAddress, s.MailName, string.Format(MailMessage, s.MailName));
            }
        }
        private bool SendMail(string toMail, string subject, string body)
        {
            try
            {


                string fromMail = ThreadData.frommail;
                MailMessage myMail = new MailMessage();
                myMail.From = fromMail;
                myMail.To = toMail;
                //myMail.Cc = ccMail;
                //myMail.Bcc = bccMail;
                myMail.Subject = subject;
                myMail.Body = body;
                myMail.BodyFormat = MailFormat.Html;

                //附件
                string ServerFileName = "";
                //if (this.upfile.PostedFile.ContentLength != 0)
                //{
                //    string upFileName = this.upfile.PostedFile.FileName;
                //    string[] strTemp = upFileName.Split('.');
                //    string upFileExp = strTemp[strTemp.Length - 1].ToString();
                //    ServerFileName = Server.MapPath(DateTime.Now.ToString("yyyyMMddhhmmss") + "." + upFileExp);
                //    this.upfile.PostedFile.SaveAs(ServerFileName);
                //    myMail.Attachments.Add(new MailAttachment(ServerFileName));
                //}


                myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1);
                myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", ThreadData.username); //发送方邮件帐户
                myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", ThreadData.password); //发送方邮件密码

                SmtpMail.SmtpServer = "smtp." + fromMail.Substring(fromMail.IndexOf("@") + 1);
                SmtpMail.Send(myMail);

                return true;
            }
            catch
            {
                return false;
            }
        }
        private bool SendMail20(string toMail, string subject, string body)
        {
            try
            {

                System.Net.Mail.MailAddress from = new System.Net.Mail.MailAddress(ThreadData.frommail); //邮件的发件人
                //string fromMail = ThreadData.frommail;
                System.Net.Mail.MailMessage myMail = new System.Net.Mail.MailMessage();
                //设置邮件的标题
                myMail.Subject = subject;
                //设置邮件的发件人
                //Pass:如果不想显示自己的邮箱地址,这里可以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用
                myMail.From = from;
                //MailAddress(address, displayName)
                myMail.To.Add(new System.Net.Mail.MailAddress(toMail));
              
                ////设置邮件的抄送收件人
                ////这个就简单多了,如果不想快点下岗重要文件还是CC一份给领导比较好
                //mail.CC.Add(new MailAddress("Manage@hotmail.com", "尊敬的领导");

                //设置邮件的内容
                myMail.Body = body;
                //设置邮件的格式
                myMail.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");
                myMail.IsBodyHtml = true;
                //设置邮件的发送级别
                myMail.Priority = System.Net.Mail.MailPriority.Normal;

                //设置邮件的附件,将在客户端选择的附件先上传到服务器保存一个,然后加入到mail中
                //string fileName = txtUpFile.PostedFile.FileName.Trim();
                //fileName = "D:\UpFile\" + fileName.Substring(fileName.LastIndexOf("\") + 1);
                //txtUpFile.PostedFile.SaveAs(fileName); // 将文件保存至服务器
                //mail.Attachments.Add(new Attachment(fileName));

                myMail.DeliveryNotificationOptions = System.Net.Mail.DeliveryNotificationOptions.OnSuccess;

                System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
                //设置用于 SMTP 事务的主机的名称,填IP地址也可以了
                client.Host = "smtp." + ThreadData.frommail.Substring(ThreadData.frommail.IndexOf("@") + 1);
                //"smtp.hotmail.com";// "smtp." + fromMail.Substring(fromMail.IndexOf("@") + 1);
                //设置用于 SMTP 事务的端口,默认的是 25
                //client.Port = 25;
                client.UseDefaultCredentials = false;
                //这里才是真正的邮箱登陆名和密码,比如我的邮箱地址是 wangdetian@126.com, 我的用户名为 hbgx ,我的密码是 xgbh
                client.Credentials = new System.Net.NetworkCredential(ThreadData.username, ThreadData.password);
                client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
                //都定义完了,正式发送了,很是简单吧!
                client.Send(myMail);   

                return true;
            }
            catch
            {
                return false;
            }
        }
      
    }
    public class MailInfo
    {
        public string MailName;
        public string MailAddress;
        public string MailMessage;
        public MailInfo(string mailName, string mailAddress)
        {
            this.MailName = mailName;
            this.MailAddress = mailAddress;
        }
        public MailInfo(string mailName, string mailAddress, string mailMessage)
        {
            this.MailName = mailName;
            this.MailAddress = mailAddress;
            this.MailMessage = mailMessage;
        }
    }
      
    }


 

分享到:
评论

相关推荐

    C#多线程发送邮件,发送工资条

    本项目“C#多线程发送邮件,发送工资条”利用了这一特性来实现高效的邮件批量发送,尤其是在处理如工资条等敏感且大量数据时,多线程的优势尤为明显。 首先,我们需要理解什么是多线程。在单线程应用中,程序执行是...

    C#简单的多线程计划示例

    在IT行业中,多线程和任务调度是两个关键的概念,特别是在C#编程中。本示例,"C#SchedulerManager每日多线程计划执行代码",着重于如何使用C#来实现一个简单但实用的任务调度器,它能够在每天固定的时间启动多个线程...

    c#定时器+多线程

    以上内容详细解释了如何在C#中使用`Timer`类结合多线程来实现定时任务,如数据更新和邮件发送。实际项目中,可能还需要考虑异常处理、线程同步以及更复杂的调度策略,以确保系统的稳定性和可靠性。

    c#多线程异步传输(比较简单易懂)

    在.NET框架中,C#语言提供了强大的多线程和异步处理能力,使得开发者能够创建高性能、高响应性的应用程序。本篇文章将详细讲解基于C#的多线程异步传输,特别是通过Socket实现网络通信的基本原理和应用。 一、多线程...

    email接收电子邮件,可针对多用户邮箱进行多线程下载电子邮件.zip

    标题中的“email接收电子邮件,可针对多用户邮箱进行多线程下载电子邮件”表明这是一个关于使用编程语言实现电子邮件的接收功能,特别是支持多用户和多线程下载的应用程序或库。这个压缩包包含了一系列的源代码文件...

    用C#做个带精灵的邮件通知程序

    综上所述,创建这样一个邮件通知程序涉及到的知识点广泛,涵盖C#编程、网络通信、用户界面设计、多线程编程、数据存储以及安全实践等多个方面。通过这个项目,开发者可以提升自己的综合技能,并对邮件系统有更深入的...

    细细品味C#(Timer及多线程编程).pdf

    多线程编程中的一些高级概念,比如断点续传和多线程上载,允许网络应用在不稳定或中断的网络条件下,仍然可以从中断处继续数据传输,而不会重新开始整个过程。这在处理大数据文件或长时间任务时尤其有用。 总之,C#...

    多线程智能发送邮件

    在“多线程智能发送邮件”的场景中,系统会先智能地生成对账单Excel,接着将文件压缩,然后利用多线程技术同时发送邮件。这个过程涉及到多个关键技术点,下面将详细讲解。 首先,**操作Excel** 是一个关键环节。这...

    C#发送邮件小程序源码

    - 对于大量邮件发送,考虑使用多线程或异步方法以提高效率,但注意避免被邮件服务提供商识别为垃圾邮件。 通过上述内容,我们可以看到,使用C#发送邮件涉及到了.NET框架的邮件处理机制、SMTP协议以及安全性问题。...

    c# HotMail收发邮件

    在C#编程环境中,开发一个HotMail邮件收发系统涉及到多个关键知识点,这些知识点涵盖了网络通信、SMTP(Simple Mail Transfer Protocol)与POP3(Post Office Protocol version 3)协议、安全性和身份验证等方面。...

    C#写的简洁邮件客户端

    在本项目中,"C#写的简洁邮件客户端"是一个...通过以上知识点,我们可以看出这个C#邮件客户端项目不仅展示了C#编程的基本技能,还涵盖了网络通信、数据库操作、用户界面设计等多个方面的知识,是一个综合性的开发实践。

    c#线程 lock用法

    然而,需要注意的是,过度使用`lock`可能导致死锁和性能下降,因此在编写多线程代码时,应尽量减少锁的使用,并考虑其他同步机制,如`Monitor`、`Mutex`、`Semaphore`或`Interlocked`类,根据具体场景选择最适合的...

    C#时钟、多线程、邮箱SMTP、ORECAL数据库等

    在这个项目中,我们关注的是四个关键知识点:C#时钟、多线程、SMTP邮件发送以及Oracle数据库操作。 首先,让我们详细探讨C#时钟。在C#中,可以使用System.Windows.Forms命名空间中的Timer类来创建一个时钟,它允许...

    c#做的邮件管理系统

    6. 多线程技术:为了提高系统性能,邮件管理可能会使用多线程处理,比如在后台异步发送邮件,不阻塞用户界面。 7. 安全性:邮件系统涉及到用户的隐私,因此安全性至关重要。C#提供了加密和解密算法,如AES、RSA,...

    C# Asp.Net 邮件异步发送

    异步发送邮件可以避免阻塞应用程序线程,使得服务器可以处理其他请求。以下是使用异步方法发送邮件的示例: ```csharp // 使用async/await语法 public async Task SendEmailAsync(string to, string subject, ...

    c#开发的邮件发送服务

    综上所述,这个C#邮件发送服务的开发涉及了C#基础、网络通信、数据库操作、异常处理、多线程、Windows服务、重试策略和日志管理等多个方面,是一个综合性的项目,对提升开发者在企业级应用开发中的技能有很大帮助。

    C#做的电子邮件收发模块

    9. **多线程和异步操作**:在处理大量邮件时,使用多线程或异步编程可以提高程序性能。C#的`Task`和`async/await`关键字可以方便地实现这一目标,避免阻塞UI线程。 通过以上知识点,我们可以构建一个完整的电子邮件...

    电子邮件客户端软件c#

    - 多线程和异步编程:提高程序响应速度,避免阻塞用户界面。 - 错误处理和调试:确保软件稳定性和用户体验。 通过这个项目,开发者不仅可以掌握C#编程,还能深入理解网络通信、数据库管理和软件工程实践。对于学习...

    c#邮件自动发送程序源码

    c#+vs2008 写的邮件自动发送程序。 将要发送的邮件写入到sql Server中的表(固定的表结构),由此程序周期性地从表中读取要待发邮件并进行发送。 发送邮件的方法在单独的线程中运行。 可配置多个smtp进行发送。 其中...

    C#收发邮件的类

    4. 多线程:如果需要处理大量邮件,可以考虑使用多线程来提高效率,但要注意同步问题以防止数据冲突。 5. 邮件队列:对于批量发送或接收,可以使用队列存储待处理的邮件,以实现异步操作和优化性能。 总结起来,这...

Global site tag (gtag.js) - Google Analytics