Обновление устаревшего кода с System.Web.Mail на System.Net.Mail в Visual Studio 2005:Проблемы с отправкой электронной почты

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

Вопрос

Использование устаревшего System.Web.Mail для отправки электронной почты работает нормально, вот фрагмент кода:

 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

и вот обновленная версия:

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

Я пробовал много разных вариантов, и, кажется, ничего не работает. У меня такое ощущение, что это может быть связано с SmtpClient, изменилось ли что-то в базовом коде между этими версиями?

Нет исключений, которые отбрасываются назад.

Это было полезно?

Решение

Я проверил ваш код, и мое письмо успешно отправлено.Предполагая, что вы используете те же параметры для старого кода, я бы предположил, что ваш почтовый сервер (MAIL_SERVER) принимает сообщение и имеет задержку в обработке или считает его спамом и отбрасывает его.

Я бы предложил отправить сообщение третьим способом (через Telnet, если вы чувствуете себя смелым) и посмотреть, удастся ли это.

РЕДАКТИРОВАТЬ:Я отмечаю (из вашего последующего ответа), что указание порта несколько помогло.Вы не сказали, используете ли вы порт 25 (SMTP), порт 587 (отправка) или что-то еще.Если вы еще этого не делаете, использование порта ввода также может помочь решить вашу проблему.

Википедия и rfc4409 есть более подробная информация.

Другие советы

Библиотека System.Net.Mail использует файлы конфигурации для хранения настроек, поэтому вам может потребоваться просто добавить такой раздел.

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

Вы пробовали добавить

smtp.UseDefaultCredentials = True 

перед отправкой?

Кроме того, что произойдет, если вы попытаетесь изменить:

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

к этому:

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

-- Кевин Фэйрчайлд

Вы устанавливаете учетные данные для электронной почты?

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

У меня была эта ошибка, однако я считаю, что она вызвала исключение.

Все, что вы делаете, правильно.Вот что я бы проверил.

  1. Дважды проверьте, что служба SMTP в IIS работает правильно.
  2. Убедитесь, что письмо не помечено как спам.

Обычно они являются главными виновниками всех проблем с отправкой электронной почты.

Кроме того, только что заметил, что вы делаете MsgBox(ex.Message).Я считаю, что они заблокировали работу MessageBox с asp.net в пакете обновления, поэтому может возникнуть ошибка, вы просто можете этого не знать.проверьте журнал событий.

Добавил номер порта для почтового сервера и он стал периодически работать, похоже проблема в сервере и задержка отправки сообщений.Спасибо за ваши ответы, все они были полезны!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top