群发邮件功能的完善

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

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();
            }
        }
    }

posted @ 2014-04-13 09:41  左正  阅读(274)  评论(0编辑  收藏  举报