Atualizando código legado de System.Web.Mail para System.Net.Mail no Visual Studio 2005:Problemas no envio de e-mail

StackOverflow https://stackoverflow.com/questions/52321

Pergunta

Usar o obsoleto System.Web.Mail para enviar e-mail funciona bem, aqui está o trecho de código:

 Public Shared Sub send(ByVal recipent As String, ByVal from As String, ByVal subject As String, ByVal body As String)
        Try
            Dim Message As System.Web.Mail.MailMessage = New System.Web.Mail.MailMessage
            Message.To = recipent
            Message.From = from
            Message.Subject = subject
            Message.Body = body
            Message.BodyFormat = MailFormat.Html
            Try
                SmtpMail.SmtpServer = MAIL_SERVER
                SmtpMail.Send(Message)
            Catch ehttp As System.Web.HttpException
                critical_error("Email sending failed, reason: " + ehttp.ToString)
            End Try
        Catch e As System.Exception
            critical_error(e, "send() in Util_Email")
        End Try
    End Sub

e aqui está a versão atualizada:

Dim mailMessage As New System.Net.Mail.MailMessage()

        mailMessage.From = New System.Net.Mail.MailAddress(from)
        mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))

        mailMessage.Subject = subject
        mailMessage.Body = body

        mailMessage.IsBodyHtml = True
        mailMessage.Priority = System.Net.Mail.MailPriority.Normal

        Try

            Dim smtp As New Net.Mail.SmtpClient(MAIL_SERVER)
            smtp.Send(mailMessage)

        Catch ex As Exception

            MsgBox(ex.ToString)

        End Try

Eu tentei muitas variações diferentes e nada parece funcionar, tenho a sensação de que pode ter a ver com o SmtpClient. Há algo que mudou no código subjacente entre essas versões?

Não há exceções que sejam rejeitadas.

Foi útil?

Solução

Testei seu código e meu e-mail foi enviado com sucesso.Supondo que você esteja usando os mesmos parâmetros para o código antigo, sugiro que seu servidor de e-mail (MAIL_SERVER) esteja aceitando a mensagem e haja um atraso no processamento ou considere-a spam e a descarte.

Eu sugeriria enviar uma mensagem usando uma terceira via (telnet, se você estiver com coragem) e ver se funciona.

EDITAR:Observo (na sua resposta subsequente) que especificar a porta ajudou um pouco.Você não disse se está usando a porta 25 (SMTP) ou a porta 587 (Envio) ou outra coisa.Se você ainda não estiver fazendo isso, usar a porta de sumissão também pode ajudar a resolver seu problema.

Wikipédia e rfc4409 tem mais detalhes.

Outras dicas

A biblioteca System.Net.Mail usa os arquivos de configuração para armazenar as configurações, então você só precisa adicionar uma seção como esta

  <system.net>
    <mailSettings>
      <smtp from="test@foo.com">
        <network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="true" />
      </smtp>
    </mailSettings>
  </system.net>

Você já tentou adicionar

smtp.UseDefaultCredentials = True 

antes do envio?

Além disso, o que acontece se você tentar alterar:

mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))

para isso:

mailMessage.From = New System.Net.Mail.MailAddress(from,recipent)

-Kevin Fairchild

Você está configurando as credenciais do e-mail?

smtp.Credentials = New Net.NetworkCredential("xyz@gmail.com", "password")

Eu tive esse erro, mas acredito que gerou uma exceção.

Tudo o que você está fazendo está correto.Aqui estão as coisas que eu verificaria.

  1. Verifique novamente se o serviço SMTP no IIS está funcionando corretamente.
  2. Certifique-se de que não esteja sendo sinalizado como spam.

esses geralmente são os maiores culpados sempre que tivemos problemas com o envio de e-mail.

Além disso, notei que você está fazendo MsgBox (ex.Message).Acredito que eles impediram que o MessageBox funcionasse no asp.net em um service pack, então pode haver um erro, talvez você não saiba.verifique seu log de eventos.

Adicionei o número da porta do servidor de e-mail e começou a funcionar esporadicamente, parece que foi um problema no servidor e atraso no envio das mensagens.Obrigado por suas respostas, todas foram úteis!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top