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("[email protected]")
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("[email protected]", "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
Я использую функцию smtp-клиентов SendAsync()
для асинхронной отправки писем... но эта функция не работает... почему?? я не получаю никаких электронных писем... когда я отправляю их синхронно... я получаю электронные письма, это означает, что мои настройки верны... так что же не так с методом SendAsync()
??
SendAsync()
(согласно моему предложению). Несколько вещей приходят на ум: - Сколько писем вы отправляете? возможно, удаленный хост запрещает/регулирует соединения, потому что они приходят слишком быстро. - Настройте Visual Studio на прерывание всех исключений (Отладка -> Исключения), чтобы увидеть, не выдается лиSmtpException
в другом потоке. - Получаете ли вы какую-либо информацию от обратного вызова? Предполагается, что он содержит сообщение об ошибке (и ваш код выглядит так, как будто он пришел прямо из MSDN, поэтому он должен быть правильным) - person Tim Medora   schedule 18.03.2012SendCompleted
событие и посмотрите, было ли возвращено вам исключение. - person casperOne   schedule 18.03.2012Async="true"
в директиву страницы, и теперь она работает нормально ... но долго ждет и отправляет электронное письмо, а затем обновляет страницу ... я имею в виду, что с помощьюAsync="true"
она работает, но как синхронная почта. - person user1150440   schedule 18.03.2012