Windows XP에서 Indy 10을 사용하여 인라인 이미지와 함께 이메일을 보낼 때 "SMTP 수신 데이터 시간 초과"
-
09-09-2019 - |
문제
Windows XP에서 인라인 이미지가 포함 된 이메일을 보내려고 할 때 "SMTP Incoming Data Timeout"오류가 발생하고 있습니다. Inline 이미지가 포함 된 이메일을 보내기 위해 Indy 10의 Tiburon Branch를 사용하고 있습니다.
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
문제 해결됨.
이미지를로드하고 이메일에 첨부하기 위해 HTML 파일을 구문 분석하고 있지만 Windows XP에서 경로는 다음과 같습니다.
C:\Documents And Settings\User\Desktop\....
그리고 HTML 파일 에서이 경로는이 경로였습니다
C:\Documents%20And%20Settings\User\Desktop\....
따라서 파일을 찾지 못한 파일은 내부적으로 제기되어 프로세스를 중지하고 타임 아웃까지 INDY가 제기하지 않았습니다.
Windows XP 시스템에서 실행되는 프로세스에 원격 디버거를 연결 한 후 첫 번째 시도에서 예외가 생겼습니다.
나는 인디가 예외를 "engulf"하는 것이 옳다고 생각하지 않지만 그것은 또 다른 역사입니다.
다른 팁
모질라 썬더 버드 (Mozilla Thunderbird) 나 오페라 (Opera)가 포함 된 메일 클라이언트와 같이 시스템의 창자에 통합되지 않는 간단하고 휴대용이있는 것이 바람직한 휴대용 메일 클라이언트로 동일한 메일을 보낼 수 있음을 확인 했습니까? 안티 바이러스 / 안티 스팸 / 방지 시스템이 방해하는 시스템이있을 수 있습니다. 그 중 다수는 투명하게 나가는 25 / TCP를 가로 채고 데이터에 대한 작업을 수행합니다.
인코딩이 이유가 아니라 읽기 타임 아웃 인 경우 readtimeout 속성을 사용하여 늘릴 수 있습니다.
idsmtp1.readtimeout : = 20000;