«Таймаут входящих данных SMTP» при отправке электронной почты со встроенными изображениями с использованием Indy 10 в Windows XP - PullRequest
1 голос
/ 15 апреля 2009

При попытке отправить сообщение электронной почты со встроенными изображениями в Windows XP появляется сообщение об ошибке «Тайм-аут входящих данных SMTP». Я использую ветку тибурона Indy 10 со следующим кодом для отправки сообщений электронной почты со встроенными изображениями:

   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

Любые подсказки о том, что это вызывает и как я могу решить проблему?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 15 апреля 2009

Если кодировка - это не причина, а время ожидания чтения, вы можете увеличить его, используя свойство ReadTimeOut:

IdSMTP1.ReadTimeOut: = 20000;

0 голосов
/ 15 апреля 2009

Проблема решена.

Я анализирую файл HTML, чтобы загрузить изображения и прикрепить их к электронному письму, но в Windows XP путь:

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

И в html-файле этот путь был

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

Таким образом, исключение «Файл не найден» вызывалось внутренне и останавливало процесс до истечения времени ожидания, и Indy не вызывал его.

После подключения удаленного отладчика к процессу, работающему на компьютере с Windows XP, я получил исключение с первой попытки.

Я не думаю, что для Indy правильно "поглотить" исключение, но это другая история.

0 голосов
/ 15 апреля 2009

Подтвердили ли вы, что вы можете отправлять ту же почту с помощью добросовестного почтового клиента, предпочтительно простого и портативного, который не интегрируется в недра системы, например, Mozilla Thunderbird или почтовый клиент Opera? Там может быть антивирус / антиспам / анти-система, которая там вмешивается - многие из них прозрачно перехватывают исходящий 25 / TCP и делают что-то с данными.

...