Ir para conteúdo

POWERED BY:

Arquivado

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

hugnei

Envio de mensagens via asp. componente aspmail

Recommended Posts

Bom dia Galera,,,,,,,

 

estou com problemas com aspmail nao sei mto d programacao, mas vo me virando rs, bom seguinte eu estou tentando fazer o envio de emails em massa via asp (intranet) até o momento está tudo certo eu consigo enviar os mails tenho dois codigos que fazem o trabalho, mas em cada um encontrei alguns probleminhas q ainda nao consegui resolver.

bom o primeiro codigo envia para uma conta normal, me parece q eu teria q inserir um loop e um sistema de paginacao para nao ultrapassar o meu limite de envios por dia (3mil), no outro código ele puxa todos os mails que possuo cadastrado no banco, porem na hora de enviar ele dá erro, pois são mtos mails (12mil aprox) e nao está conseguindo enviar, testei simulando com quantidade menor de mails e passou.

 

Alguem pode me ajudar!!!!1

 

 

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="Connections/grupoborin.asp" -->
<%
Set Mail = Server.CreateObject("Persits.MailSender")
Mail.Host = "MEU-HOST-SMTP"
Mail.From = "MAIL-DO-REMETENTE"
Mail.FromName = "Teste" 
Mail.AddAddress (Recirdset1.Fields.Item("email").Value), "(Recordset1.Fields.Item("cliente_varejo").Value)"
Mail.Subject = "Restrição Colcci"
Mail.Body = (Recordset1.Fields.Item("cliente_varejo").Value) & chr(13) & chr(10) & "Este é um mail teste enviado via código ASP" 'PARA ENVIO DA MENSAGEM NO FORMATO HTML, ALTERE O IsHTML PARA True
Mail.IsHTML = false
Mail.Timestamp = now()
Mail.Queue = True
Mail.Username = "MEU USUARIO PARA AUTENTICACAO"
Mail.Password = "MINHA SENHA"
Mail.Send
 
Response.write "Mensagem Enviada..."
'DESTRÓI O OBJETO
Set Mail = Nothing

%>
<%
Dim Recordset1
Dim Recordset1_cmd
Dim Recordset1_numRows

Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")
Recordset1_cmd.ActiveConnection = MM_grupoborin_STRING
Recordset1_cmd.CommandText = "select distinct a.cpf,a.[colocar para não poder receber cheque], b.cliente_varejo,b.email from clientes_com_restricao A left join clientes_varejo B on a.cpf=b.cpf_cgc where email is not null and email <> '' " 
Recordset1_cmd.Prepared = true

Set Recordset1 = Recordset1_cmd.Execute
Recordset1_numRows = 0
%>
<%
Recordset1.Close()
Set Recordset1 = Nothing
%>

Este código acima é o que eu teria que fazer o loop e a paginação. para enviar no max 2999 mails a cada 24 horas...

(Tenho varias contas com limite de 3mil mails / dia, porem para o mesmo host, todas as contas exigem autenticação,

teria como autenticar mais de uma conta, em um mesmo host???)

 

 

segundo código:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="Connections/grupoborin.asp" -->
<%
	' change to address of your own SMTP server
	strHost = "MEU HOSTsmtp"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
<!--
.style1 {	color: #FF0000;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10px;
	font-weight: bold;
}
.style2 {	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10px;
	font-weight: bold;
	color: #000000;
}
.style8 {color: #000000}
.style9 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #FF0000;}
-->
</style>
</head>

<body>
<FORM ACTION="aspmailrestricoes.asp">

  <p>Envia p/ Queue: 
	<input type="checkbox" name="Queue" checked>
	Está opção diminue a carga sobre o IIS no servidor)
	<BR>

	<INPUT TYPE=SUBMIT NAME="Send" VALUE="Enviar Email para todos os clientes.">
  </p>
  <p><span class="style1">
	<% If strErr <> "" Then %>
Erros </span><span class="style9"><span class="style8">durante o envio</span></span><span class="style1"><span class="style8">:</span>
<% = strErr %>
</span><span class="style9"><span class="style8">para conta(s):</span></span><span class="style1">
<% = Request("To") %>
<% End If %>
</span><br />
<span class="style2">
<% If bSuccess Then %>
Mensagens Enviadas corretamente
<% = Request("To") %>
.
<% End If %>
</span></p>
  <p><br />
	<%
Dim rs
Dim rs_cmd
Dim rs_numRows

Set rs_cmd = Server.CreateObject ("ADODB.Command")
rs_cmd.ActiveConnection = MM_grupoborin_STRING
rs_cmd.CommandText = "select email,cliente_varejo from clientes_varejo where email is not null and email <> ''" 
rs_cmd.Prepared = true

Set rs = rs_cmd.Execute
rs_numRows = 0

	If Request("Send") <> "" Then
		' send email to all users
		Set Mail = Server.CreateObject("Persits.MailSender")
		Mail.Host = strHost
		Mail.IsHTML = False
		Mail.From = "MAIL DO REMETENTE"
		Mail.FromName = "NOME DO REMETENTE"
		Mail.Subject = "ASSUNTO"
		'ANEXOS
								 strPath = Server.MapPath(".")
								 Mail.AddAttachment strPath & "c:\placapare.jpg"
								 Mail.AddAttachment strPath & "c:\fitapare.gif"
								 'FIM ANEXOS
		 'CORPO DA MENSAGEM
								  Mail.Body = "MENSAGEM"

							 ' INSERE EMAIL
		While not rs.EOF
			Mail.AddBcc (rs.Fields.Item("email").Value),(rs.Fields.Item("cliente_varejo").Value)
			rs.MoveNext
		Wend
		 If Request("Queue") <> "" Then
			Mail.Queue = True
		End if

		' ENVIANDO MENSAGEM
 		Mail.Username = "USUARIO"
								Mail.Password = "SENHA"
								strErr = "" 
							   bSuccess = False
								On Error Resume Next ' Pega os erros
							   Mail.Send
		 If Err <> 0 Then ' error occurred
	  strErr = Err.Description
   else
	  bSuccess = True
	End If
		Response.Write "Comando processado consulte o log para maiores informações."
	Else
		' Mostra os emails a serem enviados
		Response.Write "<B>Clientes encontrados para esta operação:</B><P>"
		While not rs.EOF
			Response.write ""
			Response.Write (rs.Fields.Item("cliente_varejo").Value) & " (" & (rs.Fields.Item("email").Value) & ")<BR>"
			rs.MoveNext
		Wend
	End If
%>
  </p>
</FORM>

</BODY>
</HTML>
</body>
</html>

<%
rs.Close()
Set rs = Nothing
%>

 

Esse código seria perfeito, porem neste tenho o problema, ele puxa os 12mil mails de uma vez e nao consegue enviar todos, teria que fazer algo, para ao clicar no botao enviar, ele processace menos mails por vez, tipow de 100 em 100 por exemplo!

pois da forma com que está pegando tudo, ocorre o seguinte erro ao enviar.

 

Tipo de erro:

Active Server Pages, ASP 0107 (0x80004005)

Os dados que estão sendo processados estão acima do limite permitido.

/estudo_asp/aspmail_maladireta.asp

 

 

Alguem pode me dar uma força?????

 

Desde já agradeçõ a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

para enviar em 100 em 100, primeiro conte quantos tem e depois você faz um if dentro do for para quando ele contar 100, envia, contar 100 envia, quando ele chegar no final do for e encontrar menos de 100, enviar tbm!

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este código que envia email em massa e paginando, pode te ajudar

 

Codigo para enviar e-mails em blocos: 

<!--#include file="conexao.asp"--> 
<% 
varNome = Session("Login") 
if varNome = "" then 
response.redirect("checerro.asp") 
end if 

dim conexao 
Call abre_conexao 

' recupera as variáveis para enviar os e-mails 
'Lembrando que antes de fazer o envio, eu fiz um formulário para a 
'pessoa poder escolher por qual filtro ele quer filtrar os e-mails 
'E também fiz com que ele pudesse escolher o arquivo a ser enviado 
'Isso utilizando o Componente de Upload ASpUpload. 

assunto = request.form("assunto") 
validade = request.form("validade") 
empresa = request.form("empresa") 
arquivo = request.form("arquivo") 
str = request.form("str") 
sql = request.form("sql") 
' Como a pausa é feita por paginação, pag é a variavel que vai dizer em qual loop está agora 

pag = request.form("pag") 
if pag = "" then 
pag = 1 
end if 
per = request.form("per") 
CodigoCampanha = request.form("CodigoCampanha") 
' reg é o nuemro de e-mails que ele irá enviar por bloco. 
reg = 400 

'Isto le o arquivo no qual foi feito o Upload 
' strpatha é um path fixo que eu tenho na pagina de include.(para facilitar o código) 
Set Objeto = CreateObject ("Scripting.FileSystemObject") 
set GV = Objeto.OpenTextFile(strpath &arquivo,1,true,false) 
HTML = GV.ReadAll 
GV.close 
Set Objeto = nothing 
lista = Replace(lista," ","") 

HTML = HTML 
HTML2 = HTML 

' A var sql, contem a SQL para de acordo com o filçtro que a pessoa escolheu 
if sql <> "" then 

' Aqui eu pego quantos e-mails seram enviados 

sqlCont = "Select Count(Email) as Cont From Emails where ("&str&") and (Ativo = true)" 
Set rsCont = conexao.execute(sqlCont) 
NumReg = rsCont("Cont") 
' Aqui iremos determinas qual é o numero maximo de blocos 
Maxpag = int(Cint(NumReg)/ Cint(reg))+1 
Set rsCont = nothing 

' Testamos se irá ter somente um bloco, se sim iremos enviar todos os e-mails de uma vez 

if Cint(NumReg) <= Cint(reg) then 
Set rs = conexao.execute(sql) 

Set rsMax = Server.CreateObject("ADODB.Recordset") 
rsMax.Open "Select Max(CodigoCampanha) As max_cod From Campanhas", conexao 
If IsNull(rsMax("max_cod")) Then 
CodigoCampanha = 100 
Else 
CodigoCampanha = rsMax("max_cod") + 1 
End If 
rsMax.Close 
Set rsMax = Nothing 

validade = date + CInt(validade) 
sqlCampanha = "Insert Into Campanhas(CodigoCampanha,CodigoEmpresa,Assunto,Arquivo,Data,Validade) Values ("&CodigoCampanha&", "&empresa&", '"&assunto&"', '"&arquivo&"', '"&Now()&"','"&validade&"')" 
Set rsCampanha = conexao.execute(sqlCampanha) 
contador = 0 
contador2 = 1 
per = 1 
per2 = 1 
%> 
<script language="JavaScript"> 
window.open('enviando.asp','enviando','width=350 height=200 status=yes'); 
</script> 
<% 
while not rs.eof 
per = (100 * Cint(contador2))/Cint(NumReg) + 1 

if Int(per) > Int(per2) then 
per2 = per 
%> 
<script> 
window.open('java script:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes'); 
</script> 
<% 
end if 
%> 
<% 

HTML = HTML2 
sqlTestEnv = "Select Email From Enviados where CodigoCampanha = "&CodigoCampanha&" and Email = '"&rs("Email")&"'" 
Set rsTestEnv = conexao.execute(sqlTestEnv) 
if rsTestEnv.EOF then 
aux = rs("Fantasia") 
If InStr(aux, " ") > 0 Then 
aux = Left(aux, InStr(aux, " ")-1 ) 
End If 
Empresa = UCase(aux) 

HTML = replace(HTML,"#Nome#",rs("Nome")) 
HTML = replace(HTML,"#CodigoCampanha#",CodigoCampanha) 
HTML = replace(HTML,"#Email#",rs("Email")) 
HTML = replace(HTML,"#Empresa#",Empresa) 

response.write HTML 
assunto2 = replace(assunto,"#Nome#",rs("Nome")) 

Dim myMail 
Set myMail = CreateObject("CDONTS.NewMail") 
myMail.From = "teste@teste.com"
myMail.To = rs("Email") 
myMail.Subject = assunto2 
myMail.BodyFormat = 0 
myMail.MailFormat = 0 
myMail.Body = HTML 
myMail.Send 
contador = contador +1 
contador2 = Cint(contador2) +1 
Set myMail = Nothing 

sqlEnviados = "Insert Into Enviados(CodigoCampanha,Email,Nome,Cargo,Fantasia,Telefone,Data) Values ("&CodigoCampanha&",'"&rs("Email")&"','"&rs("Nome")&"','"&rs("Cargo")&"','"&rs("Fantasia")&"','"&rs("Telefone")&"','"&Now()&"')" 
Set rsEnviados = conexao.execute(sqlEnviados) 
end if 
rs.MoveNext 
wend 
fim = true 
else 

' se tivermos mais de um bloco iremos ter que fazer a paginação 

Set rs = conexao.execute(sql) 
' Aqui inserimos na tabela Campanha os dados da mesma, só inserimos uma vez. 
'É por isso que tomos este if, pois a 1ª vez o Codigo será branco. 
if CodigoCampanha = "" then 
Set rsMax = Server.CreateObject("ADODB.Recordset") 
rsMax.Open "Select Max(CodigoCampanha) As max_cod From Campanhas", conexao 
If IsNull(rsMax("max_cod")) Then 
CodigoCampanha = 100 
Else 
CodigoCampanha = rsMax("max_cod") + 1 
End If 
rsMax.Close 
Set rsMax = Nothing 

validade = date + CInt(validade) 
sqlCampanha = "Insert Into Campanhas(CodigoCampanha,CodigoEmpresa,Assunto,Arquivo,Data,Validade) Values ("&CodigoCampanha&", "&empresa&", '"&assunto&"', '"&arquivo&"', '"&Now()&"','"&validade&"')" 
Set rsCampanha = conexao.execute(sqlCampanha) 
end if 
' aqui contador é o que vale a quantidade de e-mails que esta sendo enviado e-mails 
' contador 2 é um contador auxiliar para abrirmos uma pag de porcetagem do envio 
contador = ((Cint(pag) -1) * Cint(reg)) + 0 
contador2 = ((Cint(pag) -1) * Cint(reg)) + 1 
//per = 1 
//per2 = 1 
%> 
' aqui testamos se é primeira vez que executamos a página, se sim iremos abrir a pag de porcentagem 
<% 
if Cint(pag) = 1 then 
%> 
<script language="JavaScript"> 
window.open('enviando.asp','enviando','width=350 height=200 status=yes'); 
</script> 
<% 
end if 
%> 
' Aqui testamos se é a primeira vez que executamos a página, se não for nos iremos ter que passar para os próximos 400 registros da tabela 
<% 
NumReg2 = Cint(reg) * (Cint(pag)-1) 
If NumReg2 > 0 then 
For LinkTemp = 1 to NumReg2 
if rs.Eof = False then 
rs.MoveNext 
end if 
Next 
end if 

regatual = 1 
' aqui fazemos o loop da tabela de e-mails 
while not rs.eof and regatual <= Cint(reg) 
' per é uma variavel que ´rá ser envia para a página de porcentagem para mmostrar o andamento do envio 

per = (100 * Cint(contador2))/Cint(NumReg) + 1 

if Int(per) > Int(per2) then 
per2 = per 
%> 
' este script atualiza a pagina de porcentagem sempre que novos e-mails são enviados 
<script> 
window.open('java script:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes'); 
</script> 
<% 
end if 
%> 
<% 
' Aqui fazemos uns replaces no arquivo (HTML) que foi feito o Upload. 
'Isto é para podermos personalizar os e-mails 
HTML = HTML2 
sqlTestEnv = "Select Email From Enviados where CodigoCampanha = "&CodigoCampanha&" and Email = '"&rs("Email")&"'" 
Set rsTestEnv = conexao.execute(sqlTestEnv) 
if rsTestEnv.EOF then 
aux = rs("Fantasia") 
If InStr(aux, " ") > 0 Then 
aux = Left(aux, InStr(aux, " ")-1 ) 
End If 
Empresa = UCase(aux) 

HTML = replace(HTML,"#Nome#",rs("Nome")) 
HTML = replace(HTML,"#CodigoCampanha#",CodigoCampanha) 
HTML = replace(HTML,"#Email#",rs("Email")) 
HTML = replace(HTML,"#Empresa#",Empresa) 

response.write HTML 
assunto2 = replace(assunto,"#Nome#",rs("Nome")) 
' Aqui estamos enviando os e-mails em formato HTML 

Dim myMail2 
Set myMail2 = CreateObject("CDONTS.NewMail") 
myMail2.From = "teste@teste.com.br" 
myMail2.To = rs("Email") 
myMail2.Subject = assunto2 
myMail2.BodyFormat = 0 
myMail2.MailFormat = 0 
myMail2.Body = HTML 
myMail2.Send 
regatual = regatual + 1 
contador = Cint(contador) +1 
contador2 = Cint(contador2) +1 
Set myMail2 = Nothing 
' Aqui gravamos em outra tablela todos os e-mails que para onde foram enviados. Para relatórios 


sqlEnviados = "Insert Into Enviados(CodigoCampanha,Email,Nome,Cargo,Fantasia,Telefone,Data) Values ("&CodigoCampanha&",'"&rs("Email")&"','"&rs("Nome")&"','"&rs("Cargo")&"','"&rs("Fantasia")&"','"&rs("Telefone")&"','"&Now()&"')" 
Set rsEnviados = conexao.execute(sqlEnviados) 
end if 
rs.MoveNext 
wend 
end if 
'Testamos se é o ultimo loop, se sim iremos mostrar direto quantos e-mails foi enviado 
if (Cint(pag) >= Cint(Maxpag)) then 
fim = true 
else 

' Se naõ iremos fazer fim = falso para passarmos para o próximo bloco de e-mails após um tempo 
fim = false 
pag = Cint(pag) + 1 
end if 
end if 
%> 
<% 
' Aqui testamos se chegou ao fim ou n~~ao, se não chegou ainda 
'iremos fazer um formulário com todos os dados que teremos que ter 
' iremos fazer um script para enviar este formulário novamente após um tempo 
if fim = false then 
%> 
<HTML> 
<HEAD> 
<Title></Title> 
<script> 
function Envia() 
{ 
document.form.submit(); 
} 

setTimeout("Envia();",120000); 

</script> 
</HEAD> 
<BODY> 
<form name="form" method="post" action="camp3.asp"> 
<input type="hidden" name="sql" value="<%=sql%>"> 
<input type="hidden" name="assunto" value="<%=assunto%>"> 
<input type="hidden" name="arquivo" value="<%=arquivo%>"> 
<input type="hidden" name="empresa" value="<%=empresa%>"> 
<input type="hidden" name="str" value="<%=str%>"> 
<input type="hidden" name="pag" value="<%=pag%>"> 
<input type="hidden" name="codigocampanha" value="<%=CodigoCampanha%>"> 
<input type="hidden" name="per" value="<%=per%>"> 
</form> 
</BODY> 
</HTML> 
<% 
else 
' Se chegou ao fim iremos mostrar a quantidade de e-mails que foi gerada 
%> 
<html> 
<head> 
<title>Email´s</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
</head> 

<body bgcolor="#FFFFFF" text="#000000"> 
<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
<tr> 
<td> 
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>CONFIRMAÇÃO 
DO CADASTRO DE CAMPANHA</b></font></div> 
</td> 
</tr> 
<tr> 
<td> </td> 
</tr> 
<tr> 
<td> </td> 
</tr> 
<tr> 
<td> 
<table width="70%" border="0" cellspacing="0" cellpadding="0" align="center"> 
<% 
if Cint(contador) > 0 then 

sqlEmp = "Select * From Empresas where CodigoEmpresa = "&empresa&"" 
Set rsEmp = conexao.execute(sqlEmp) 

msgBody = "<HTML>" & vbcrlf 
msgBody = msgBody & "<body>" & vbcrlf 
msgBody = msgBody & "Olá " & rsEmp("Nome") &",<br><br>" & vbcrlf 
msgBody = msgBody & "A campanha com assunto : " & assunto &"<br>" & vbcrlf 
msgBody = msgBody & "Foi disparada para "&contador&" email(s) de sua lista de e-mails.<br><br>" & vbcrlf 
msgBody = msgBody & "Verifique logo abaixo o corpo do e-mail que foi disparado: <br><br> " & vbcrlf 
msgBody = msgBody & HTML2 & vbcrlf 
msgBody = msgBody & "</body>" & vbcrlf 
msgBody = msgBody & "</HTML>" & vbcrlf 

'response.write msgBody 

Dim myMail3 
Set myMail3 = CreateObject("CDONTS.NewMail") 
myMail3.From = "teste@teste.co
myMail3.To = "xan@xan.com.br"'rsEmp("Email") 
myMail3.Subject = "Comprovande do envio da campanha de Web Marketing: """ & assunto &"""" 
myMail3.BodyFormat = 0 
myMail3.MailFormat = 0 
myMail3.Body = HTML2 
myMail3.Send 
Set myMail3 = Nothing 

%> 
<tr> 
<td> 
<table width="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="#333333"> 
<tr> 
<td bgcolor="#DDFFEE"> 

<div align="center"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><br> 
<br> 
Campanha enviada com sucesso para<br> 
<%=Contador & " "%> emil(s).<br> 
<br> 
</font></div> 
</td> 
</tr> 
</table> 
</td> 
</tr> 
<% 
else 
%> 
<tr> 
<td> 

<table width="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="#333333"> 
<tr> 
<td bgcolor="#DDFFEE"> 
<div align="center"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><br> 
</font><font size="4"><font face="Verdana, Arial, Helvetica, sans-serif"><br> 
<font size="3">HÁ ALGUM CAMPO OBRIGATÓRI EM 
BRANCO<br> 
POR FAVOR REALIZE A OPERAÇÃO<br> 
NOVAMENTE!! </font></font></font><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><br> 
<br> 
</font></div> 
</td> 
</tr> 
</table> 
</td> 
</tr> 
<% 
end if 
%> 
</table> 
</td> 
</tr> 
</table> 
<br> 
<br> 
<table width="94%" border="0" cellspacing="0" cellpadding="0" align="center"> 
<tr> 
<td width="50%" height="13"> 
<div align="center"><a href="camp.asp"><font color="#003300" size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><font color="#000000"><< 
Voltar </font></b></font></a> </div> 
</td> 
<td width="50%" height="13"> 
<div align="center"><a href="checlogin2.asp"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b><font size="2"><< 
Voltar ao Menu Inicial</font></b></font></a></div> 
</td> 
</tr> 
</table> 
</body> 
</html> 
<% 
end if 
%> 
<% 
Call fecha_conexao 
Set rs = Nothing 
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

maravilha, é assim , que se faz....

e tendo dúvida...

estamos ai...

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.