Обновление устаревшего кода с System.Web.Mail на System.Net.Mail в Visual Studio 2005:Проблемы с отправкой электронной почты
-
09-06-2019 - |
Вопрос
Использование устаревшего 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 (отправка) или что-то еще.Если вы еще этого не делаете, использование порта ввода также может помочь решить вашу проблему.
Другие советы
Библиотека 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")
У меня была эта ошибка, однако я считаю, что она вызвала исключение.
Все, что вы делаете, правильно.Вот что я бы проверил.
- Дважды проверьте, что служба SMTP в IIS работает правильно.
- Убедитесь, что письмо не помечено как спам.
Обычно они являются главными виновниками всех проблем с отправкой электронной почты.
Кроме того, только что заметил, что вы делаете MsgBox(ex.Message).Я считаю, что они заблокировали работу MessageBox с asp.net в пакете обновления, поэтому может возникнуть ошибка, вы просто можете этого не знать.проверьте журнал событий.
Добавил номер порта для почтового сервера и он стал периодически работать, похоже проблема в сервере и задержка отправки сообщений.Спасибо за ваши ответы, все они были полезны!