Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal
Tenho um bd em access com 17.000 e-mails para envio de mala direta.
Tenho um sisteminha de news q funciona perfeitamente.
Eu tava fazendo assim: dividia o bd por 1.000, ou seja, fiquei com 17 bds, com 1.000 e-mails cada. Então bastava trocar no asp o nome do bd e tava resolvido.
Mas eu queria fazer de uma forma automática, usando apenas o bd q tem os 17.000 e q o asp fosse mandando aos poucos.
Como fazer isso??
Pode ser feito por paginação normal de RecordSet, havia até um exemplo aqui no fórum, utilizando paginação e MetaRefresh para que o sistema parasse de enviar durante um tempo e logo após retomasse do ponto onde parou, mas a página deve ficar aberta durante todo o periodo.
A quantidade de envios depende única e exclusivamente da performance/disponibilidade do servidor que irá fazer o envio. Alguns Hosts limitam a quantidade de envio por hora/dia, com isso você cria o script com base nisso.
Legal, o servidor é o Terra. Vou checar com eles e volto a postar aqui. Obrigada!!
Pois é pessoal, chequei com o Terra: cada e-mail deve possuir 99 destinatários, acima desse número é
considerado SPAM, o intervalo entre às mensagens pode ser de 20 segundos.
Alguma me ajuda?? Não faço a mínima idéia de como estipular isso.
No sub-fórum laboratório de scripts você vai achar alguns exemplos sobre paginação.
No sub-fórum laboratório de scripts você vai achar alguns exemplos sobre paginação.
Olá pessoal
Consegui adaptar um script de paginação. Funcionava perfeito, porém, se durante o envio ele encontra no banco algum e-mail inválido, retornava erro.
Consegui resolver parcialmente colocando: On Error Resume Next.
Acontece q isso só funciona na pg1, ou seja, suponhamos q ele estava enviando os primeiros 99 e-mail e no meio desses, passou por 1 inválido. Qdo ele vai pra pg 2, ele não envia mais ao encontrar outro inválido, então penso q tenho q estipular esse comando On Error Resume Next para todas as pgs. Só q fiquei 2 dias em cima disso e ainda não consegui resolver.
Me ajudem??
Aqui vai o cód:
<%
remetente = request("remetente")
Assunto = request("assunto")
conteudo = request("conteudo")
Set ObjConn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
ObjConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="& server.MapPath("dados.mdb")
SQL = "SELECT email FROM emailfoco GROUP BY email"
RS.Open SQL, ObjConn, 3, 3
If Request.QueryString("pagina") = "" Then
pagina = 1
Else
pagina = Request.QueryString("pagina")
End if
const registros = 99
RS.PageSize = registros
RS.AbsolutePage = pagina
totpaginas = RS.PageCount
totregistros = RS.RecordCount
i = 1
While NOT RS.EOF AND NOT i > registros
'cria o objeto para o envio de e-mail
Set objCDOSYSMail = Server.CreateObject("CDO.Message")
'cria o objeto para configuração do SMTP
Set objCDOSYSCon = Server.CreateObject ("CDO.Configuration")
'SMTP
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail-fwd"
'porta do SMTP
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
'porta do CDO
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'timeout
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
objCDOSYSCon.Fields.update
'atualiza a configuração do CDOSYS para o envio do e-mail
Set objCDOSYSMail.Configuration = objCDOSYSCon
'e-mail do remetente
objCDOSYSMail.From = "email@cliente.com.br"
'e-mail do destinatário
objCDOSYSMail.To = RS("email")
'assunto da mensagem
objCDOSYSMail.Subject = assunto
'conteúdo da mensagem
'objCDOSYSMail.TextBody = conteudo
'para envio da mensagem no formato html altere o TextBody para HtmlBody
objCDOSYSMail.HtmlBody = conteudo
'objCDOSYSMail.fields.update
'envia o e-mail
On Error Resume Next
objCDOSYSMail.Send
If x = true then
Session("good") = Session("good") + 1
Else
Session("bad") = Session("bad") + 1
motivo = Mailer.Response
End If
i = i + 1
RS.MoveNext
Wend
If NOT (pagina > totpaginas) Then
Response.AddHeader "Refresh", "2;URL=enviar.asp?pagina="&pagina+1
Response.Write("<strong><font face=verdana color=red>99 e-mails enviados.<BR>")
Response.Write("Aguarde, preparando script para enviar mais 99 e-mails...</font></strong>")
Else
Response.Write("<strong><font face=verdana color=red>Todos os e-mails enviados.</font></strong><BR><BR>")
Response.Write("<font face=verdana color=blue><b>Estatísticas</b></font><BR>=============================<BR>")
Response.Write("<font face=verdana color=black>E-mails enviados com sucesso: <b>"&Session("good")&"</b><BR>")
Response.Write("E-mails enviados sem sucesso: <b>"&Session("bad")&"</b><BR>")
Response.Write("Erro: <b>"&motivo&"</b><BR>--<BR>")
Response.Write("Total de e-mails no banco de dados: <b>"&totregistros&"</b></font>")
Session("good") = 0
Session("bad") = 0
Set Mailer = Nothing
Set RS = Nothing
Set ObjConn = Nothing
End If
%>
Amigo você pode estipular de 1.000 em 1.000 no asp e a cada 1.000 que ele enviar ele deleta do banco ou atualiza o registro com uma FLAG dizendo que foi enviado, assim da próxima vez que o asp por executado ele só envia para os que você determinar!...
Agora fazer ele enviar e parar é meio complicado porque o ASP é uma linguagem que trabalha por requisição se for um ASP.NET até dava pra fazer algo como um relógio e etc...
Espero ter ajudado.