Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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)
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
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.
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-mailOlá Ivan,
Não estou conseguindo instanciar o objeto abaixo:
var smtpClient = new SmtpClient
Qual namespace devo importar?
System.Net.Mail.SmtpClient
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
Você modificou estes e-maisl corretos?
Dim cred As New System.Net.NetworkCredential("email@hotmail.com", "senha")Dim destinatario As String = "email@live.com"
>
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.
Altera as configs do SMTP para :
Host: smtp.live.com
Porta: 25
Usa SSL: SIM
>
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.
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)
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).
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.
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.