首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SmtpClient.send“操作超时错误”

SmtpClient.send“操作超时错误”
EN

Stack Overflow用户
提问于 2014-10-03 00:34:36
回答 1查看 4.1K关注 0票数 2

我正在尝试使用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小时发送电子邮件。对于这两个应用程序,FromTo的电子邮件地址是相同的。fromEmailtoEmail都是有效的,包括fromPass

问题是:

  • 应用程序-1似乎是正确的电子邮件发送,尽管有时不是所有的时间!
  • App-2似乎会抛出“操作超时”错误(即使在每5分钟多次尝试之后)。

到目前为止,我尝试过的解决方案:

  1. 在互联网上拖网,并尝试了可能的解决方案。
  2. 将端口从587更改为465:这不是很好
  3. 假设是互联网问题,多次尝试send

我的AV/防火墙似乎没有阻塞任何端口。我的互联网连接相当稳定。

似乎什么都没起作用。为什么不动呢?希望这是一个愚蠢的错误,我忽略了!下面提供了sendMail代码,如果有人能说明这一点,这将是有帮助的。(Utils.doProcessLog是我的进程记录器)

更新:我意识到,如果我重新启动应用程序,电子邮件在第一次运行时发送正确,然后在随后的运行中抛出“操作超时”错误。

更新-2:我创建了一个普通的windows窗体应用程序,其中包含了调用sendEmail函数的Email按钮。每当我按下按钮时,应用程序就能正常工作(即发送电子邮件)。

更新-3一个pdf-报告是900 is,另一个是1.72MB。sendMail似乎只在1.72MB的pdf报告上崩溃。对于3MB以上的附件,似乎有一个已知的错误,所以1.72MB不应该是一个问题,但是它对我不起作用。我无法安装此修补程序(http://support2.microsoft.com/kb/2183292),因为安装说明“此修补程序不适用于您”。我已经尝试了微软-修补程序链接中所建议的解决方法,但我仍然得到了错误。

代码语言:javascript
复制
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 = "fromEmail@gmail.com"
    Const mailStrPass = "fromPass"
    Const mailStrHost = "smtp.gmail.com"
    Const mailToAdd = "toEmail@gmail.com"
    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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-09 01:01:50

在努力解决这个问题一个多月后,我想我已经有了解决问题的办法。

900 pdf的pdf被正确地发送电子邮件,而发送1.72MB文件的电子邮件是抛出一个operation timed out error。在让系统运行了很多次之后,我注意到如果pdf在1MB左右,那么电子邮件的发送是正确的。所以,pdf的大小引起了一个问题。当我查看我自己的进程日志时,我意识到正在调用stmpclient.send,在大约1分钟30秒(100秒)后抛出异常。因此,基于此,我得出的结论是,附加和发送大于1MB的文件可能需要超过100秒,因此我的smtpclient.timeout从100秒增加到500秒。它已经运行了几次,它是正确的电子邮件报告,希望这已经修复了我的错误!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26171687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档