Обновление устаревшего кода из System.Web.Mail в System.Net.Mail в Visual Studio 2005: проблемы с отправкой электронной почты - PullRequest
4 голосов
/ 09 сентября 2008

Использование устаревшей 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, есть ли что-то, что изменилось в базовом коде между этими версиями?

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

Ответы [ 6 ]

1 голос
/ 09 сентября 2008

Библиотека 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>
0 голосов
/ 09 сентября 2008

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

0 голосов
/ 09 сентября 2008

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

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

обычно это самые большие виновники, когда у нас возникают проблемы с отправкой электронной почты.

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

0 голосов
/ 09 сентября 2008

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

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

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

0 голосов
/ 09 сентября 2008

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

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

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

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

0 голосов
/ 09 сентября 2008

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

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)

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

...