|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
SMTP won't send until thread terminatesThis is a little strange but here goes. I wanted to send emails and hence wrote the first sub below. It worked however it would NOT send the email UNLESS I closed the application (hence terminated the main thread). Wanting to fix this I thought it would work if I do it the asyncrhonous way so the calling thread isn't blocked. This is when I added the 2nd sub below All the code still works but again, it does not send the email unless I exit the application. It's almost as if its buffering it for some reason. Shouldn't this just get fired ASAP as soon as I do .sendasync() or .send() ????? Very confusing. Thanks for all feedback, Adam ************SUB 1**************** Public Sub SendEmail(ByVal sFromEmailAddress As String, ByVal sFromSenderName As String, ByVal sToEmailAddress As String, ByVal sEmailSubject As String, ByVal sEmailBody As String, ByVal EmailPriority As System.Net.Mail.MailPriority) Try Dim MySMTPClient As New System.Net.Mail.SmtpClient("smtp.realname.net") ' Dim MyEmail As New System.Net.Mail.MailMessage Dim MyAddressFrom As New System.Net.Mail.MailAddress(sFromEmailAddress, sFromSenderName) Dim MyAddressTo As New System.Net.Mail.MailAddress(sToEmailAddress) 'Build the email MyEmail.From = MyAddressFrom MyEmail.To.Add(sToEmailAddress) MyEmail.Subject = sEmailSubject MyEmail.Body = sEmailBody MyEmail.Priority = EmailPriority MyEmail.IsBodyHtml = True Dim MyMailObject As Object = MyEmail AddHandler MySMTPClient.SendCompleted, AddressOf SmtpClient_OnCompleted MySMTPClient.SendAsync(MyEmail, MyMailObject) MyEmail = Nothing 'If there are any errors catch them Catch MyException As Exception MsgBox("The following error occured: " + MyException.Message, MsgBoxStyle.Critical, "Sending email") End Try End Sub ************SUB 2**************** Public Sub SmtpClient_OnCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) 'Get the Original MailMessage object Dim mail As System.Net.Mail.MailMessage = CType(e.UserState, System.Net.Mail.MailMessage) 'write out the subject Dim subject As String = mail.Subject If e.Cancelled Then 'They cancelled it last minute End If If Not (e.Error Is Nothing) Then 'Explain to the user Else MsgBox("The email has been sent", MsgBoxStyle.OkCancel, Application.ProductName) End If End Sub Just to add to what I already said.
I put it all in a class module to let it run in its own thread. The same thing happens. Ie it won't send the email until I terminate the application. There are no errors, it's buffering it somewhere but I'm just so confused where and how. I haven't setup any buffering, it should send ASAP. Adam Show quoteHide quote "Adam Honek" <AdamHo***@Webmaster2001.freeserve.co.uk> wrote in message news:eA46esTcGHA.380@TK2MSFTNGP04.phx.gbl... > Okay. > > This is a little strange but here goes. > > I wanted to send emails and hence wrote the first sub below. It worked > however it would NOT send the email UNLESS I closed the application (hence > terminated the main thread). > > Wanting to fix this I thought it would work if I do it the asyncrhonous > way so the calling thread isn't blocked. This is when I added the 2nd sub > below > > All the code still works but again, it does not send the email unless I > exit the application. It's almost as if its buffering it for some reason. > > Shouldn't this just get fired ASAP as soon as I do .sendasync() or .send() > ????? > > Very confusing. > > Thanks for all feedback, > Adam > > > > ************SUB 1**************** > Public Sub SendEmail(ByVal sFromEmailAddress As String, ByVal > sFromSenderName As String, ByVal sToEmailAddress As String, ByVal > sEmailSubject As String, ByVal sEmailBody As String, ByVal EmailPriority > As System.Net.Mail.MailPriority) > > Try > > Dim MySMTPClient As New System.Net.Mail.SmtpClient("smtp.realname.net") ' > > Dim MyEmail As New System.Net.Mail.MailMessage > > Dim MyAddressFrom As New System.Net.Mail.MailAddress(sFromEmailAddress, > sFromSenderName) > > Dim MyAddressTo As New System.Net.Mail.MailAddress(sToEmailAddress) > > > > 'Build the email > > MyEmail.From = MyAddressFrom > > MyEmail.To.Add(sToEmailAddress) > > MyEmail.Subject = sEmailSubject > > MyEmail.Body = sEmailBody > > MyEmail.Priority = EmailPriority > > MyEmail.IsBodyHtml = True > > Dim MyMailObject As Object = MyEmail > > AddHandler MySMTPClient.SendCompleted, AddressOf SmtpClient_OnCompleted > > MySMTPClient.SendAsync(MyEmail, MyMailObject) > > MyEmail = Nothing > > 'If there are any errors catch them > > Catch MyException As Exception > > MsgBox("The following error occured: " + MyException.Message, > MsgBoxStyle.Critical, "Sending email") > > End Try > > End Sub > > > > ************SUB 2**************** > > Public Sub SmtpClient_OnCompleted(ByVal sender As Object, ByVal e As > System.ComponentModel.AsyncCompletedEventArgs) > > 'Get the Original MailMessage object > > Dim mail As System.Net.Mail.MailMessage = CType(e.UserState, > System.Net.Mail.MailMessage) > > 'write out the subject > > Dim subject As String = mail.Subject > > If e.Cancelled Then > > 'They cancelled it last minute > > End If > > If Not (e.Error Is Nothing) Then > > 'Explain to the user > > Else > > MsgBox("The email has been sent", MsgBoxStyle.OkCancel, > Application.ProductName) > > End If > > End Sub > > Further to the above.
Sometimes it will send immediately. Sometimes it won't until I exit the app. Obviously something somewhere isn't get priority. The UI in the main thread blocking the SMTP System.net.mail classes? Doubtful but that's all I can think up. Adam Show quoteHide quote "Adam Honek" <AdamHo***@Webmaster2001.freeserve.co.uk> wrote in message news:%23vksZ2UcGHA.2456@TK2MSFTNGP04.phx.gbl... > Just to add to what I already said. > > I put it all in a class module to let it run in its own thread. > > The same thing happens. Ie it won't send the email until I terminate the > application. > > There are no errors, it's buffering it somewhere but I'm just so confused > where and how. I haven't setup any buffering, it should send ASAP. > > Adam > > "Adam Honek" <AdamHo***@Webmaster2001.freeserve.co.uk> wrote in message > news:eA46esTcGHA.380@TK2MSFTNGP04.phx.gbl... >> Okay. >> >> This is a little strange but here goes. >> >> I wanted to send emails and hence wrote the first sub below. It worked >> however it would NOT send the email UNLESS I closed the application >> (hence terminated the main thread). >> >> Wanting to fix this I thought it would work if I do it the asyncrhonous >> way so the calling thread isn't blocked. This is when I added the 2nd sub >> below >> >> All the code still works but again, it does not send the email unless I >> exit the application. It's almost as if its buffering it for some reason. >> >> Shouldn't this just get fired ASAP as soon as I do .sendasync() or >> .send() ????? >> >> Very confusing. >> >> Thanks for all feedback, >> Adam >> >> >> >> ************SUB 1**************** >> Public Sub SendEmail(ByVal sFromEmailAddress As String, ByVal >> sFromSenderName As String, ByVal sToEmailAddress As String, ByVal >> sEmailSubject As String, ByVal sEmailBody As String, ByVal EmailPriority >> As System.Net.Mail.MailPriority) >> >> Try >> >> Dim MySMTPClient As New System.Net.Mail.SmtpClient("smtp.realname.net") ' >> >> Dim MyEmail As New System.Net.Mail.MailMessage >> >> Dim MyAddressFrom As New System.Net.Mail.MailAddress(sFromEmailAddress, >> sFromSenderName) >> >> Dim MyAddressTo As New System.Net.Mail.MailAddress(sToEmailAddress) >> >> >> >> 'Build the email >> >> MyEmail.From = MyAddressFrom >> >> MyEmail.To.Add(sToEmailAddress) >> >> MyEmail.Subject = sEmailSubject >> >> MyEmail.Body = sEmailBody >> >> MyEmail.Priority = EmailPriority >> >> MyEmail.IsBodyHtml = True >> >> Dim MyMailObject As Object = MyEmail >> >> AddHandler MySMTPClient.SendCompleted, AddressOf SmtpClient_OnCompleted >> >> MySMTPClient.SendAsync(MyEmail, MyMailObject) >> >> MyEmail = Nothing >> >> 'If there are any errors catch them >> >> Catch MyException As Exception >> >> MsgBox("The following error occured: " + MyException.Message, >> MsgBoxStyle.Critical, "Sending email") >> >> End Try >> >> End Sub >> >> >> >> ************SUB 2**************** >> >> Public Sub SmtpClient_OnCompleted(ByVal sender As Object, ByVal e As >> System.ComponentModel.AsyncCompletedEventArgs) >> >> 'Get the Original MailMessage object >> >> Dim mail As System.Net.Mail.MailMessage = CType(e.UserState, >> System.Net.Mail.MailMessage) >> >> 'write out the subject >> >> Dim subject As String = mail.Subject >> >> If e.Cancelled Then >> >> 'They cancelled it last minute >> >> End If >> >> If Not (e.Error Is Nothing) Then >> >> 'Explain to the user >> >> Else >> >> MsgBox("The email has been sent", MsgBoxStyle.OkCancel, >> Application.ProductName) >> >> End If >> >> End Sub >> >> > > Ever find a solution to this? Appears to be related to some type of
anti-virus protection. I'm getting the same thing but am working to find a workaround. Mine is due to the Norton auto-protection. Show quoteHide quote "Adam Honek" <AdamHo***@Webmaster2001.freeserve.co.uk> wrote in message news:%23vksZ2UcGHA.2456@TK2MSFTNGP04.phx.gbl... > Just to add to what I already said. > > I put it all in a class module to let it run in its own thread. > > The same thing happens. Ie it won't send the email until I terminate the > application. > > There are no errors, it's buffering it somewhere but I'm just so confused > where and how. I haven't setup any buffering, it should send ASAP. > > Adam > > "Adam Honek" <AdamHo***@Webmaster2001.freeserve.co.uk> wrote in message > news:eA46esTcGHA.380@TK2MSFTNGP04.phx.gbl... >> Okay. >> >> This is a little strange but here goes. >> >> I wanted to send emails and hence wrote the first sub below. It worked >> however it would NOT send the email UNLESS I closed the application >> (hence terminated the main thread). >> >> Wanting to fix this I thought it would work if I do it the asyncrhonous >> way so the calling thread isn't blocked. This is when I added the 2nd sub >> below >> >> All the code still works but again, it does not send the email unless I >> exit the application. It's almost as if its buffering it for some reason. >> >> Shouldn't this just get fired ASAP as soon as I do .sendasync() or >> .send() ????? >> >> Very confusing. >> >> Thanks for all feedback, >> Adam >> >> >> >> ************SUB 1**************** >> Public Sub SendEmail(ByVal sFromEmailAddress As String, ByVal >> sFromSenderName As String, ByVal sToEmailAddress As String, ByVal >> sEmailSubject As String, ByVal sEmailBody As String, ByVal EmailPriority >> As System.Net.Mail.MailPriority) >> >> Try >> >> Dim MySMTPClient As New System.Net.Mail.SmtpClient("smtp.realname.net") ' >> >> Dim MyEmail As New System.Net.Mail.MailMessage >> >> Dim MyAddressFrom As New System.Net.Mail.MailAddress(sFromEmailAddress, >> sFromSenderName) >> >> Dim MyAddressTo As New System.Net.Mail.MailAddress(sToEmailAddress) >> >> >> >> 'Build the email >> >> MyEmail.From = MyAddressFrom >> >> MyEmail.To.Add(sToEmailAddress) >> >> MyEmail.Subject = sEmailSubject >> >> MyEmail.Body = sEmailBody >> >> MyEmail.Priority = EmailPriority >> >> MyEmail.IsBodyHtml = True >> >> Dim MyMailObject As Object = MyEmail >> >> AddHandler MySMTPClient.SendCompleted, AddressOf SmtpClient_OnCompleted >> >> MySMTPClient.SendAsync(MyEmail, MyMailObject) >> >> MyEmail = Nothing >> >> 'If there are any errors catch them >> >> Catch MyException As Exception >> >> MsgBox("The following error occured: " + MyException.Message, >> MsgBoxStyle.Critical, "Sending email") >> >> End Try >> >> End Sub >> >> >> >> ************SUB 2**************** >> >> Public Sub SmtpClient_OnCompleted(ByVal sender As Object, ByVal e As >> System.ComponentModel.AsyncCompletedEventArgs) >> >> 'Get the Original MailMessage object >> >> Dim mail As System.Net.Mail.MailMessage = CType(e.UserState, >> System.Net.Mail.MailMessage) >> >> 'write out the subject >> >> Dim subject As String = mail.Subject >> >> If e.Cancelled Then >> >> 'They cancelled it last minute >> >> End If >> >> If Not (e.Error Is Nothing) Then >> >> 'Explain to the user >> >> Else >> >> MsgBox("The email has been sent", MsgBoxStyle.OkCancel, >> Application.ProductName) >> >> End If >> >> End Sub >> >> > > "+Vice" <tonyp***@earthlink.net> wrote in message I turned off outbound email scanning in Norton and it still scans anyway; I news:uZ4TT3WdGHA.2456@TK2MSFTNGP04.phx.gbl... > Ever find a solution to this? Appears to be related to some type of > anti-virus protection. I'm getting the same thing but am working to find > a workaround. Mine is due to the Norton auto-protection. > do not have to exit the app for a send to be completed but it is deferred for a minute or two Dear Adam Honek
I have encountered the same situation. I have noticed that my Email Virus Autoprotect is doing this. If I turn the Autoprotect feature off, I have no problem in sending emails. Mike TI Show quoteHide quote "Adam Honek" <AdamHo***@Webmaster2001.freeserve.co.uk> wrote in message news:eA46esTcGHA.380@TK2MSFTNGP04.phx.gbl... > Okay. > > This is a little strange but here goes. > > I wanted to send emails and hence wrote the first sub below. It worked > however it would NOT send the email UNLESS I closed the application (hence > terminated the main thread). > > Wanting to fix this I thought it would work if I do it the asyncrhonous > way so the calling thread isn't blocked. This is when I added the 2nd sub > below > > All the code still works but again, it does not send the email unless I > exit the application. It's almost as if its buffering it for some reason. > > Shouldn't this just get fired ASAP as soon as I do .sendasync() or .send() > ????? > > Very confusing. > > Thanks for all feedback, > Adam > > > > ************SUB 1**************** > Public Sub SendEmail(ByVal sFromEmailAddress As String, ByVal > sFromSenderName As String, ByVal sToEmailAddress As String, ByVal > sEmailSubject As String, ByVal sEmailBody As String, ByVal EmailPriority > As System.Net.Mail.MailPriority) > > Try > > Dim MySMTPClient As New System.Net.Mail.SmtpClient("smtp.realname.net") ' > > Dim MyEmail As New System.Net.Mail.MailMessage > > Dim MyAddressFrom As New System.Net.Mail.MailAddress(sFromEmailAddress, > sFromSenderName) > > Dim MyAddressTo As New System.Net.Mail.MailAddress(sToEmailAddress) > > > > 'Build the email > > MyEmail.From = MyAddressFrom > > MyEmail.To.Add(sToEmailAddress) > > MyEmail.Subject = sEmailSubject > > MyEmail.Body = sEmailBody > > MyEmail.Priority = EmailPriority > > MyEmail.IsBodyHtml = True > > Dim MyMailObject As Object = MyEmail > > AddHandler MySMTPClient.SendCompleted, AddressOf SmtpClient_OnCompleted > > MySMTPClient.SendAsync(MyEmail, MyMailObject) > > MyEmail = Nothing > > 'If there are any errors catch them > > Catch MyException As Exception > > MsgBox("The following error occured: " + MyException.Message, > MsgBoxStyle.Critical, "Sending email") > > End Try > > End Sub > > > > ************SUB 2**************** > > Public Sub SmtpClient_OnCompleted(ByVal sender As Object, ByVal e As > System.ComponentModel.AsyncCompletedEventArgs) > > 'Get the Original MailMessage object > > Dim mail As System.Net.Mail.MailMessage = CType(e.UserState, > System.Net.Mail.MailMessage) > > 'write out the subject > > Dim subject As String = mail.Subject > > If e.Cancelled Then > > 'They cancelled it last minute > > End If > > If Not (e.Error Is Nothing) Then > > 'Explain to the user > > Else > > MsgBox("The email has been sent", MsgBoxStyle.OkCancel, > Application.ProductName) > > End If > > End Sub > > Hmmm,
Norton Antivirus? I have version 2006 and it's not wanting to turn off, just disable. If I disable it the emails send ASAP on a 50/50 basis, depending what they feel like doing. :( AdamShow quoteHide quote "Mike TI" <sunset***@hotmail.com> wrote in message news:OH$5FfacGHA.3900@TK2MSFTNGP05.phx.gbl... > Dear Adam Honek > > I have encountered the same situation. > > I have noticed that my Email Virus Autoprotect is doing this. If I turn > the Autoprotect feature off, I have no problem in sending emails. > > Mike TI > > "Adam Honek" <AdamHo***@Webmaster2001.freeserve.co.uk> wrote in message > news:eA46esTcGHA.380@TK2MSFTNGP04.phx.gbl... >> Okay. >> >> This is a little strange but here goes. >> >> I wanted to send emails and hence wrote the first sub below. It worked >> however it would NOT send the email UNLESS I closed the application >> (hence terminated the main thread). >> >> Wanting to fix this I thought it would work if I do it the asyncrhonous >> way so the calling thread isn't blocked. This is when I added the 2nd sub >> below >> >> All the code still works but again, it does not send the email unless I >> exit the application. It's almost as if its buffering it for some reason. >> >> Shouldn't this just get fired ASAP as soon as I do .sendasync() or >> .send() ????? >> >> Very confusing. >> >> Thanks for all feedback, >> Adam >> >> >> >> ************SUB 1**************** >> Public Sub SendEmail(ByVal sFromEmailAddress As String, ByVal >> sFromSenderName As String, ByVal sToEmailAddress As String, ByVal >> sEmailSubject As String, ByVal sEmailBody As String, ByVal EmailPriority >> As System.Net.Mail.MailPriority) >> >> Try >> >> Dim MySMTPClient As New System.Net.Mail.SmtpClient("smtp.realname.net") ' >> >> Dim MyEmail As New System.Net.Mail.MailMessage >> >> Dim MyAddressFrom As New System.Net.Mail.MailAddress(sFromEmailAddress, >> sFromSenderName) >> >> Dim MyAddressTo As New System.Net.Mail.MailAddress(sToEmailAddress) >> >> >> >> 'Build the email >> >> MyEmail.From = MyAddressFrom >> >> MyEmail.To.Add(sToEmailAddress) >> >> MyEmail.Subject = sEmailSubject >> >> MyEmail.Body = sEmailBody >> >> MyEmail.Priority = EmailPriority >> >> MyEmail.IsBodyHtml = True >> >> Dim MyMailObject As Object = MyEmail >> >> AddHandler MySMTPClient.SendCompleted, AddressOf SmtpClient_OnCompleted >> >> MySMTPClient.SendAsync(MyEmail, MyMailObject) >> >> MyEmail = Nothing >> >> 'If there are any errors catch them >> >> Catch MyException As Exception >> >> MsgBox("The following error occured: " + MyException.Message, >> MsgBoxStyle.Critical, "Sending email") >> >> End Try >> >> End Sub >> >> >> >> ************SUB 2**************** >> >> Public Sub SmtpClient_OnCompleted(ByVal sender As Object, ByVal e As >> System.ComponentModel.AsyncCompletedEventArgs) >> >> 'Get the Original MailMessage object >> >> Dim mail As System.Net.Mail.MailMessage = CType(e.UserState, >> System.Net.Mail.MailMessage) >> >> 'write out the subject >> >> Dim subject As String = mail.Subject >> >> If e.Cancelled Then >> >> 'They cancelled it last minute >> >> End If >> >> If Not (e.Error Is Nothing) Then >> >> 'Explain to the user >> >> Else >> >> MsgBox("The email has been sent", MsgBoxStyle.OkCancel, >> Application.ProductName) >> >> End If >> >> End Sub >> >> > > |
|||||||||||||||||||||||