none
Enviar e-mail em lote. Como dar pausa no loop? RRS feed

  • Pergunta

  • Pessoal, estou utilizando este script para enviar e-mails com Cdonts. Gostaria de enviar por lote, 500 em 500.
    como posso fazer isso no loop?

    <%
    response.buffer = true
    Server.ScriptTimeout = 999999999
    %>


    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <style type="text/css">
    <!--
    .Texto {font-family: Arial; font-weight: bold; color: #990000; text-align: right; font-size: 14px;}
    .total {font-size: 16px; color: #900; font-weight: bolder; background-color: #E4F1F1; font-family: Tahoma;height: 20px;}
    -->
    </style>

    </head>
    <body>
    <%
    dsn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\inetpub\wwwroot\News.mdb"
    %>


    <%

    v_situacao = ""
    useraction=Request.QueryString("acao")
    Select Case useraction
        Case "upload"
             
      'Aqui vai o código do upload   
      
    v_situacao = ""
        Case "email"
            lista = emails()
            if len(lista) > 0 then


    sch = "http://schemas.microsoft.com/cdo/configuration/"
    Set cdoConfig = Server.CreateObject("CDO.Configuration")


    Dim meuservidorsmtp
    Dim minhacontaautenticada
    Dim minhasenhaparaenvio
    Dim emailorigem
    Dim emaildestino

    meuservidorsmtp = "smtp.gmail.com" ' Informacoes so seu servidor SMTP
    minhacontaautenticada = "imprennsa@gmail.com" ' conta de e-mail utilizada para enviar
    minhasenhaparaenvio = "teste" ' senha da conta de e-mail
    emailorigem = Trim(Request.Form("nomerem")) & "<" & Trim(Request.Form("emailrem")) & ">"' e-mail que indica de onde partiu a mensagem

    emaildestino = lista & ";"

    cdoConfig.Fields.Item(sch & "sendusing") = 2
    cdoConfig.Fields.Item(sch & "smtpauthenticate") = 1
    cdoConfig.Fields.Item(sch & "smtpserver") = meuservidorsmtp
    cdoConfig.Fields.Item(sch & "smtpserverport") = 25
    cdoConfig.Fields.Item(sch & "smtpconnectiontimeout") = 30
    cdoConfig.Fields.Item(sch & "smtpusessl") = True
    cdoConfig.Fields.Item(sch & "sendusername") = minhacontaautenticada
    cdoConfig.Fields.Item(sch & "sendpassword") = minhasenhaparaenvio
    cdoConfig.fields.update
    Set cdoMessage = Server.CreateObject("CDO.Message")
    Set cdoMessage.Configuration = cdoConfig

    cdoMessage.BodyPart.Charset = "iso-8859-1"
    cdoMessage.From = emailorigem
    cdoMessage.Bcc = emaildestino
    cdoMessage.Subject =  Request("assunto")
    strBody = Request("recado")

    strBody = strBody
    cdoMessage.HTMLBody = strBody

    cdoMessage.Send

    Set cdoMessage = Nothing
    Set cdoConfig = Nothing


    Session("Arquivo") = ""
                Response.Write "<script>alert('E-mail enviado com Sucesso!')</script>"
                %>
               <br>Redirecionando...</i><br><meta http-equiv="refresh" content="1;URL=Index.asp" />
             <%
      else
             response.write "<script>alert('A lista de emails no banco de dados está vazia, favor verificar');</script>"
                %>
             <br>Redirecionando...</i><br><meta http-equiv="refresh" content="1;URL=Index.asp" />
             <%
                Session("Arquivo") = ""
            end if
    End Select

    function emails()


    Set Conn = Server.CreateObject("ADODB.Connection")
    Set Rs = Server.CreateObject("ADODB.Recordset")
    Conn.Open dsn
    SQL = "SELECT Email from NewsLatter order by id"
    rs.Open SQL, Conn, 1, 3
     do while not rs.eof
      str = str & rs("email") &";"
      rs.movenext
     Loop
     emails = str
     on error resume next
    end function

    %>


    <div align="center">
      <form method="post" enctype="multpart/formdata" name="form1" action="?acao=email" onSubmit="return submitit()">
      <table width="60%" border="0" cellspacing="2" cellpadding="2">
    <tr>
    <td width="15%" class="Texto">Nome:</td>
    <td width="85%"><input name="nomerem" type="text" value="" size="80"></td>
    </tr>
    <tr>
    <td width="15%" class="Texto">E-mail:</td>
    <td width="85%">
    <input name="emailrem" type="text" value="" size="80">
    </font></td>
    </tr>
    <tr>
    <td width="15%" class="Texto">Assunto:</td>
    <td width="85%">
    <input name="assunto" type="text" value="" size="80">
    </font></td>
    </tr>
    <tr>
      <td width="15%" class="Texto">&nbsp;</td>
      <td width="85%">
      <textarea name="recado" rows="15" cols="64"></textarea>
      </td>
    </tr>
    <tr class="Texto">
    <td colspan="2">
    <div align="center">
    <input type="submit" name="Submit" value="Enviar">
    </div>
    </td>
    </tr>
    </table>
    </form>

    </div>
    </body>
    </html>

    domingo, 20 de março de 2011 05:33

Todas as Respostas

  • Markinhos, não há como pausar o loop, porém você cirar um contador e quando atingir 500, você cria um outro loop que faz uma contagem por exemplo 1 a 100000 ou um número qualquer que de o tempo necessário para você continuar o envio, quando terminar este loop zera o contador e continuar no outro loop.

    Concordo que não é muito performático, mas não lembro de ter outra solução.

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    segunda-feira, 21 de março de 2011 03:18
  • Amigo,

    Utilize o conceito de paginação, ex:
    http://imasters.com.br/artigo/1287/asp/paginacao_sem_misterios/

    Se ainda estiver com dúvida posta ai.

    Boa sorte. 


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"
    quarta-feira, 23 de março de 2011 00:38
  • Eu utilizaria paginacao e javascript, onde o javascript se encarregaria de enviar N emails por cada pacote. Usando o javascript, poderemos usar funcoes setinterval e setimeout
    sábado, 16 de julho de 2011 07:23