Shopping Hospedagem Fórum Contato
     
   O portal do desenvolvedor ASP Florianópolis-SC, Terça-feira - 25 de Setembro de 2018  
Busca

Menu do site
Efetuar Login
Usuário:

Senha:

 Esqueceu a senha?
Login automático

 Cadastre-se
Newsletter com paginação: Enviando email em massa
Avaliações: 22   -   Minha nota: Média Geral: 10  

Vamos neste artigo aprender a enviar email em massa utilizando o recurso de paginação.

Digamos que temos uma base de dados com inúmeros emails cadastrados, e precisamos enviar um email para todos. As chamadas newsletter.
Quando essa lista conter muitos email e formos enviar a newsletter, o servidor pode sobrecarregar e as mensagens poderão não serem enviadas corretamente, ou até mesmo, nem serem enviadas.

Portanto, iremos utilizar o recurso de paginação, muito usado para exibir dados de um banco de dados, para enviarmos um determinado numero de email por vez, dando assim tempo para que o servidor possa enviar todos os emails corretamente.


Veja abaixo o código completo, todo comentado:

<%
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=d:\www\vhosts\superasp\superasp\web\email.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"

'Captura o email dos registros da tabela pela ordem alfabética
ComandoSQL = "SELECT email FROM tabela ORDER BY email ASC"
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>"

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

'Para mensagem em HTML utilize sempre este bloco no inicio da mensagem a ser enviada
Mensagem = ""
Mensagem = Mensagem &"<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>"
Mensagem = Mensagem & "<HTML><HEAD>"
Mensagem = Mensagem & "<META content='text/html; charset=iso-8859-1' http-equiv=Content-Type>"
Mensagem = Mensagem & "<META content='MSHTML 5.00.2614.3500' name=GENERATOR></HEAD>"
Mensagem = Mensagem & "<BODY leftmargin=0 rightmargin=0 bottommargin=0 topmargin=0>"

'Informa a mensagem a ser enviada, neste caso, ela pode conter codigo HTML
Mensagem = Mensagem & "<FONT face=Arial size=2>Ola,<br><b>Tudo bem contigo?</b></FONT>"

'Para mensagem em HTML utilize sempre este bloco no final da mensagem a ser enviada
Mensagem = Mensagem & "</BOBY>"
Mensagem = Mensagem & "</HTML>"

'Envia a mensagem para o email do registro atual
Set ObjMail = Server.CreateObject("CDONTS.NewMail")


'Informa o email atual a ser enviado
ObjMail.to = objRS("email")

'Informa o email do remetente, o titulo do email e outras configurações
ObjMail.from = "seu_email@servidor.com.br"
ObjMail.subject = "Novidades"
ObjMail.Importance = 1
ObjMail.BodyFormat = 0
ObjMail.MailFormat = 0

'Informa o texto da mensagem
ObjMail.body = Mensagem

'Envia o email
ObjMail.send

'Elimina variavel da memória

Set ObjMail = nothing

'Vai para o proximo registro da pagina
objRS.MoveNext
If objRS.EOF Then Exit For
Next

%>

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

<%
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
%>

</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
%>

Não esqueça de informar corretamente os dados grifados na cor laranja.

Espero que este exemplo lhe seja útil.

Fabiano Dias
fabiano@superasp.com.br

www.superasp.com.br
O portal do desenvolvedor ASP




SuperASP do Brasil Ltda

03.066.522/0001-84
Av. Rio Branco 433 - Centro - Florianopolis - SC
Contato

© 2001/2008 - Superasp do Brasil Ltda. Todos os direitos reservados