Jump to content

Archived

This topic is now archived and is closed to further replies.

Reinaldo

 Newsletter

Recommended Posts

Tenho esse script para envio de e-mail pra os clientes da empresa em lotes de 50 email por minuto de adordo com o servidor.

O prblema é o seguinte:

1 - o primeiro lote é envido corretamente,porem do segundo em diante as mensagens chegam sem titulo e sem conteúdo.

2 - aqui nesse ponto acontece o erro interno de servidor

 

 

if Mailer.SendMail then

 

Response.Write x & "-" varnome

 

else

Response.Write "Falhou o envio."

end if

 

Mas se retirar ele continua num loop sem parar.

 

bem se poderem me ajudar nessa mais uma vez agradeço.

Abaixo codigo completo:

 

<%
''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:\"



HTML = HTML & "<html>" 
HTML = HTML & "<head>" 
HTML = HTML & "<title>Agalma Psicanalise e editora</title>" 
HTML = HTML & "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>" 
HTML = HTML & "</head>" 
HTML = HTML & "" 
HTML = HTML & "<bgcolor='#ffffff' text='#ffffff'>" 
HTML = HTML & " "& Request.Form("titulo") &"<br>" 
HTML = HTML & " "& Request.Form("conteudo") &"" 
HTML = HTML & "</body>" 
HTML = HTML & "</html>" 


stringSQL="select id,nome,email,enviado from teste where enviado=0"
set registros = conexao.execute(stringSQL) 

if registros.eof then 

conexao.Execute("update teste set enviado=0") 


%> 

<font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="000000">Newsletter Enviada !!! 
</font></b></font> 

<% 
else 

x = 0 

while x < 7 and not registros.eof 

x = x + 1 


id = registros("id") 
vartitulo=Request.Form("titulo")
varnome = registros("Nome") 
email = registros("email")


Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
Mailer.ContentType = "text/html"
Mailer.RemoteHost = "localhost"
Mailer.FromName = "Empresa"
Mailer.FromAddress = "emailempresa"
Mailer.AddRecipient "[www.empresa.com.br]", registros("email")
Mailer.Subject= vartitulo
Mailer.Bodytext = HTML

if Mailer.SendMail then

Response.Write  x & "-" varnome

else 
Response.Write "Falhou o envio." 
end if 

set Mailer = nothing 

varenviado = 1
sSQL="update teste set enviado=1 where id="&varenviado&""
Set rs=conexao.execute(sSQL)

registros.movenext 
wend 
%> 

<font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="000000"> 
Enviando pacotes de e-mails, aguarde... 
</font></b></font> 

<meta http-equiv='refresh' content='10'> 

<% 
registros.Close 
set registros = nothing 
end if 
Conexao.Close 
set Conexao = nothing 

%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="[url="http://www.w3.org/1999/xhtml"]http://www.w3.org/1999/xhtml[/url]">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>EMPRESA</title>
</head>

<body>

</body>
</html>

Share this post


Link to post
Share on other sites

você está dando refresh está perdendo os dados, coloque um redirect para a mesma o página chamando essa função dentro de um IF, assim ele vai fazer corretamente!

Share this post


Link to post
Share on other sites

Não enteni muito bem sua explicação.

O refresh realmete faz com que as informações se percam, mas vou colocar o redirect de que forma?

além disso tem o erro que aparece

if Mailer.SendMail then

Response.Write x & "-" varnome---> exatemente aki <---- acontece um erro.

else 
Response.Write "Falhou o envio." 
end if

 

você está dando refresh está perdendo os dados, coloque um redirect para a mesma o página chamando essa função dentro de um IF, assim ele vai fazer corretamente!

Share this post


Link to post
Share on other sites

Ao invés de utilizar Request.Form, utilize apenas Request, ou então informe o método Get no formulário e utilize Request.QueryString.

 

Na tag de REFRESH, você deve informar a url e passar os parâmetros novamente nela.

Share this post


Link to post
Share on other sites

Olá meu amigo.

fiz o refresh dessa forma:

<%
Response.AddHeader "Refresh","10; URL=Email_massa.asp?titulo='"&vartitulo&"&conteudo='"&varconteudo&""
%>

veja bem esse erro continua:

Falhou o envio.Falhou o envio.Falhou o envio. Enviando pacotes de e-mails, aguarde...

porem os e-mails são enviando.

e no final da lista tb mostra isso:

 

Falhou o envio.Falhou o envio. error '80040211' /gerenciamento/Email_massa.asp, line 68

 

Essa é a lkilnha que se refere o erro.

 

 

if cdoMessage.Send then

 

Response.Write x & "- " & p_nome

 

else

 

Response.Write "Falhou o envio."

end if

 

 

Share this post


Link to post
Share on other sites

Você não criou a variável varconteudo.

 

Antes de enviar faça o teste com apenas um e-mail para ver se está instalado e funcionando o componente. Verifique se os e-mails estão corretos.

 

Troque if cdoMessage.Send then por On Erro Resume Next ... melhor verificar se há erro dessa forma.

Share this post


Link to post
Share on other sites

hargon meu caro obrigado pela ajuda, parece que agora está tudo ok.

Segue o codigo sem erros.

<% 

vartitulo=Request.Querystring("titulo")
varconteudo=Request.Querystring("conteudo")


HTML = HTML & "<html>" 
HTML = HTML & "<head>" 
HTML = HTML & "<title>Factae Faculade de Tecnologia e Ciências</title>" 
HTML = HTML & "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>" 
HTML = HTML & "</head>" 
HTML = HTML & "" 
HTML = HTML & "<bgcolor='#ffffff' text='#ffffff'>" 
HTML = HTML & " "& vartitulo &"<br>" 
HTML = HTML & " "& varconteudo &"" 
HTML = HTML & "</body>" 
HTML = HTML & "</html>" 

 

stringSQL="select ID,enviado,email,nome from teste where enviado=0" 
set registros = conexao.execute(stringSQL) 

if registros.eof then 

conexao.Execute("update teste set enviado=0") 
%> 

<font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="000000">Newsletter Enviada !!! 
</font></b></font> 

<% 
else 

x = 0 

while x < 3 and not registros.eof 

x = x + 1 

id = registros("ID") 
p_nome = registros("nome") 
varemail = registros("email") 
varremetente = "[email="contato@factae.edu.br"]contato@factae.edu.br[/email]"


sch = "[url="http://schemas.microsoft.com/cdo/configuration/"]http://schemas.microsoft.com/cdo/configuration/[/url]"
Set cdoConfig = Server.CreateObject("CDO.Configuration")
cdoConfig.Fields.Item(sch & "sendusing") = 2
cdoConfig.Fields.Item(sch & "smtpauthenticate") = 1
cdoConfig.Fields.Item(sch & "smtpserver") = "smtp.factae.edu.br"
cdoConfig.Fields.Item(sch & "smtpserverport") = 25
cdoConfig.Fields.Item(sch & "smtpconnectiontimeout") = 30
cdoConfig.Fields.Item(sch & "sendusername") = "[email="contato@factae.edu.br"]contato@factae.edu.br[/email]" [email=""]'conta@seu_dominio[/email]
cdoConfig.Fields.Item(sch & "sendpassword") = "123456"
cdoConfig.fields.update
Set cdoMessage = Server.CreateObject("CDO.Message")
Set cdoMessage.Configuration = cdoConfig

cdoMessage.From = varremetente
cdoMessage.To = varemail 
cdoMessage.Subject = "News Factae" 
cdoMessage.HTMLBody = HTML 


On Error Resume Next

cdoMessage.Send 

if Err <> 0 Then
Response.Write "Foi encontrado um erro (" & Err.Description & ")."
Response.End
End if

 

sSQL="update teste set enviado=1 where id=" & id &""
set str=conexao.execute(sSQL)

registros.movenext 
wend

Set cdoMessage = Nothing 
Set cdoConfig = Nothing
%> 

<font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="000000"> 
Enviando pacotes de e-mails, aguarde... 
</font></b></font> 

<%
Response.AddHeader "Refresh","10; URL=Email_massa.asp?titulo='"&vartitulo&"&conteudo='"&varconteudo&""
%>

<% 

registros.Close 
set registros = nothing 
end if 

Conexao.Close 
set Conexao = nothing 

%>

Share this post


Link to post
Share on other sites

Caro amigo, percebi uma falha após ter achado que estava tudo ok,

veja só quando aumento o numero de e-mail por bloco o que está acontecendo é que para cada conta está sendo enviado a quantidade total.

x = 0

 

while x < 40 and not registros.eof

 

x = x + 1

 

o primeiro email recebe 40 vezes a mesma mensagem e assim por diante.

 

o que deve ser?

 

 

 

Bacana Reinaldo. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Share this post


Link to post
Share on other sites

tem que mudar o registro tambem e nao so o contador

Share this post


Link to post
Share on other sites

Mudar o registro como, não entendi pode me dar um exemplo?

 

grato.

 

 

tem que mudar o registro tambem e nao so o contador

Share this post


Link to post
Share on other sites

o que disse foi que se esta mandando para o mesmo voce nao est mudando o registro que recupera o email a ser enviado

 

retirei o resolvido do topico para o povo ajudar mais

Share this post


Link to post
Share on other sites

Olá Mário,

O que está acontecendo é o seguinte:

 

 

x = 0

 

while x < 10 and not registros.eof

 

x = x + 1

 

então para cada email cadastrado é enviado 10 mensagens, ou seja, o numero que for colocado while x < 10 é enviado x vezs para cada email cadastrado no banco.

 

E realmente não sei como resolver.

 

mais uma vez grato a todos.

 

 

o que disse foi que se esta mandando para o mesmo voce nao est mudando o registro que recupera o email a ser enviado

 

retirei o resolvido do topico para o povo ajudar mais

Share this post


Link to post
Share on other sites

e é isso que quer?

 

se nao for tira este contador

 

ainda nao consegui entender exatamente o que quer

Share this post


Link to post
Share on other sites

Você terá que paginar os registros e informar o numero da pagina no AddHeader.

 

Pesquise aqui no Fórum, tem vários exemplos de paginação.

Share this post


Link to post
Share on other sites

Valeu pessoal pela ajuda, estou fazendo alguns teste aki, se der tudo certo avisarei de novo para fechar o topico.

abraços!

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.