2009-04-15 1 views
1

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

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 

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

Спасибо.

ответ

0

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

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

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

И в HTML файл этот путь был

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

Таким образом, исключение из файла не было создано внутренним образом и прекращение процесса, до таймаута, и Indy не поднимал его.

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

Я не думаю, что это правильно для Indy, чтобы «охватить» исключение, но это еще одна история.

+0

Indy будет ждать системного периода тайм-аута, который довольно долго работает в системе Windows. Я уже был укушен этим. – mjn

0

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

0

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

IdSMTP1.ReadTimeOut: = 20000;

+0

Изменение ReadTimeOut до 20000 привело к исключению EIdReadTimeOut, что это значит? –

+0

Indy сообщает о тайм-ауте, создавая исключение EIdReadTimeOut. Таким образом, это говорит о том, что на самом деле существует только проблема на стороне сервера: сервер не отправлял никаких данных за 20 секунд. – mjn

Смежные вопросы