1

当我尝试在 Windows XP 中发送带有内联图像的电子邮件时收到错误“SMTP 传入数据超时”,我正在使用 Indy 10 的 tiburon 分支和以下代码发送带有内联图像的电子邮件:

   MB := TIdMessageBuilderHtml.Create;
    try
      MB.PlainText.Assign(Text);
      MB.Html.Assign(FHTML);
      MB.HtmlFiles.Add('c:\Path\to\My\Image.jpg');
      MB.FillMessage(IdMessage);
    finally
      MB.Free;
    end;


  if not IdSMTP.Connected then
    IdSMTP.Connect;
  IdSMTP.Send(IdMessage);

它只是发生在 Windows XP 中,在 Windows Vista 中,电子邮件和内联图像发送得很好。

显然它没有向服务器发送任何内容,它似乎在发送之前卡住了图像。

这是调用堆栈:

 IdReplySMTP        497   +1 TIdReplySMTP.RaiseReplyError
 IdTCPConnection    574   +1 TIdTCPConnection.RaiseExceptionForLastCmdResult
 IdTCPConnection    724  +10 TIdTCPConnection.CheckResponse
 IdTCPConnection    563   +2 TIdTCPConnection.GetResponse
 IdTCPConnection    583   +4 TIdTCPConnection.SendCmd
 IdTCPConnection    696   +4 TIdTCPConnection.SendCmd
 IdSMTP             377   +2 TIdSMTP.DisconnectNotifyPeer
 IdTCPConnection    517   +5 TIdTCPConnection.Disconnect
 IdSMTP             476   +2 TIdSMTP.Disconnect
 IdTCPConnection    828   +2 TIdTCPConnection.Disconnect
 Email              130  +11 TEmail.Destroy
 System            9806   +1 TObject.Free
 EnviarEmail        322  +38 TFormEnviarEmail.Enviar
 System           12106  +38 @HandleFinally
                             RtlUnwind
 System           11589  +83 @HandleAnyException
                             KiUserExceptionDispatcher
                             RtlAppendUnicodeToString
 IdMessageClient    873   +4 EncodeAttachment
 IdMessageClient   1213 +252 TIdMessageClient.SendBody
 IdMessageClient   1244 +283 TIdMessageClient.SendBody
 IdMessageClient   1269  +12 TIdMessageClient.SendMsg
 IdSMTPBase         251   +6 TIdSMTPBase.SendNoPipelining
 IdSMTPBase         436   +4 TIdSMTPBase.InternalSend
 IdSMTPBase         457   +1 TIdSMTPBase.Send
 IdSMTP             415   +6 TIdSMTP.Send
 IdSMTPBase         449   +6 TIdSMTPBase.Send

关于导致它的原因以及如何解决问题的任何线索?

谢谢。

4

3 回答 3

0

您是否确认您可以使用真正的邮件客户端发送相同的邮件,最好是一个简单便携且不集成到系统内部的邮件客户端,例如 Mozilla Thunderbird 或 Opera 包含的邮件客户端?那里可能有防病毒/反垃圾邮件/反任何系统干扰 - 其中许多透明地拦截传出的 25/TCP 并对数据进行处理。

于 2009-04-15T17:32:31.870 回答
0

如果编码不是原因,而是读取超时,您可以使用 ReadTimeOut 属性增加它:

IdSMTP1.ReadTimeOut := 20000;

于 2009-04-15T17:40:48.167 回答
0

问题解决了。

我正在解析一个 HTML 文件以加载图像并将它们附加到电子邮件中,但在 Windows XP 中,路径是:

C:\Documents And Settings\User\Desktop\....

在 html 文件中,这个路径是

C:\Documents%20And%20Settings\User\Desktop\....

因此,内部引发了 File not Found 异常并停止了进程,直到超时,而 Indy 并没有引发它。

在 Windows XP 机器上运行的进程中附加远程调试器后,我在第一次尝试时遇到了异常。

我认为印地“吞没”例外是不正确的,但那是另一段历史了。

于 2009-04-15T19:06:40.067 回答