我想用SmtpClient.Send
发送电子邮件(在Win7操作系统,.NET 4.5+)。同一个sendMail
代码正在两个不同的应用程序中重复使用(让我们称它们为App-1和App-2)。 App-1在Admin-1配置文件下运行,而App-2在Admin-2配置文件下运行。这两个配置文件都具有administrator/highest
权限。 App-1应该在1900小时发送电子邮件,而App-2应该在0300小时发送电子邮件。两个应用程序的电子邮件地址From
和To
相同。 fromEmail
和toEmail
都是有效的,包括fromPass
。SmtpClient.send“操作超时错误”
问题:
- 的App-1似乎是正确发送电子邮件尽管有时不是所有的时间!
- 的App-2似乎扔(每5分钟后也多次尝试)“操作超时”错误
的解决方案,我已经试过至今:
- 拖网通过互联网,并试图什么可能的解决方案,正在提议
- 改变从
587
端口465
:这不很好 - 进行多次尝试努力
send
assum它是一个互联网问题
我的AV /防火墙似乎并没有阻止任何端口。我的互联网连接非常稳定。
似乎没有任何工作。为什么它不起作用?希望这是一个愚蠢的错误,我忽略了! sendMail
下面提供了代码,如果有人可以对此有所了解,这将有所帮助。 (Utils.doProcessLog
是我的过程记录器)
更新:我意识到,如果我重新启动应用程序,该邮件被正确地在第一次运行期间发送,然后它引发的后续运行“操作超时”错误
更新-2:我创建了一个简单的Windows窗体应用程序,并带有Email
按钮,该按钮调用sendEmail
函数。只要按下按钮,应用程序就能正常工作(即发送电子邮件)。
Update-3其中一个pdf报告是900KB,另一个是1.72MB。 sendMail
似乎只会在1.72MB的pdf报告中崩溃。似乎有一个附件超过3MB的已知错误,所以1.72MB不应该是一个问题,但它不适用于我。我无法安装此修补程序(http://support2.microsoft.com/kb/2183292),因为安装中显示“此修补程序不适用于您”。我已经尝试了微软修补程序链接中提出的解决方法,但仍然出现错误。
Imports System.Net.Mail
Imports System.Net
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' SEND EMAIL
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Public Function sendMail(ByVal Subject As String) As Boolean
Dim fl As String
Dim i As Integer
Dim good As Boolean
' for EMAILS
Const mailStrAddress = "[email protected]"
Const mailStrPass = "fromPass"
Const mailStrHost = "smtp.gmail.com"
Const mailToAdd = "[email protected]"
Const maxAttempt = 5
' Subject & Body
Dim st = "This is a report generated from " & ThisWorkbook.Name
Dim subj = ThisWorkbook.Name & ": " & Subject
If IsNothing(subj) Then
subj = "CAUTION: EMPTY STRING"
End If
Utils.doProcessLog("about to email reports")
good = False
For i = 0 To maxAttempt
'
Dim mail As New MailMessage
Dim smtp As New SmtpClient
'
Try
mail.From = New MailAddress(mailStrAddress) ' Email address
' The important part -- configuring the SMTP client
smtp.Port = 587 ' [1] You can try with 465 also, I always used 587 and got success
smtp.EnableSsl = True
smtp.DeliveryMethod = SmtpDeliveryMethod.Network ' [2] Added this
smtp.UseDefaultCredentials = False ' [3] Changed this
smtp.Credentials = New NetworkCredential(mailStrAddress, mailStrPass) ' password-here [4] Added this. Note, first parameter is NOT string.
smtp.Host = mailStrHost
smtp.Timeout = 100000 ' 100 seconds
' recipient address
mail.To.Add(New MailAddress(mailToAdd))
' Formatted mail body
mail.IsBodyHtml = True
mail.SubjectEncoding = System.Text.Encoding.UTF8
mail.BodyEncoding = System.Text.Encoding.UTF8
mail.Subject = subj
mail.Body = st
' Send
smtp.Send(mail)
'
Utils.doProcessLog("report emailed")
good = True
Catch ex As Exception
Utils.doProcessLog("unable to email report : " & ex.Message)
Utils.doProcessLog("waiting for 5 minutes before re-trying :" & CStr(i))
good = False
Utils.doWait(5 * 60 * 1000) ' = 5(min)*60(secs)*1000(ms)
Finally
'
mail.Dispose()
smtp.Dispose()
'
End Try
' exit if successful
If good Then
Exit For
End If
Next i
End Function
我也遇到了同样的问题。我认为问题在于smtp服务器。导致它的代码不太可能。 – Hatjhie 2014-10-03 05:35:26
@Hatjhie,“smtp服务器存在问题在于什么”?你的意思是smtp.gmail.com在结束时有问题吗? – user2979010 2014-10-04 01:17:38
@Hatjhie,你提到你面临同样的问题。你是否在使用完全不同的方法来解决这个问题? – user2979010 2014-10-05 00:00:44