博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
群发邮件功能的完善
阅读量:4560 次
发布时间:2019-06-08

本文共 4188 字,大约阅读时间需要 13 分钟。

邮件有需要加密的地方,提供一个加密方法类

public static class DesSet

{
    /// <summary>
    /// 加密方法 Key 必须为8位
    /// </summary>
    /// <param name="pToEncrypt"></param>
    /// <param name="sKey"></param>
    /// <returns></returns>
    public static string Encrypt(string pToEncrypt, string sKey)
    {
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();

        byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);

        des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
        des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
        cs.Write(inputByteArray, 0, inputByteArray.Length);
        cs.FlushFinalBlock();
        StringBuilder ret = new StringBuilder();
        foreach (byte b in ms.ToArray())
        {
            ret.AppendFormat("{0:X2}", b);
        }
        ret.ToString();
        return ret.ToString();
    }
    /// <summary>
    /// 解密方法 Key 必须为8位
    /// </summary>
    /// <param name="pToDecrypt"></param>
    /// <param name="sKey"></param>
    /// <returns></returns>
    public static string Decrypt(string pToDecrypt, string sKey)
    {
        try
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
            for (int x = 0; x < pToDecrypt.Length / 2; x++)
            {
                int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
                inputByteArray[x] = (byte)i;
            }
            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            //如果数据为空字符串会报不正确的数据
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            return System.Text.Encoding.Default.GetString(ms.ToArray());
        }
        catch
        {
            return null;
        }
    }
    /// <summary>
    /// 解密方法 Key 必须为8位
    /// </summary>
    /// <param name="pToDecrypt"></param>
    /// <param name="sKey"></param>
    /// <returns></returns>
    public static string qxDecrypt(string pToDecrypt, string sKey)
    {
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
        for (int x = 0; x < pToDecrypt.Length / 2; x++)
        {
            int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
            inputByteArray[x] = (byte)i;
        }
        des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
        des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
        cs.Write(inputByteArray, 0, inputByteArray.Length);
        //如果数据为空字符串会报不正确的数据
        cs.FlushFinalBlock();
        StringBuilder ret = new StringBuilder();
        return System.Text.Encoding.Default.GetString(ms.ToArray());
    }
}

********************************************************************************

群发上千封邮件,发送太快,会出现可能被服务器拒绝的情况。使用线程控制发送间隔

    protected void btn_sendMail_Click(object sender, EventArgs e)

    {
        ThreadStart mailThread = new ThreadStart(SendMail);
        Thread sendMail = new Thread(mailThread);
        sendMail.Name = "thread send mail";
        sendMail.Start();
    }

    private void SendMail()

    {
        Mails mySendMail = new Mails();
        for (int i = 0; i < lists.Count; i++)
        {
            mySendMail = new Mails("nihao",lists[i].ToString(), lists[i]);
            mySendMail.SendMail();
            if ((i + 1) % 50 == 0)
            {
                Thread.Sleep(60000);//歇一分钟再发吧。。
            }
        }
    }

*****************************************************************

Mails类

    public void SendMail()

    {
        lock (this)
        {
            Thread.Sleep(3000);
            //创建smtpclient对象
            System.Net.Mail.SmtpClient client = new SmtpClient();
            client.Host = smtp;
            client.UseDefaultCredentials = false;
            client.Credentials = new System.Net.NetworkCredential(from,pwd);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;

            //创建mailMessage对象

            System.Net.Mail.MailMessage message = new MailMessage(from,to);
            message.Subject = subject;
            message.SubjectEncoding = Encoding.UTF8;
            message.Body = body;
            message.BodyEncoding = System.Text.Encoding.UTF8;
            message.IsBodyHtml = true;

            try
            {
                client.Send(message);
                StreamWriter sw = new StreamWriter("c:/message.txt", true);
                sw.Write(this.to+"  发送成功" + "\r\n");
                sw.Close();
            }
            catch (Exception ex)
            {
                StreamWriter sw = new StreamWriter("c:/message.txt", true);
                sw.Write(this.to+"  发送失败。失败原因:"+ex.Message + "\r\n");
                sw.Close();
            }
        }
    }

转载于:https://www.cnblogs.com/iammrwu/archive/2011/11/17/2252727.html

你可能感兴趣的文章
web项目中全局常量的添加
查看>>
搬运工程 启动!
查看>>
局部加权回归(LWR) Matlab模板
查看>>
Connect to the DSP on C6A8168/DM8168/DM8148 using CCS
查看>>
hibernate在使用getCurrentSession时提示no session found for current thread
查看>>
【Luogu1471】方差(线段树)
查看>>
DEV中svg图标的使用
查看>>
Codefroces Gym101572 I.Import Spaghetti-有向图跑最小环输出路径(Floyd)
查看>>
有关位运算的操作+二进制状态压缩
查看>>
Eclipse插件 -- 阿里巴巴扫描编码规插件
查看>>
(1.1)学习笔记之mysql体系结构(内存、进程、线程)
查看>>
markdown测试
查看>>
Java-Maven-Runoob:Maven 依赖管理
查看>>
杂项-Log:log4net
查看>>
杂项-Java:EL表达式
查看>>
tarroni music
查看>>
unity 使用RotateAround的使用注意
查看>>
[SDOI2009]HH的项链
查看>>
CodeFirst模式,容易引发数据迁移问题(不建议使用)
查看>>
jquery的colorbox关闭并传递数据到父窗
查看>>