Я создаю приложение форм Windows, которое должно работать на удаленной/изолированной машине, и отправлять уведомления об ошибках по электронной почте администраторам. Я пробовал с использованием System.Net.Mail
классов для достижения этой цели, но я бегу в странные проблемы:Отправка электронной почты из приложения форм Windows
1. я получаю сообщение об ошибке:
System.IO.IOException: Unable to read data from the transport connection:
An existing connection was forcibly closed by the remote host.--->
System.Net.Sockets.SocketException: An existing connection was forcibly closed by
the remote host at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset,
Int32 size, SocketFlags socketFlags) at System.Net.Sockets.NetworkStream.
Read(Byte[] buffer, Int32 offset, Int32 size)
2. Я попытался прослушивает сеть чтобы увидеть, что происходит не так. Так вот как это идет:
i) The DNS lookup for my SMTP server's hostname works
ii) My application connects to the SMTP server and sends "EHLO MY-HOSTNAME"
iii) SMTP server responds back with it's usual
iv) My application sends "AUTH login abcdxyz" and receives an acknowledgement packet
На данный момент, кажется, что либо сервер SMTP, кажется, не запрашивать пароль или моя машина отключает соединение с сервером SMTP перед сервером SMTP может запросить для пароля.
Я пробовал использовать разные SMTP-порты и SMTP-хосты. Кроме того, я попытался отключить мой брандмауэр и AV, но не повезло. При подключении к моему SMTP-серверу с помощью PuTTY и выдаче той же последовательности команд, что и мое приложение (выбрано из анализатора пакетов), все работает отлично, и я могу отправить сообщение по электронной почте.
Вот код, который я использую:
Imports System.Net
Imports System.Net.Mail
Public Function SendMail() As Boolean
Dim smtpClient As New SmtpClient("smtp.myserver.com", 587) 'I tried using different hosts and ports
smtpClient.UseDefaultCredentials = False
smtpClient.Credentials = New NetworkCredential("[email protected]", "password")
smtpClient.EnableSsl = True 'Also tried setting this to false
Dim mm As New MailMessage
mm.From = New MailAddress("[email protected]")
mm.Subject = "Test Mail"
mm.IsBodyHtml = True
mm.Body = "<h1>This is a test email</h1>"
mm.To.Add("[email protected]")
Try
smtpClient.Send(mm)
MsgBox("SUCCESS!")
Catch ex As Exception
MsgBox(ex.InnerException.ToString)
End Try
mm.Dispose()
smtpClient.Dispose()
Return True
End Function
Любые советы?
Можем ли мы увидеть код? –
Добавил код в мой пост ... – Zishan
Если вы используете этот код и используете учетные данные учетной записи gmail, например, получаете ли вы такую же ошибку? точно так же, как Diogo упоминает ... –