Ir para conteúdo

POWERED BY:

Arquivado

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

J.Eduardo

Script de envio de email em massa System.Net.Mail

Recommended Posts

Olá pessoal, estou migrando o script da minha aplicação do namespace System.Web.Mail para o System.Net.Mail. Trata-se de um script que envia e-mails de maneira coletiva diretamente do site.

Porém, na migração, o script está retornando o seguinte erro:

 

Server Error in '/' Application.

--------------------------------------------------------------------------------

 

The specified string is not in the form required for an e-mail address

A minha dúvida é em relação a declaração do comando que causa o erro: smtpMssg.To.Add(oReader("email"))

 

Como devo proceder?

 

Desde já, agradeço a ajuda de vocês. Obrigado. Segue o código completo:

 

 

<%@ Page Language="VB" EnableSessionState=True  validateRequest="false" %>
<%@ Register TagPrefix="MeusControles" TagName="Menu" Src="~/painel/menu.ascx" %>
<%@ Register TagPrefix="MeusControles" TagName="Rodape" Src="~/painel/rodape.ascx" %>


<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.Oledb" %>
<%@ Import Namespace="System.Net.Mail" %>


<script runat="server">

sub Page_Load

dim sql,acao,sessao AS String

Dim conexao As OleDbConnection
Dim comando As OleDbCommand
Dim oReader As OleDbDataReader

conexao = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=e:\home\editorarsa\dados\AssinantesEdRSA.mdb;")
conexao.Open()

       'sessao = Request.QueryString("sessao")
       'acao   = Request.QueryString("acao")


       'if(Request.QueryString("uid") = "") then
       'Response.Redirect("http://www.editorarsa.com.br/painel/login.html")
       'end if

       'If (Request.QueryString("spr") = "") Then
       'Response.Redirect("http://www.editorarsa.com.br/painel/login.html")
       'End If

       'If (sessao = "") Then
       'Response.Redirect("http://www.editorarsa.com.br/painel/login.html")

       'ElseIf (sessao <> Session.SessionID) Then
       'Response.Redirect("http://www.editorarsa.com.br/painel/logout.aspx")

       'End If


       sql = "SELECT DISTINCT email FROM AssinantesEdRSA where  (email like '%@%')"



       If (Request.Form("enviar_para") = "A") Then
           '[A] Envia somente para os Ativos
           sql &= " and status='A' "
       ElseIf (Request.Form("enviar_para") = "I") Then
           '[i] Envia somente para os Inativos
           sql &= " and status='I' "
       Else
           '[T] - é para todos... não faz nada
       End If

       comando = New OleDbCommand(sql, conexao)
       oReader = comando.ExecuteReader()

       lblEmails.Text = ""


       While oReader.Read()

           Dim smtpMssg As New MailMessage()
           smtpMssg = New System.Net.Mail.MailMessage


           Dim SmtpClient As New SmtpClient()
           SmtpClient.Credentials = New System.Net.NetworkCredential("meuuser", "minhasenha")
           SmtpClient.Host = "smtp.editorarsa.com.br"


  		'smtpMssg.From = "webmaster@editorarsa.com.br" 
           'smtpMssg.From = "editorarsa@uol.com.br" 
           smtpMssg.From = New System.Net.Mail.MailAddress("editorarsa@editorarsa.com.br")
           [color="#FF0000"]smtpMssg.To.Add(oReader("email")) [/color]   		



           smtpMssg.Priority = MailPriority.Normal 'Normal/High/Low

           smtpMssg.IsBodyHtml = True 'Enviar em formato HTML

           smtpMssg.Subject = Request.Form("assunto")

           smtpMssg.Body = "<TABLE WIDTH=700 HEIGHT=80><TR><TD><IMG SRC='http://www.editorarsa.com.br/barra_topo_email.gif'></TD></TR><TR><TD>" & Request.Form("body") & "</TD></TR></TABLE>"
           smtpMssg.Body &= "<!-- Inicio do Rodape --><br><br><br><br><br><br><table border=1 width='100%' style='font-family: Arial; font-size: 8 pt' bordercolor=808080 cellspacing=0 cellpadding=5 bgcolor=EFEFEF><tr><td width='100%'><p align=left><b><u>Política de Privacidade</u></b><br> Você está recebendo este e-mail por estar cadastrado(a) para receber nossos informativos. Para conhecer mais sobre os serviços oferecidos pela <b>Editora RSA</b> acesse o site  <a href='http://www.editorarsa.com.br'>http://www.editorarsa.com.br</a>. Caso deseje remover seu e-mail de nossa lista responda com o assunto "Remover".</td></tr></table><!-- Fim do Rodape -->"

           SmtpClient.Send(smtpMssg)

           lblEmails.Text &= oReader("email") & "<br>"

           'Sleep para burlar bloqueio de spam
           System.Threading.Thread.Sleep(3000)

       End While

       oReader.Close()
       conexao.Close()

end sub
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pela mensagem de erro o método smtpMssg.To.Add() necessita que seja passar uma string e seu oReader("email") não é uma string, tente: smtpMssg.To.Add(oReader("email").ToString()), lembrando que para não dar erro o q vier de oReader("email") tem que ser um e-mail. ok

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pela mensagem de erro o método smtpMssg.To.Add() necessita que seja passar uma string e seu oReader("email") não é uma string, tente: smtpMssg.To.Add(oReader("email").ToString()), lembrando que para não dar erro o q vier de oReader("email") tem que ser um e-mail. ok

 

 

Olá Ivan, muito obrigado pela sua ajuda, porém agora o erro que o servidor está retornando é este:

 

Server Error in '/' Application.

--------------------------------------------------------------------------------

 

The specified string is not in the form required for an e-mail address.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

 

Exception Details: System.FormatException: The specified string is not in the form required for an e-mail address.

 

Source Error:

 

 

Line 81: 'smtpMssg.From = "editorarsa@uol.com.br"

Line 82: smtpMssg.From = New System.Net.Mail.MailAddress("editorarsa@editorarsa.com.br")

Line 83: smtpMssg.To.Add(oReader("email").ToString())

Line 84:

Line 85:

 

 

Source File: e:\home\editorarsa\Web\painel\email\email.aspx Line: 83

 

Stack Trace:

 

 

[FormatException: The specified string is not in the form required for an e-mail address.]

System.Net.Mime.MailBnfHelper.ReadMailAddress(String data, Int32& offset, String& displayName) +1142767

System.Net.Mime.MailBnfHelper.ReadMailAddress(String data, Int32& offset) +48

System.Net.Mail.MailAddressCollection.ParseValue(String addresses) +38

System.Net.Mail.MailAddressCollection.Add(String addresses) +56

ASP.painel_email_email_aspx.Page_Load() in e:\home\editorarsa\Web\painel\email\email.aspx:83

System.Web.Util.CalliHelper.ArglessFunctionCaller(IntPtr fp, Object o) +8

System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +8680579

System.Web.UI.Control.OnLoad(EventArgs e) +99

System.Web.UI.Control.LoadRecursive() +50

System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

 

O form da aplicação agrupa todos os endereços em uma mesma caixa de texto, linha a linha. Será que isso pode ser o problema? Antes quando não tinha a necessidade de autenticação do servidor smtp, era utilizada a classe system.web.mail, depois da migração para a system.net o sistema parou de funcionar.

 

Mais uma vez, obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pela mensagem de erro o resultado de oReader("email").ToString() o resultado não é um e-mail válido.O método smtpMssg.To.Add("umUnicoEmail") so aceita um único email, se tem vários você deve adicionar um a um.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Ivan, realmente deu certo, o banco de dados estava sem a string correta para o script funcionar. Agora, surgiu o problema do servidor somente aceitar 100 emails por hora para o envio. Para a mudança para outro email de envio smtp, no tempo de execução do script, para que sejam enviados 100 emails usando cada caixa postal, é possível implementar no código?

 

Desde já, muito obrigado mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só para isso você terá que utilizar thread ou Time do JS para poder enviar certas quantidades de email de hora em hora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Ivan, eu estou utilizando o System.Threading.Thread.Sleep(45000) para atrasar a execução do script a cada 45 segundos dentro de uma hora, para que sejam enviadas por hora 80 mensagens. Porém no meio da execução a página que roda o script cai e o restante das mensagens nao são enviadas.

 

O método que estou utilizando está correto, ou isso já depende do smtp do meu servidor que não está suportando este script?

 

Obs: Vários destinatários são emails que nao existem mais,isso prejudica também?

 

Estou filtrando esses emails extintos do bd para nao sobrecarregar o server.

 

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só, quanto a e-mail inexistentes, o smtp vai tentar enviar e retornará um Mail Delivery.

Quanto ao Thread, debuga para ver o que esta ocorrendo? o por que a página cai, e verifica o erro que esta acontecendo.

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.