Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Reinaldo

E-mail em massa

Recommended Posts

Boa tarde!

Gostaria de uma ajuda com o codigo abaixo, o que acontece é que só posso enviar 50 emails por hora e em grupos de no maximo 20 emails, mas o conteudo se perde no loop e apenas os primeiros 20 emails chegam corretos, eu pego o valor do conteudo via form e envio pra a pagina que processa o envio com o codigo abaixo.

O que pode ser feito pra resolver esse problema?.

grato a todos.

 

CODE
Response.Buffer = True

 

'Declara as variaveis a serem usadas neste script

Dim pagina_atual, total_paginas, ComandoSQL, objRS, objRS_atualiza, Conexao, status_envio

 

'Numero de registros por pagina (emails a serem enviados, neste caso, 10 por vez)

Const registros_por_pagina = 10

 

'Verifica o numero da pagina de registros a ser consultada

If Request.QueryString("pagina_atual") = "" Or Request.QueryString("pagina_atual") = "0" Then

pagina_atual = 1

Else

pagina_atual = Request("pagina_atual")

End If

 

'Cria conexao com o banco de dados, informe corretamente o caminho do banco de dados

Set Conexao = Server.CreateObject("ADODB.Connection")

Conexao.Open "Data Source=E:\vhosts\dominio.com.br\httpdocs\empresa\db\banco.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"

 

'Captura o email dos registros da tabela pela ordem alfabética

ComandoSQL = "SELECT email FROM teste"

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.CursorLocation = 3

objRS.CursorType = 2

objRS.LockType = 1

objRS.CacheSize = registros_por_pagina

objRS.Open ComandoSQL, Conexao,,, &H0001

objRS.PageSize = registros_por_pagina

status = ""

 

If Not objRS.EOF Then

 

'Informa o numero da pagina a ser utilizada

objRS.AbsolutePage = pagina_atual

 

'Captura o numero total de paginas criadas

total_paginas = objRS.PageCount

 

'Calcula o percentual de emails enviados até o momento

status_envio = status_envio & Fix((pagina_atual*100)/total_paginas) & "% enviado<br>"

session("assunto")=request.Form("assunto")

session("titulo")=request.Form("titulo")

 

'Para mensagem em HTML utilize sempre este bloco no inicio da mensagem a ser enviada

HTML = HTML & "<html>"

HTML = HTML & "<head>"

HTML = HTML & "<title>ÁGALMA PSICANÁLISE E EDITORA LTDA.</title>"

HTML = HTML & "</head>"

HTML = HTML & "<body bgcolor="& chr(34) &"#FFFFFF"& chr(34) &" text="& chr(34) &"#000000"& chr(34) &">"

HTML = HTML & "<center><img src=""http://www.agalma.com.br/agalma/imagem/logo.jpg""></center><br>"

'HTML = HTML & "<center>" & session("titulo") & "</center>"

HTML = HTML & "" &session("assunto") &" <BR><BR>"

HTML = HTML & "<FONT FACE=VERDANA SIZE=1>"

HTML = HTML & "ÁGALMA PSICANÁLISE EDITORA LTDA.<BR>"

HTML = HTML & "AV.Garibaldi Centro Médico Empresarial bloco B Sala 401 Salvador - Ba </strong>"

HTML= HTML & "<br>Cep: 40.170-130 - Garibaldi<br>"

HTML = HTML & "Telefones: (0xx) 71 3332-8776 Fax:(0xx) 71 3245-7883   <br>"

HTML= HTML & "<a href=""http://www.agalma.com.br"">www.agalma.com.br</a><br><br>"

'HTML = HTML & "Caso não deseje continuar recebendo informações via e-mail acerca dos nossos lançamentos, clique em:<A HREF=http://www.agalma.com.br/agalma/adm/delete.asp?email="& objRs("email")&" >Deletar</a><BR>"

HTML = HTML & "</FONT>"

HTML = HTML & "<BR></body>"

HTML = HTML & "</html>"

'Percorre todos os registros da pagina atual para capturar os email a serem enviados a newsletter

For Cont = 1 to objRS.PageSize

 

 

'Envia a mensagem para o email do registro atual

 

Set objMail = Server.CreateObject("SMTPsvg.Mailer")

objMail.FromName = "Editora Ágalma"

objMail.FromAddress= "agalma@agalma.com.br"

objMail.RemoteHost = "localhost"

objMail.AddRecipient "[www.agalma.com.br]",objRS("email")

objMail.Subject = session("titulo")

objMail.ContentType = "text/html"

objMail.BodyText = HTML

objMail.SendMail

'Vai para o proximo registro da pagina

objRS.MoveNext

If objRS.EOF Then Exit For

Next

 

%>

 

<html>

<head>

<title>Newsletter</title>

</head>

<body>

 

<p>

<%

If Int(pagina_atual) < Int(total_paginas) Then

 

'Informa o status do envio da newsletter

Response.Write status_envio

 

'Codigo JavaScript para atualizar a pagina e enviar os proximos emails, neste caso, a cada 5 segundos

%>

 

<br>

Aguarde o envio da newsletter...

 

<script LANGUAGE="JavaScript">

<!--

function atualiza(){

document.location.href = "<%=Request.ServerVariables("SCRIPT_NAME")%>?pagina_atual=<%=pagina_atual+1%>"

}

setTimeout("atualiza()",5000);

//-->

</SCRIPT>

 

<%

Else

 

'Informa que o envio da newsletter foi concluido

%>

 

Envio da Newsletter concluido.

 

<%

End If

End If

%>

</p>

<p><a href="newsletter.asp">voltar</a></p>

</body>

</html>

 

<%

'Fecha a conexao com o banco de dados

objRS.Close

Conexao.Close

 

'Elimina as variaveis da memória do servidor

Set pagina_atual = Nothing

Set total_paginas = Nothing

Set ComandoSQL = Nothing

Set objRS = Nothing

Set objRS_atualiza = Nothing

Set Conexao = Nothing

Set status_envio = Nothing

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce pode marcar no DB os que ferem sendo enviados para nao correr o risco de repetir

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão é que após o loop as mensagens chegam em branco, vai uma para cada e-mail normamente mas se eu dividir em pacotes de 20 por exemplo os primeiros 20 chegam complestos os demais cchegam sem mensagem alguma.

Voce pode marcar no DB os que ferem sendo enviados para nao correr o risco de repetir

Compartilhar este post


Link para o post
Compartilhar em outros sites

apos o loop manda para a pagina inicial a que manda corretamente 20

 

So qeu como voce marcou que ja mandou os 20 estes nao entrarão na lista denovo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi sua explicação, se eu volto para a pagina inicial teria que postar de novo o form? o objetivo e deixar que isso seja feito automaticamente.

apos o loop manda para a pagina inicial a que manda corretamente 20

 

So qeu como voce marcou que ja mandou os 20 estes nao entrarão na lista denovo

Compartilhar este post


Link para o post
Compartilhar em outros sites

claro qeu nao precisa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Mário,

Você pode me dar um exemplo mais pratico, ainda não compreendi sua explicação.

claro qeu nao precisa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basicamente voce criar uma pagina que envie os seus 20 emails

 

So qeu a cada envio marca no DB que para aquele email ja foi enviado, isso ocorrerá 20 vezes

 

No final recireciona para a mesma pagina que enviará outros 20 soq eu como marcou que os outros foram enviados ela passará a enviar para os proximos

 

Assim até acabar ou até o seu servidor te bloquear por praticas de span

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Mario,

Se poder dê uma vista nesse codigo, estou tentando da forma que você indicou mas tem erro porque no loop as mensagens chegam vazias e no final da erro ineterno de servidor e ta,bem não pega todos os e-mails, ele marca os enviados ma pula varios emails, na verdade ele esta pulando de acoro a variavel=Const registros_por_pagina = 2.

 

<%
Response.Buffer= true
Server.ScriptTimeout = 999999

titulo=request.Form("titulo")
assunto = request.Form("assunto")

session("titulo")= titulo
session("assunto") = assunto

'Declara as variaveis a serem usadas neste script
Dim pagina_atual, total_paginas, ComandoSQL, objRS, objRS_atualiza, Conexao, status_envio

'Numero de registros por pagina (emails a serem enviados, neste caso, 10 por vez)
Const registros_por_pagina = 2

'Verifica o numero da pagina de registros a ser consultada
If Request.QueryString("pagina_atual") = "" Or Request.QueryString("pagina_atual") = "0" Then
pagina_atual = 1
Else
pagina_atual = Request("pagina_atual")
End If

'Cria conexao com o banco de dados, informe corretamente o caminho do banco de dados
Set Conexao = Server.CreateObject("ADODB.Connection")
Conexao.Open "Data Source=E:\vhosts\xxxx.com.br\httpdocs\xxxx\db\xxx.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"

'=================GRAVAR CONTEUDO================================

sql="INSERT INTO tbl_conteudo(titulo,conteudo)values('"&titulo&"','"& assunto &"')"
conexao.execute(sql)
'---------------------RECORDSET PEGA CONTEUDO----------------------
Set objRsBody = Server.CreateObject("ADODB.RecordSet")
sqlBody="SELECT titulo,conteudo FROM tbl_conteudo WHERE conteudo= '"& assunto &"'"
objRsBody=conexao.execute(sqlBody)

'------------------Captura o email dos registros da tabela pela ordem alfabética
ComandoSQL = "SELECT * FROM teste WHERE Enviado = 0"
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.CursorLocation = 3
objRS.CursorType = 3
objRS.LockType = 1
objRS.CacheSize = registros_por_pagina
objRS.Open ComandoSQL, Conexao,,, &H0001
objRS.PageSize = registros_por_pagina
status = ""

If Not objRS.EOF Then
'Informa o numero da pagina a ser utilizada
objRS.AbsolutePage = pagina_atual

'Captura o numero total de paginas criadas
total_paginas = objRS.PageCount

'Calcula o percentual de emails enviados até o momento
status_envio = status_envio & Fix((pagina_atual*100)/total_paginas) & "% enviado<br>"
session("Body")=request.Form("assunto")
session("titulo")=request.Form("titulo")

'Para mensagem em HTML utilize sempre este bloco no inicio da mensagem a ser enviada
HTML = HTML & "<html>" 
HTML = HTML & "<head>" 
HTML = HTML & "<title>ÁGALMA PSICANÁLISE E EDITORA LTDA.</title>" 
HTML = HTML & "</head>" 
HTML = HTML & "<body bgcolor="& chr(34) &"#FFFFFF"& chr(34) &" text="& chr(34) &"#000000"& chr(34) &">" 
HTML = HTML & "<center><img src=""http://www.agalma.com.br/agalma/imagem/logo.jpg""></center><br>"
'HTML = HTML & "<center>" & session("titulo") & "</center>"
HTML = HTML & " "& assunto &"  <BR><BR>" 
HTML = HTML & "<FONT FACE=VERDANA SIZE=1>"
HTML = HTML & "ÁGALMA PSICANÁLISE EDITORA LTDA.<BR>" 
HTML = HTML & "AV.Garibaldi Centro Médico Empresarial bloco B Sala 401 Salvador - Ba </strong>" 
HTML=  HTML & "<br>Cep: 40.170-130 - Garibaldi<br>" 
HTML = HTML & "Telefones: (0xx) 71 3332-8776 Fax:(0xx) 71 3245-7883   <br>"
HTML= HTML  & "<a href=""http://www.xxx.com.br"">www.xxx.com.br</a><br><br>"
'HTML = HTML & "Caso não deseje continuar recebendo informações via e-mail acerca dos nossos lançamentos, clique em:<A HREF=http://www.agalma.com.br/agalma/adm/delete.asp?email="& objRs("email")&" >Deletar</a><BR>"
HTML = HTML & "</FONT>"
HTML = HTML & "<BR></body>" 
HTML = HTML & "</html>"

'Percorre todos os registros da pagina atual para capturar os email a serem enviados a newsletter
For Cont = 1 to objRS.PageSize
'Envia a mensagem para o email do registro atual

Set objMail = Server.CreateObject("SMTPsvg.Mailer")
objMail.FromName   = "Editora Ágalma"
objMail.FromAddress= "xxxx@xxxxxx.com.br"
objMail.RemoteHost = "localhost"
objMail.AddRecipient "[www.xxxxxxx.com.br]",objRS("email")
objMail.Subject	= titulo
objMail.ContentType = "text/html" 
objMail.BodyText   =  HTML
objMail.SendMail 
'Vai para o proximo registro da pagina
objRS.MoveNext
If objRS.EOF Then Exit For
Next



'-------------------------MARCA  E-MAIL COMO ENVIADO -------------------------------------------------------------
vSqlUpdate = "UPDATE teste SET Enviado = 1 WHERE id="&objRS("id")&""
Conexao.Execute(vSqlUpdate)

%>

<html>
<head>
<title>Newsletter</title>
</head>
<body>

<p>
  <%
If Int(pagina_atual) < Int(total_paginas) Then

'Informa o status do envio da newsletter
Response.Write status_envio

'Codigo JavaScript para atualizar a pagina e enviar os proximos emails, neste caso, a cada 5 segundos
%>

  <br>
  Aguarde o envio da newsletter...
  

<script LANGUAGE="JavaScript">
<!--
function atualiza(){
document.location.href = "<%=Request.ServerVariables("SCRIPT_NAME")%>?pagina_atual=<%=pagina_atual+1%>"
}
setTimeout("atualiza()",5000);
//-->
</SCRIPT>

  <%
Else

'Informa que o envio da newsletter foi concluido
%>

Envio da Newsletter concluido.

<%
End If
End If
%>
</p>
<p><a href="newsletter.asp">voltar</a></p>
</body>
</html>

<%
'Fecha a conexao com o banco de dados
objRS.Close
Conexao.Close

'Elimina as variaveis da memória do servidor
Set pagina_atual = Nothing
Set total_paginas = Nothing
Set ComandoSQL = Nothing
Set objRS = Nothing
Set objRS_atualiza = Nothing
Set Conexao = Nothing
Set status_envio = Nothing
%>

Basicamente voce criar uma pagina que envie os seus 20 emails

 

So qeu a cada envio marca no DB que para aquele email ja foi enviado, isso ocorrerá 20 vezes

 

No final recireciona para a mesma pagina que enviará outros 20 soq eu como marcou que os outros foram enviados ela passará a enviar para os proximos

 

Assim até acabar ou até o seu servidor te bloquear por praticas de span

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.