Asp.net smtp客户端`SendAsync()`方法 Protected Sub btnLocalSubmit\u Click(ByVal sender作为对象,ByVal e作为System.EventArgs)处理btnLocalSubmit。单击 Dim逻辑=新连接 logic.emailsToSend(User.Identity.Name、getURL、reportedBy) SendAsync() Response.Redirect(getRedirectionPath,False) 特例 响应。写入(例如消息) 最后 _con.Close() _con.Dispose() _sqlComm.Dispose() 结束尝试 端接头 子SendAsync() Dim_con作为新的SqlConnection(ConfigurationManager.ConnectionString(“CitizenJDBCConnectionString”).ConnectionString) Dim_sqlDataAdapter作为新的sqlDataAdapter(“从EmailSender中选择*,_con) Dim_表作为新System.Data.DataTable 尝试 _con.Open() _sqlDataAdapter.Fill(_表) _con.Close() 对于i As Integer=0到_table.Rows.Count-1 Dim AppPath作为字符串=Request.PhysicalApplicationPath Dim sr作为新的StreamReader(AppPath和“EmailTemplates/NewReport.txt”) 将消息变暗为新邮件消息() message.IsBodyHtml=True message.From=新邮件地址(“admin@xxxx.com") message.To.Add(新邮件地址(_table.Rows(i).Item(1))) message.Subject=“新用户注册!” message.Body=sr.ReadToEnd() 高级关闭() message.Body=message.Body.Replace(“,_table.Rows(i).项(3)) message.Body=message.Body.Replace(“,_table.Rows(i).项(2)) 作为新SmtpClient()的Dim客户端 client.Host=“smtp.xxxxx.com” 'smtp.gmail.com client.Port=25 client.UseDefaultCredentials=True client.Credentials=新系统.Net.NetworkCredential(“admin@xxxx.com", "123456") 'client.EnableSsl=True Dim userState As Object=消息 '连接异步发送完成时的事件 AddHandler client.SendCompleted,SmtpClient\u的地址已完成 SendAsync(消息,用户状态) 下一个 特例 响应。写入(例如消息) 结束尝试 End Sub“SendAsync 公共子SmtpClient_未完成(ByVal sender作为对象,ByVal e作为AsyncCompletedEventArgs) '获取原始MailMessage对象 作为MailMessage=CType的Dim消息(e.UserState,MailMessage) “写出主题 将主题设置为字符串=message.subject 如果e.取消,则 Console.WriteLine(“主题为[{0}]的邮件的发送已取消”。”,主题) 如果结束 如果不是(即错误为零),则 WriteLine(“发送邮件[{0}]时发生错误{1}”,主题,e.Error.ToString() 其他的 Console.WriteLine(“消息[{0}]已发送。”,主题) 如果结束 终端子系统SmtpClient\u未完成
我正在使用smtp客户端Asp.net smtp客户端`SendAsync()`方法 Protected Sub btnLocalSubmit\u Click(ByVal sender作为对象,ByVal e作为System.EventArgs)处理btnLocalSubmit。单击 Dim逻辑=新连接 logic.emailsToSend(User.Identity.Name、getURL、reportedBy) SendAsync() Response.Redirect(getRedirectionPath,False) 特例 响应。写入(例如消息) 最后 _con.Close() _con.Dispose() _sqlComm.Dispose() 结束尝试 端接头 子SendAsync() Dim_con作为新的SqlConnection(ConfigurationManager.ConnectionString(“CitizenJDBCConnectionString”).ConnectionString) Dim_sqlDataAdapter作为新的sqlDataAdapter(“从EmailSender中选择*,_con) Dim_表作为新System.Data.DataTable 尝试 _con.Open() _sqlDataAdapter.Fill(_表) _con.Close() 对于i As Integer=0到_table.Rows.Count-1 Dim AppPath作为字符串=Request.PhysicalApplicationPath Dim sr作为新的StreamReader(AppPath和“EmailTemplates/NewReport.txt”) 将消息变暗为新邮件消息() message.IsBodyHtml=True message.From=新邮件地址(“admin@xxxx.com") message.To.Add(新邮件地址(_table.Rows(i).Item(1))) message.Subject=“新用户注册!” message.Body=sr.ReadToEnd() 高级关闭() message.Body=message.Body.Replace(“,_table.Rows(i).项(3)) message.Body=message.Body.Replace(“,_table.Rows(i).项(2)) 作为新SmtpClient()的Dim客户端 client.Host=“smtp.xxxxx.com” 'smtp.gmail.com client.Port=25 client.UseDefaultCredentials=True client.Credentials=新系统.Net.NetworkCredential(“admin@xxxx.com", "123456") 'client.EnableSsl=True Dim userState As Object=消息 '连接异步发送完成时的事件 AddHandler client.SendCompleted,SmtpClient\u的地址已完成 SendAsync(消息,用户状态) 下一个 特例 响应。写入(例如消息) 结束尝试 End Sub“SendAsync 公共子SmtpClient_未完成(ByVal sender作为对象,ByVal e作为AsyncCompletedEventArgs) '获取原始MailMessage对象 作为MailMessage=CType的Dim消息(e.UserState,MailMessage) “写出主题 将主题设置为字符串=message.subject 如果e.取消,则 Console.WriteLine(“主题为[{0}]的邮件的发送已取消”。”,主题) 如果结束 如果不是(即错误为零),则 WriteLine(“发送邮件[{0}]时发生错误{1}”,主题,e.Error.ToString() 其他的 Console.WriteLine(“消息[{0}]已发送。”,主题) 如果结束 终端子系统SmtpClient\u未完成,asp.net,vb.net,smtpclient,Asp.net,Vb.net,Smtpclient,我正在使用smtp客户端SendAsync()函数异步发送电子邮件…但此函数不起作用…为什么??我没有收到任何电子邮件。当我同步发送它时…我收到了电子邮件,这意味着我的设置是正确的…所以SendAsync()方法有什么问题吗???我一直都在这样做,在这么做了几年之后,我建议对您的问题采取(2)种解决方案: 将实际发送的电子邮件代码(System.Net)重构为WCF服务或单独的.dll(我更喜欢该服务) 继续从ASP.NET页面使用异步委托调用,但要以“启动并忘记”的方式进行,不要连接任何回调
SendAsync()
函数异步发送电子邮件…但此函数不起作用…为什么??我没有收到任何电子邮件。当我同步发送它时…我收到了电子邮件,这意味着我的设置是正确的…所以SendAsync()
方法有什么问题吗???我一直都在这样做,在这么做了几年之后,我建议对您的问题采取(2)种解决方案:
最后,设置页面
Async=True
通过阻塞主线程直到所有异步进程完成,最终使页面整体同步运行。这会使页面加载速度非常慢,通常是不需要的。您是否尝试过同步发送并检查错误?看起来您正在正确使用SendAsync()
(按照我的要求)。我想到了几件事:-你发了多少封电子邮件?可能远程主机正在拒绝/限制连接,因为连接速度太快。-将Visual Studio设置为断开所有异常(调试->异常),以查看是否在另一个线程上引发了SmtpException
。-你从回拨电话里得到什么信息了吗?它应该包含一条错误消息(你的代码看起来像是直接来自MSDN的,所以应该是正确的),你应该附加到事件,看看是否有异常返回给你。到目前为止,我只发送了3封电子邮件…我无法调试,因为我在代理服务器后面(我的大学使用一个)因此,邮件不会被发送,因为无法使用smtp设置代理设置…因此我部署了项目并尝试发送邮件以进行检查。我尝试了Response.Write(例如message),但收到“发送邮件失败”
Protected Sub btnLocalSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLocalSubmit.Click
Dim logic = New connections
logic.emailsToSend(User.Identity.Name, getURL, reportedBy)
SendAsync()
Response.Redirect(getRedirectionPath, False)
Catch ex As Exception
Response.Write(ex.Message)
Finally
_con.Close()
_con.Dispose()
_sqlComm.Dispose()
End Try
End Sub
Sub SendAsync()
Dim _con As New SqlConnection(ConfigurationManager.ConnectionStrings("CitizenJDBConnectionString").ConnectionString)
Dim _sqlDataAdapter As New SqlDataAdapter("SELECT * FROM EmailSender", _con)
Dim _table As New System.Data.DataTable
Try
_con.Open()
_sqlDataAdapter.Fill(_table)
_con.Close()
For i As Integer = 0 To _table.Rows.Count - 1
Dim AppPath As String = Request.PhysicalApplicationPath
Dim sr As New StreamReader(AppPath & "EmailTemplates/NewReport.txt")
Dim message As New MailMessage()
message.IsBodyHtml = True
message.From = New MailAddress("admin@xxxx.com")
message.To.Add(New MailAddress(_table.Rows(i).Item(1)))
message.Subject = "New User registration !"
message.Body = sr.ReadToEnd()
sr.Close()
message.Body = message.Body.Replace("<%ReporterName%>", _table.Rows(i).Item(3))
message.Body = message.Body.Replace("<%ReportURL%>", _table.Rows(i).Item(2))
Dim client As New SmtpClient()
client.Host = "smtp.xxxxx.com"
'smtp.gmail.com
client.Port = 25
client.UseDefaultCredentials = True
client.Credentials = New System.Net.NetworkCredential("admin@xxxx.com", "123456")
'client.EnableSsl = True
Dim userState As Object = message
'wire up the event for when the Async send is completed
AddHandler client.SendCompleted, AddressOf SmtpClient_OnCompleted
client.SendAsync(message, userState)
Next
Catch ex As Exception
Response.Write(ex.Message)
End Try
End Sub 'SendAsync
Public Sub SmtpClient_OnCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
'Get the Original MailMessage object
Dim message As MailMessage = CType(e.UserState, MailMessage)
'write out the subject
Dim subject As String = message.Subject
If e.Cancelled Then
Console.WriteLine("Send canceled for mail with subject [{0}].", subject)
End If
If Not (e.Error Is Nothing) Then
Console.WriteLine("Error {1} occurred when sending mail [{0}] ", subject, e.Error.ToString())
Else
Console.WriteLine("Message [{0}] sent.", subject)
End If
End Sub 'SmtpClient_OnCompleted