Inquiridor
Enviar e-mail em lote. Como dar pausa no loop?

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 emaildestinomeuservidorsmtp = "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 mensagememaildestino = 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 = cdoConfigcdoMessage.BodyPart.Charset = "iso-8859-1"
cdoMessage.From = emailorigem
cdoMessage.Bcc = emaildestino
cdoMessage.Subject = Request("assunto")
strBody = Request("recado")strBody = strBody
cdoMessage.HTMLBody = strBodycdoMessage.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 Selectfunction 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"> </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>
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á. *** -
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" -
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
- Sugerido como Resposta Eduardo Perotta de Almeida quinta-feira, 18 de agosto de 2011 04:44