Ir para conteúdo

Arquivado

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

Joffre Mota

[Resolvido] Formulário para envio de email

Recommended Posts

Montei um formulário com os campos Nome, Email, Assunto, Corpo do Texto. E no botão enviar coloquei o seguinte evento:

    Private Sub EnviarEmail()
       If txt_Nome.Text <> "" And txt_Email.Text <> "" And txt_Assunto.Text <> "" And txt_Corpo.Text <> "" Then
           Try
               Dim objMail As New MailMessage
               objMail.From = txt_Email.Text
               objMail.To = "email@live.com" <!-- Removi meu e-mail pois ninguém precisa saber meu email ;D -->
               objMail.Subject = txt_Assunto.Text
               objMail.Body = txt_Corpo.Text
               objMail.BodyFormat = MailFormat.Text
               SmtpMail.SmtpServer = "mail.live.com"
               SmtpMail.Send(objMail)
               Label4.Text = "Email enviado com sucesso!"
           Catch ex As Exception
               Label4.Text = ex.ToString <!-- Deixei esse campo apenas para visualizar os erros. Quando rodar beleza, vou pensar em outra forma de visualizar o erro -->
           End Try
       Else
           MsgBox("Todos os campos são obrigatórios!!!")
       End If
       LimparCampos
   End Sub

 

O erro está sendo com o servidor smtp do hotmail. Alguém sabe como consertar isso?

System.Web.HttpException (0x80004005): Falha na conexão do transporte com o servidor. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException: Falha na conexão do transporte com o servidor. --- End of inner exception stack trace --- at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) at System.Web.Mail.SmtpMail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args) at System.Web.Mail.SmtpMail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args) at System.Web.Mail.SmtpMail.CdoSysHelper.Send(MailMessage message) at System.Web.Mail.SmtpMail.Send(MailMessage message) at ASP.index_temp_aspx.EnviarEmail() in E:\Trabalho\Projetos\MeuSite\MeuSite\index_temp.aspx:line 17

 

Alguma dica de como fazer o smtp funcionar?

 

Obrigado!

 

Obs.: A linha 17 é essa:

SmtpMail.Send(objMail)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Joffre,

 

Verifique se o smtp do hotmail requer autenticação se for o caso veja o exemplo abaixo.

 

//Cria as crendenciais para autenticação no e-mail.

System.Net.NetworkCredential aCred = new System.Net.NetworkCredential("login","senha");

//Servidor e porta do smtp

SmtpClient smtp = new SmtpClient("mail.live.com", 25);

//Desabilita as crendenciais default

smtp.UseDefaultCredentials = false;

//Inclui as novas credenciais

smtp.Credentials = aCred;

Mais detalhes sobre o namespace System.Net.Mail você pode encontrar neste link http://www.systemnetmail.com.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que ja vi o serviço d email mail requer uma conexão segura e também que tenha uma conta autenticada para poder enviar.

Da uma lida em http://www.emailarchitect.net/easendmail/kb/vbnet.aspx?cat=4

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelas respostas, mas ainda não obtive sucesso.

 

Joffre,

 

Verifique se o smtp do hotmail requer autenticação se for o caso veja o exemplo abaixo.

 

//Cria as crendenciais para autenticação no e-mail.

System.Net.NetworkCredential aCred = new System.Net.NetworkCredential("login","senha");

//Servidor e porta do smtp

SmtpClient smtp = new SmtpClient("mail.live.com", 25);

//Desabilita as crendenciais default

smtp.UseDefaultCredentials = false;

//Inclui as novas credenciais

smtp.Credentials = aCred;

Mais detalhes sobre o namespace System.Net.Mail você pode encontrar neste link http://www.systemnetmail.com.

 

Nesse caso, quando tento instanciar o objeto aCred:

System.Net.NetworkCredential aCred = New System.net.NetworkCredential("login@live.com", "senha")

 

O primeiro System.Net.NetworkCredential fica sublinhado e com os seguintes dizeres:

'NetworkCredential' is a type in 'Net' and cannot be used as an expression.

 

O aCred também fica sublinhado:

Method arguments must be enclosed in parentheses.

 

Preciso fazer algum import?

Não sei é o correto, mas meu Dim objMail As New MailMessage está sendo declarado instanciando um objeto da classe System.Web.Mail!

 

 

Pelo que ja vi o serviço d email mail requer uma conexão segura e também que tenha uma conta autenticada para poder enviar.

Da uma lida em http://www.emailarchitect.net/easendmail/kb/vbnet.aspx?cat=4

 

Nesse caso aqui, eu não consegui acompanhar o que o cara lá está ensinando. Não consegui importar o tal do EASendMail. De todas as formas que tento, fala que não existe métodos públicos ou não existe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta isso, lembrando que está em C#:


//instancia o objeto e já seta o remetente da mensagem
           var objEmail = new MailMessage { From = new MailAddress("remetente@email.com") };
           objEmail.To.Add("destinatario@email.com"); //seta o destinaátio do E-mail
           objEmail.Priority = MailPriority.Normal; //prioridade do E-mail
           objEmail.IsBodyHtml = true; //informa se o corpo do e-mail pode ser html
           objEmail.Subject = "assunto"; //assunto da mensagem
           objEmail.Body = "mensagem"; //corpo da mensagem
           //Para evitar problemas de caracteres "estranhos", configuramos o charset para "UTF-8"
           objEmail.SubjectEncoding = Encoding.GetEncoding("UTF-8");
           objEmail.BodyEncoding = Encoding.GetEncoding("UTF-8");


           var smtpClient = new SmtpClient("smtp.gmail.com", 465) { EnableSsl = true }; //cria objeto com os dados do SMTP
           var credenciais = new NetworkCredential("email@gmail.com", "senha");

           smtpClient.Credentials = credenciais;

           smtpClient.Send(objEmail); //Dispara o e-mail

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua não dando certo.

Aqui está meu código completo desde o início até o final da Sub EnviarEmail(), e mais abaixo está o erro.

 

Será que é por estar usando o smtp 'live.com' e o email de login no servidor ser '@hotmail.com'?

 

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="index_temp_tab.aspx.vb" Inherits="MeuSite.index_temp_tab" %>
<%@ Import Namespace="System.Net.Mail" %>
<%@ Import Namespace="System.Net.Mail.SmtpClient" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
   Private Sub EnviarEmail()
       Dim objEmail As New MailMessage
       Dim cred As New System.Net.NetworkCredential("email@hotmail.com", "senha")
       Dim smtpC As New System.Net.Mail.SmtpClient("mail.live.com", 465)

       Dim destinatario As String = "email@live.com"
       Dim assunto As String = ddl_Assunto.Text
       Dim corpo As String = txt_Corpo.Text
       objEmail.IsBodyHtml = False

       If txt_Corpo.Text <> "" And txt_Email.Text <> "" And txt_Nome.Text <> "" And ddl_Assunto.SelectedIndex <> 0 Then
           Try
               Label4.Text = "Acessando o servidor..."
               smtpC.Credentials = cred
               Label4.Text = "Enviando a mensagem..."
               'Envia o e-mail
               smtpC.Send(txt_Email.Text, destinatario, assunto, corpo)
               Label4.Text = "Mensagem enviada com sucesso!"
           Catch ex As Exception
               Label4.Text = "Falha no envio de sua mensagem!"
               Label5.Text = ex.ToString
           End Try
       End If
   End Sub
</script>

 

O erro:

System.Net.Mail.SmtpException: Failure sending mail. ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: Nenhuma conexão pôde ser feita porque a máquina de destino as recusou ativamente 64.4.56.183:465 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) --- End of inner exception stack trace --- at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6, Int32 timeout) at System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32 timeout, GeneralAsyncDelegate asyncCallback) at System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback) at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout) at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint) at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) at System.Net.Mail.SmtpClient.GetConnection() at System.Net.Mail.SmtpClient.Send(MailMessage message) --- End of inner exception stack trace --- at System.Net.Mail.SmtpClient.Send(MailMessage message) at System.Net.Mail.SmtpClient.Send(String from, String recipients, String subject, String body) at ASP.paginas_index_temp_tab_aspx.EnviarEmail() in E:\Trabalho\Projetos\MeuSite\MeuSite\Paginas\index_temp_tab.aspx:line 27

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você modificou estes e-maisl corretos?

 

Dim cred As New System.Net.NetworkCredential("email@hotmail.com", "senha")Dim destinatario As String = "email@live.com"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você modificou estes e-maisl corretos?

 

Dim cred As New System.Net.NetworkCredential("email@hotmail.com", "senha")Dim destinatario As String = "email@live.com"

 

Sim.

No cred, estou colocando um e-mail secundário (pois a senha vai ficar aparecendo ali). No destinatário estou colocando meu e-mail pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Altera as configs do SMTP para :

Host: smtp.live.com

Porta: 25

Usa SSL: SIM

 

SmtpClient alterado da forma que você pediu:

Dim smtpC As New System.Net.Mail.SmtpClient("smtp.live.com", 25)
EnableSsl = True

 

Mas dá a seguinte exceção ao habilitar SSL (EnableSsl fica sublinhado em azul):

Reference to a non-shared member requires an object reference.

Compartilhar este post


Link para o post
Compartilhar em outros sites

usei uma ferramenta de conversão de código de C# para VB, veja como ficou:

 

Dim objEmail = New MailMessage() With { _
Key .From = New MailAddress("remetente@email.com") _
}
objEmail.[To].Add("destinatario@email.com")
objEmail.Priority = MailPriority.Normal
objEmail.IsBodyHtml = True
objEmail.Subject = "assunto"
objEmail.Body = "mensagem"
objEmail.SubjectEncoding = Encoding.GetEncoding("UTF-8")
objEmail.BodyEncoding = Encoding.GetEncoding("UTF-8")

Dim smtpClient = New SmtpClient("smtp.live.com", 25) With { _
Key .EnableSsl = True _
}
Dim credenciais = New NetworkCredential("email@gmail.com", "senha")

smtpClient.Credentials = credenciais

smtpClient.Send(objEmail)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo. Era erro de sintaxe apenas. Muito obrigado!

 

Segue código em VB:

    Private Sub EnviarEmail()
       Dim objEmail As New MailMessage() With {
           .From = New MailAddress(txt_Email.Text)
       }
       'Email e senha válidos para fazer logon no SmtpClient
       Dim cred As New System.Net.NetworkCredential("email@hotmail.com", "senha")
       'Stmp com configuração para contas do Hotmail | Live | MSN
       Dim smtpC As New System.Net.Mail.SmtpClient("smtp.live.com", 25) With {
           .EnableSsl = True
       }
       'Colocar aqui o endereço de e-mail que receberá os e-mails do formulário
       Dim destinatario As String = "nome@dominio.com"
       Dim assunto As String = ddl_Assunto.Text
       Dim corpo As String = txt_Corpo.Text
       objEmail.IsBodyHtml = False

       If txt_Corpo.Text <> "" And txt_Email.Text <> "" And txt_Nome.Text <> "" And ddl_Assunto.SelectedIndex <> 0 Then
           Try
               'Confere as credenciais e faz logon no server
               smtpC.Credentials = cred
               'Envia o e-mail
               smtpC.Send(txt_Email.Text, destinatario, assunto, corpo)
               Label4.Text = "Mensagem enviada com sucesso!"
           Catch ex As Exception
               Label4.Text = "Falha no envio de sua mensagem!"
               Label5.Text = ex.ToString
           End Try
       Else
           Label4.Text = "Todos os campos são obrigatórios!"
       End If
   End Sub

 

Novamente, obrigado Ivan! (acho que vou aparecer muito ainda aqui por estar estudando ASP agora).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tranquilo, na verdade você não esta estudando ASP e sim VB.NET junto com ASP.NET que no caso o ASP.NET representa que você esta estudando pra web.

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.