2017-01-19 8 views
1

Я пишу простую форму Windows (Visual Studio 2010, .NET 4.0, Windows 2008 32bit). Нажав на кнопку, отправьте электронное письмо.SmtpClient Класс: send() работает, а не sendAsync()

Функция SendMaildButton_Click() отправляет почту, и если она завершена (метод aSync), она вызывает SendCompletedCallback().

Public Class MailForm 
    Private sc As System.Net.Mail.SmtpClient 

    Private Sub MailForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     sc = New System.Net.Mail.SmtpClient 
     AddHandler sc.SendCompleted, AddressOf SendCompletedCallback 
    End Sub 

    Private Sub SendCompletedCallback(ByVal sender As Object, _ 
             ByVal e As AsyncCompletedEventArgs) 
     ' [...] 
    End Sub 

    Private Sub SendMaildButton_Click(ByVal sender As System.Object, _ 
             ByVal e As System.EventArgs) Handles SendButton.Click 
     'sc instance of SmtpClient already created on OnLoad form event 
     ' [sc.Host, sc.Port, sc.Credentials stuff ...] 

     Dim message As MailMessage 
     ' [message filling] 

     ' [relevant part : Send or SendAsync] 

     ' freedom... 
     message.Dispose() 
    End Sub 
End Class 

Это работает perflectly если отправка код:

sc.Send() 

fakeSMTPServer Event (фиктивный сервер SMTP) или Gmail получить его. Когда я предпочитаю использовать:

Dim userState As String = "plap" 'message.GetHashCode 
AddHandler sc.SendCompleted, AddressOf SendCompletedCallback 
sc.SendAsync(message, userState) 

Это не работает ... fakeSMTPServer уведомить прием почты, но не действительно извлечения его.
Ошибка сообщение: "Failure sending mail"

Вот StackTrace из fakeSMTPServer:

19 janv. 2017 17:15:43 ERROR com.nilhcem.fakesmtp.server.MailSaver - 
java.io.EOFException: Pre-mature end of <CRLF>.<CRLF> terminated data 
     at org.subethamail.smtp.io.DotTerminatedInputStream.read(DotTerminatedInputStream.java:73) ~[fakeSMTP-2.0.jar:na] 
     at org.subethamail.smtp.io.DotUnstuffingInputStream.read(DotUnstuffingInputStream.java:47) ~[fakeSMTP-2.0.jar:na] 
     at org.subethamail.smtp.io.DotUnstuffingInputStream.read(DotUnstuffingInputStream.java:76) ~[fakeSMTP-2.0.jar:na] 

Что ДИТ я скучаю?

ответ

1

Проблема находится здесь:

message.Dispose() 

Вы освободив свои ресурсы, прежде чем электронной почты отправляется. Вы должны освобождать свои ресурсы только в SendCompletedCallback, потому что прямо сейчас вы просто говорите: начните отправлять это ... о, нет, неважно.

+0

Да, действительно. Это было очевидно. Благодаря ! – Amessihel

+0

Более подробную информацию можно найти здесьhttp: //stackoverflow.com/a/7276819/213550, независимо от того, что это вопрос C# – VMAtm

Смежные вопросы