我是来学习的 ....同意,shalen520,只是个人也没有 Message Queue 的实战经验 ....

解决方案 »

  1.   

    后台脚本.你的页面执行时.向数据库(或者Windows 的消息队列)里插入待发邮件的记录.
    可能一次插入上万条.(但这种做法,不太科学)如果一次太多的话.我的流程是这样的.设计一个数据表.表为
    待群发记录编号
    邮件模板
    待收用户组
    添加时间
    截止时间(失效时间)
    备注表2 
    待发邮件记录编号
    邮件内容
    收件人地址
    SMTP 服务器池
    后台两脚本.
    1 脚本  
    从表1中读取记录(分段)
     再组合邮件内容分段插入表2 (SMTP服务器池为可选项)2 脚本(可以一次跑多个)
     从表2中读取待发记录
     发送邮件(发送后.删除读取的记录)总之, 这样的批量操作.一定是后台做队列脚本处理.
      

  2.   


    那就弄个webservice ,把准备发送的邮件地址,内容。smpt等信息传给service就不用管了。webservice接收到后先存到数据库,然后从上往下,发一封,删一条记录。
      

  3.   

    Thread.Spleed 不是更慢吗,呵呵在Application_Init 时,初始化一个Threading.Timer 然后定时的发关邮件就可以了 HttpModule or Gloas文件里写
      

  4.   

    这样的功能最好是做一个服务,或者是winform的小程序实现,IE做长时间的计算或者操作会响应失败的
      

  5.   

    如果不使用thread.sleep()的方式去发送,极有可能被当成垃圾邮件如果你仅仅是发邮件,不考虑收不收到的问题,还可以使用多线程发
      

  6.   

    Web中发送邮件都是在服务器上面另开一个线程或者服务来操作的你先把要发的放如数据库中,然后后台进程每1秒钟检查数据库优点:
    前端线程不阻塞
    发送失败可以再次发送缺点
    至于不能及时得到发送结果
    就是即时发送也得到是伪结果 所以基本可以忽略
      

  7.   

    另外如果是采用SMTP认证,使用别人的邮箱去发,这个一般有限制的,一天最多只能发几百封而已,包括你买的企业邮局,如果是采用自建的邮件服务器,极有可能被当成垃圾邮件处理,这是我们现在碰到的问题
      

  8.   

    写个winform程序运行起来..开几百个线程一起发就行了....
      

  9.   

    代码用控制台程序做,再放到windows任务里定时运行。foreach(DataRow u in UserTable.Rows)
    {
       body = 用户信息和广告;
       SendEmail(u["Email"].ToString(),title,body.ToString());   System.Threading.Thread.Sleep(2000);// 暂停2秒
    }
      

  10.   

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> 
    <% Server.ScriptTimeOut=9999999 
    Response.Buffer = True dim FoundErr, ErrMsg, Action 
    dim MailServerUserName, MailServerPassWord, MailDomain, MailServer 
    dim MailtoAddress, MailtoName, Subject, MailBody, FromName, MailFrom, Priority FoundErr = False 
    ErrMsg = "" 
    Action = Trim(Request("action")) 
    ComeUrl = "" 
    %> 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
    <HTML> 
    <HEAD> 
    <TITLE>群发邮件系统</TITLE> 
    <META http-equiv=Content-Type content="text/html; charset=gb2312"> 
    <META content="Microsoft FrontPage 4.0" Name=GENERATOR> 
    <STYLE type=text/css> 
    a {text-decoration: none;} /* 链接无下划线,有为underline */ 
    a:link {color: #000000;text-decoration: none;} /* 未访问的链接 */ 
    a:visited {color: #000000;text-decoration: none;} /* 已访问的链接 */ 
    a:hover {color: #ff6600;text-decoration: none;} /* 鼠标在链接上 */ 
    a:active {color: #000000;text-decoration: none;} /* 点击激活链接 */ 
    TD { 
    FONT-SIZE: 18px; COLOR: #000000; FONT-FAMILY: '宋体';LINE-HEIGHT: 150%; 

    BODY { 
    FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: '宋体' 

    INPUT { 
    FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: '宋体' 

    SELECT { 
    FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: '宋体' 

    .title 

    background:#0DB432; 
    color: #ffffff; 
    font-weight: normal; 

    .border 

    border: 1px solid #0DB432; 

    .tdbg{ 
    background:#f0f0f0; 
    line-height: 120%; 

    .tdbg1{ 
    background:#A3E2B1; 
    line-height: 120%; 

    </STYLE> 
    </HEAD> <BODY text=#000000 bgColor=#ffffff leftMargin=0 topMargin=0> 
    <br> 
    <% 
    Select Case Action 
    Case "send" 
    Call sendMail() 
    Case Else 
    Call Main() 
    End Select 
    If FoundErr = True Then 
    Response.Write WriteErrMsg(ErrMsg, ComeUrl,"错误信息") 
    End If 
    Response.write"</BODY></HTML>" sub main() If Not IsObjInstalled("JMail.Message") Then 
    FoundErr=True 
    ErrMsg = "服务器不支持JMail组件,请正确安装" 
    Exit Sub 
    End If 
    %> 
    <form action="wssf.asp?Action=send" method=post> 
    <table width="80%" class="border" border="0" cellspacing="1" cellpadding="4" align="center" height="589"> 
    <tr> 
    <td height="40" colspan="2" align="center" class="title"> 
    <p><b> 群发邮件系统</b></p> </td> 
    </tr> 
    <tr> 
    <td width='30%' class='tdbg1' height="25"><strong>邮件服务器地址:</strong> </td> 
    <td class='tdbg' height="25"> 
    <input name='MailServer' type='text' id='MailServer' value='smtp.163.com' size='40'> <FONT color=#ff0000>*</FONT> 
    </td> 
    </tr> 
    <tr> 
    <td width='30%' class='tdbg1' height="25"><strong>登录用户名一:</strong> 
    </td> 
    <td class='tdbg' height="25"> 
    <input name='MailServerUserName1' type='text' id='MailServerUserName1' value='XXX' size='40'> <FONT color=#ff0000>*</FONT> 
    </td> 
    </tr> 
    <tr> 
    <td width='30%' class='tdbg1' height="25"><strong>登录密码一:</strong> 
    </td> 
    <td class='tdbg' height="25"> 
    <input name='MailServerPassWord1' type='password' id='MailServerPassWord1' value='***' size='40'> <FONT color=#ff0000>*</FONT> 
    </td> 
    </tr> <tr> 
    <td width="30%" class="tdbg1" height="25">您的姓名:</td> 
    <td class="tdbg" height="25"><input name="name" type=text id="name" size=30> 
    <FONT color=#ff0000>*</FONT></td> 
    </tr> 
    <tr> 
    <td width="30%" class="tdbg1" height="25">您的E-mail:</td> 
    <td class="tdbg" height="25"><input name="email" type=text id="email" value="[email protected]" size=30> 
    <FONT color=#ff0000>*</FONT></td> 
    </tr> 
    <tr> 
    <td width="30%" class="tdbg1" height="25">收件人姓名:</td> 
    <td class="tdbg" height="25"><input name="toname" type=text id="toname" size=30> 
    <FONT color=#ff0000>*</FONT></td> 
    </tr> 
    <tr> 
    <td width="30%" class="tdbg1" height="25">收件人Email:</td> 
    <td class="tdbg" height="25"><input name="toemail" type="text" id="toemail" size="30" maxlength="100"> 
    <FONT color=#ff0000>*</FONT></td> 
    </tr> 
    <tr> 
    <td width="30%" class="tdbg1" height="25">邮件标题:</td> 
    <td class="tdbg" height="25"><input type=text name="topic" size=30> 
    <FONT color=#ff0000>*</FONT></td> 
    </tr> 
    <tr> 
    <td width="30%" class="tdbg1" height="500">邮件内容:</td> 
    <td class="tdbg" height="500"><textarea name="body" cols=74 rows=34 id="body"></textarea> 
    <FONT color=#ff0000>*</FONT></td> 
    </tr> 
    <tr> 
    <td width="30%" class="tdbg" height="27"></td> 
    <td height=27 class="tdbg"> 
    <input type="Submit" value="发送邮件" name="Submit"> 
      
    <input type="reset" name="Clear" value="重新填写"> 
    </td> 
    </tr> 
    </table> 
    </form> 
    <% 
    End Sub 
      

  11.   

    Sub sendMail() 
    MailServer = trim(Request("MailServer")) 'SMTP服务器地址:smtp.163.com, 请修改 
    MailServerUserName = trim(Request("MailServerUserName")) 'SMTP登录用户名:[email protected], 请修改 
    MailServerPassWord = trim(Request("MailServerPassWord")) 'SMTP登录密码:***, 请修改,注意大小写 
    MailDomain = trim(Request("MailDomain")) 'SMTP域名:163.com, 请修改 FromName = trim(Request("name")) '发件人名字 
    MailFrom = trim(Request("email")) '发件人邮箱 
    MailtoName = trim(Request("toname")) '发件人名字 
    MailtoAddress=trim(Request("toemail")) '收件人邮箱 
    Subject = trim(Request("topic")) 
    MailBody = trim(Request("body")) 
    Priority=3 
    If FromName="" or MailFrom="" or MailtoName="" or Subject="" or MailBody="" then 
    FoundErr = True 
    ErrMsg = "请填写完整每一项信息!" 
    Exit Sub 
    End If 
    ErrMsg = JSendMail() 
    If ErrMsg<>"" Then 
    FoundErr = True 
    Exit Sub 
    Else 
    Response.Write WriteErrMsg("", ComeUrl,"成功信息") 
    End If 
    End Sub Function JSendMail() 
    On Error Resume Next 
    JSendMail = "" 
    Dim JMail,tempMessage 
    Set JMail = Server.CreateObject("JMail.Message") 
    JMail.silent=true 
    JMail.Logging = True JMail.Charset = "gb2312" '邮件编码 
    JMail.silent = True 
    JMail.ContentType = "text/html" '邮件正文格式 
    JMail.ServerAddress=MailServer '用来发送邮件的SMTP服务器 
    '如果服务器需要SMTP身份验证则还需指定以下参数 
    JMail.MailServerUserName = MailServerUserName1 '登录用户名 
    JMail.MailServerPassWord = MailServerPassWord1 '登录密码 JMail.AddRecipient MailtoAddress, MailtoName '收信人 
    JMail.Subject = Subject '主题 
    JMail.HtmlBody = MailBody '邮件正文(HTML格式) 
    JMail.Body = MailBody '邮件正文(纯文本格式) 
    JMail.FromName = FromName '发信人姓名 
    JMail.From = MailFrom '发信人Email 
    JMail.Priority = Priority '邮件等级,1为加急,3为普通,5为低级 
    Dim emailArray 
    If MailtoAddress="" then 
    set fsObj = Server.CreateObject("Scripting.FileSystemObject") 
    FilePath = Server.MapPath("email.txt") 
    set txtsObj = fsObj.OpenTextFile(FilePath, 1, false) 
    i = 0 
    Do While Not txtsObj.atEndOfStream 
    emailArray(i)=txtsObj.ReadLine 
    JMail.AddRecipient Trim(emailArray(i)),MailtoName 
    i=i+1 
    loop 
    Else 
    JMail.AddRecipient MailtoAddress, MailtoName 
    End If 
    JMail.Send (MailServer) 
    tempMessage = JMail.ErrorMessage 
    JMail.Close 
    Set JMail = Nothing 
    If tempMessage<>"" then 
    FoundErr = True 
    JSendMail = tempMessage 
    end if 
    Set JMail = Nothing 
    End Function Function IsObjInstalled(strClassString) 
    On Error Resume Next 
    IsObjInstalled = False 
    Err = 0 
    Dim xTestObj 
    Set xTestObj = CreateObject(strClassString) 
    If Err.Number = 0 Then IsObjInstalled = True 
    Set xTestObj = Nothing 
    Err = 0 
    End Function 
    Function WriteErrMsg(sMsg, sComeUrl,Massages) 
    Dim strMsg 
    strMsg = strMsg & "<html><head><title>"&Massages&"</title><meta http-equiv='Content-Type' content='text/html; charset=gb2312'>" & vbCrLf 
    strMsg = strMsg & "</head><body><br><br>" & vbCrLf 
    strMsg = strMsg & "<table cellpadding=2 cellspacing=1 border=0 width=400 class='border' align=center>" & vbCrLf 
    strMsg = strMsg & " <tr align='center' class='title'><td height='22'><strong>"&Massages&"</strong></td></tr>" & vbCrLf 
    if FoundErr=True Then 
    strMsg = strMsg & " <tr class='tdbg'><td height='100' valign='top'><b>产生错误的可能原因:</b>" & sMsg & "</td></tr>" & vbCrLf 
    Else 
    strMsg = strMsg & " <tr class='tdbg'><td height='100' valign='top'><br><b>恭喜,成功用JMail发送邮件!</b>" & sMsg & "</td></tr>" & vbCrLf 
    End If 
    strMsg = strMsg & " <tr align='center' class='tdbg'><td>" 
    If sComeUrl <> "" Then 
    strMsg = strMsg & "<a href='javascript:history.go(-1)'><< 返回上一页</a>" 
    Else 
    strMsg = strMsg & "<a href='javascript:window.close();'>【关闭】</a>" 
    End If 
    strMsg = strMsg & "</td></tr>" & vbCrLf 
    strMsg = strMsg & "</table>" & vbCrLf 
    strMsg = strMsg & "</body></html>" & vbCrLf 
    WriteErrMsg = strMsg 
    End Function 
    %>
      

  12.   

    消息队列,webservice处理~~
    长见识了~~~~
      

  13.   

    sql job + sql mail
      

  14.   

    如果用户很多,需要发邮件的频率不高的话,建议使用sql job + sql mail;
    如果需要发邮件的频率很高的话,建议使用windows service;
      

  15.   

    接上:可以给这个C/S程序单独设计一个邮件发送列表,相当于任务的方式,将要发送的邮件插入到这个表中,C/S程序自动从该表中抽取记录进行发送
      

  16.   

    楼主可以专门做个C/S的程序用来发邮件,采用多线程的方式,应该效率会提高很多,可以给这个C/S程序单独设计一个邮件发送列表,相当于任务的方式,将要发送的邮件插入到这个表中,C/S程序自动从该表中抽取记录进行发送
      

  17.   


    觉得这个方法好 
    只要把邮件信息传给webservice,剩下的你就可以不用管了,完全交给webservice来完成发送
      

  18.   

    学习了 好思路了。
    最近也在弄这个 碰到很多问题了
    主要是成功率和运行的时间
    还有JMAIL 的封IP 封邮箱的机智问题了。很头痛了。
      

  19.   

    C#操作MSMQ(消息队列)