现在我有一个问题,在asp.net中如何一次性发送一万封邮件?我们网站注册的会员有1万多个,比如元旦的时候想对所有会员发封邮件祝贺下,但是问题是现在我发送邮件用的是代码写的,所以没次都只能发个30封左右,后面的就没戏了。不知道哪位高手有方法帮我解决下这个难题。最后能给个例子我把我的代码附在下面:
String[] arrEmail = Emails.Split(',');//将所有的邮件地址放在数组arrEmail里
if (!Emails.Trim().Equals(""))
{
int temp = arrEmail.Length;
for (int i = 0; i < arrEmail.Length; i++)
{
sendEmail("", "", "", arrEmail[i], this.t_subject.Text, this.Content.Value);
}
Response.Write("<script>alert('发送完毕,你已成功发送" + temp + "封邮件!')</script>");
}
String[] arrEmail = Emails.Split(',');//将所有的邮件地址放在数组arrEmail里
if (!Emails.Trim().Equals(""))
{
int temp = arrEmail.Length;
for (int i = 0; i < arrEmail.Length; i++)
{
sendEmail("", "", "", arrEmail[i], this.t_subject.Text, this.Content.Value);
}
Response.Write("<script>alert('发送完毕,你已成功发送" + temp + "封邮件!')</script>");
}
jmail.Message jm = new jmail.Message(); jm.MailServerUserName = m_strMail_UserName;
jm.MailServerPassWord = m_strMail_Password; jm.Logging = true;
jm.Silent = true;
jm.Charset = "gb2312";
jm.Encoding = "base64";
jm.ContentTransferEncoding = "base64";
//邮件发送
try
{
#region 发送人 jm.From = strSender;
jm.FromName = strSenderName; #endregion #region 接收人,抄送,暗送
jm.Recipients.Clear(); //收件人
if (strReceiver.Trim() != "")
{
string[] strReceiverList = strReceiver.Trim().Trim(';').Trim().Split(';');
foreach (string strTempReceiver in strReceiverList)
{
jm.AddRecipient(strTempReceiver.Trim(), strTempReceiver, strTempReceiver);
}
}
//抄送
if (strCC.Trim() != "")
{
string[] strCCList = strCC.Trim().Trim(';').Trim().Split(';');
foreach (string strTempCC in strCCList)
{
jm.AddRecipientCC(strTempCC.Trim(), strTempCC, strTempCC);
}
}
//暗送
if (strBCC.Trim() != "")
{
string[] strBCCList = strBCC.Trim().Trim(';').Trim().Split(';');
foreach (string strTempBCC in strBCCList)
{
jm.AddRecipientBCC(strTempBCC.Trim(), strTempBCC);
}
} #endregion #region 邮件内容
jm.ClearAttachments(); jm.Subject = strSubject;
//HTML标记必须封闭
strBody = "<html>" + strBody + "</html>";
jm.HTMLBody = strBody; //附件
if (strAttachment.Trim() != "")
{
string[] strAttachmentList = strAttachment.Trim().Trim('|').Trim().Split('|');
ArrayList strAttachmentListResult = new ArrayList();
#region 剔除无效、重复附件 foreach (string strTempAttachment in strAttachmentList)
{
//附件不为空 且 不重复
if (strTempAttachment.Trim() != "" && !strAttachmentListResult.Contains(strTempAttachment.ToUpper().Trim()))
{
strAttachmentListResult.Add(strTempAttachment.ToUpper().Trim());
}
} #endregion foreach (string strTempAttachment in strAttachmentListResult)
{
jm.AddAttachment(strTempAttachment.Trim(), true, "application/octet-stream");
}
} #endregion #region 发送 if (jm.Send(m_strMail_Server, false))
{
//成功
}
else
{
//失败
} #endregion
}
public bool SendMail(string from ,string fromName,string subject ,string body ,
string attachmentFile1,string attachmentFile2,bool isinline,bool isHtml,string[] mailTo )
{
jmail.MessageClass MsgMail = new jmail.MessageClass();
MsgMail.Logging = true;
MsgMail.Silent = true;
MsgMail.Charset = "GB2312";
MsgMail.Encoding = "Base64";
MsgMail.ISOEncodeHeaders = false;
MsgMail.From = from;
if (fromName!=""){MsgMail.FromName = fromName;}
//加收件人
for (int i=0;i<mailTo.Length;i++)
{
string emailAddress=mailTo[i].ToString();
i++;
string MailToName=mailTo[i].ToString();
if (MailToName=="" )
{MsgMail.AddRecipient(emailAddress,null,null);}
else{MsgMail.AddRecipient(emailAddress,MailToName,null);}
}
MsgMail.Subject = subject;
MsgMail.Body = body;
// if (isHtml)
// {
MsgMail.ContentType="text/html";
// }
// else
// {
// MsgMail.ContentType="text/plain";
// }
if (attachmentFile1!="")
{
MsgMail.AddAttachment(attachmentFile1,isinline,null);//例如:text/plain表示txt文档
}
if (attachmentFile2!="")
{
MsgMail.AddAttachment(attachmentFile2,isinline,null);//例如:text/plain表示txt文档
}
MsgMail.MailServerUserName = "[email protected]"; //登录邮件服务器所需的用户名
MsgMail.MailServerPassWord = "fhquutuu" ;
if(MsgMail.Send("mail.51db.com", false))
{return true;}
else
{ return false; }
}
}
我希望是可以一万封都发完,不要出现掉了没法的现象
我知道SQL有个邮件服务
但是我不会用
public void SendMails()
...{
jmail.MessageClass MyMail = new jmail.MessageClass();
string SendTos=SendTo.Text.Trim(); //发送人
string CcTos=CcTo.Text.Trim(); //抄送人
string[] Receiver=System.Text.RegularExpressions.Regex.Split(SendTos+CcTos,","); //总收件人
string FromMail="[email protected]";//发件人
string Title="你好"; //邮件主题
string Body="附件里是重要文档,请查收!"; //邮件主体
string ShowName="ustbwuyi";//显示名字
//取email的@前面部分为用户名,即ustbwuyi1,当然也可以自己设置.
string MailUserName=FromMail.Substring(0,FromMail.IndexOf("@"));
string MailPassword="ustbwuyi";
if(SendTos!="" || CcTos!="")
...{
// 字符集
MyMail.Charset = "GB2312";
//附件的编码格式
MyMail.Encoding = "BASE64";
//是否将信头编码成iso-8859-1字符集
MyMail.ISOEncodeHeaders = false;
//发送人邮件地址
MyMail.From = FromMail;
//发送人姓名
MyMail.FromName = ShowName;
// 邮件主题
MyMail.Subject =Title;
//身份验证的用户名
MyMail.MailServerUserName = MailUserName;
//用户密码
MyMail.MailServerPassWord = MailPassword;
//邮件内容
MyMail.Body = Body;
ArrayList FileNames;
//如果存在附件
if(FileNames.Count>=1)
...{
//添加附件
string Filename;
for(int k=0;k <FileNames.Count;k++)
...{
Filename=FileNames[k].ToString();
MyMail.AddAttachment(Filename,false,HttpUtility.UrlDecode(Filename.Substring(Filename.LastIndexOf(".")+1,3)));
}
} try
...{
//循环发送
for(int i=0;i <Receiver.Length;i++)
...{
MyMail.AddRecipient(Receiver[i],"","");
MyMail.Send("Mail.rshi.cn",false);
}
}
catch(Exception ex)
...{
Response.Write("邮件发送失败,请您检查网络或物理连接");
}
}
}
供你参考参考!
163.com新的注册的全部都不支持,,,,我那个6年前注册的就可以
没用线程前是这样实现的
for(int i=0;i<aryEmail.rows.count;i++)
{
sendEmail(toWho,subject,content);
}
现在用了线程后是这样的
for(int i=0;i<aryEmail.rows.count;i++)
{
sendEmail(toWho,subject,content);
Thread.Sleep(10000);//线程休息10秒钟。
}
但是这样会不会影响程序性能?执行一定时候不执行了?