【问题标题】:SmtpClient Class: send() works but not sendAsync()SmtpClient 类:send() 有效,但 sendAsync() 无效
【发布时间】:2020-10-18 05:34:36
【问题描述】:

我正在编写一个简单的 Windows 窗体(Visual Studio 2010、.NET 4.0、Windows 2008 32 位)。点击一个按钮发送一封电子邮件。

函数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

如果发送代码是:

sc.Send()

事件 fakeSMTPServer(一个虚拟的 smtp 服务器)或 Gmail 获取它。当我宁愿使用:

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

它不起作用... fakeSMTPServer 通知邮件接收,但没有真正检索它。
消息错误是:"Failure sending mail"

这是 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]

我错过了什么?

【问题讨论】:

    标签: email asynchronous .net-4.0 vb.net-2010 smtpclient


    【解决方案1】:

    问题出在这里:

    message.Dispose()
    

    您正在在电子邮件发送之前释放您的资源。您应该只在SendCompletedCallback 中释放您的资源,因为现在您只需说:开始发送这个……哦,不,没关系。

    【讨论】:

    • 是的……确实。这有点明显。谢谢!
    • 更多信息可以在这里找到http://stackoverflow.com/a/7276819/213550,不管这是c#问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多