자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi 이메일 질문입니다.
2019.08.26 11:24
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
사용툴: Xe8
구글을 이용한 이메일 전송 구현 중입니다.
//Email : TidMessage
SMTP.Host := 'smtp.gmail.com';
SMTP.Port := 465;
SMTP.Username := 'id';
SMTP.Password := 'pass';
SMTP.UseTLS := utUseImplicitTLS
Email.From.Address := '보내는 사람';
Email.ReplyTo.EMailAddresses := '메일 미수신에 대한 리턴을 받을 사람'
Email.Recipients.EmailAddresses := '메일 받는사람'
Email.Subject := '제목';
Email.Body.Text := '본문내용';
Email.CharSet := 'UTF-8';
SMTP.Connect;
SMTP.Send(Email);
전송은 잘됩니다.
질문: Recipients.EmailAddresses 가 존재하지 않는 이메일 주소일 경우 이에 대한 회신이 ReplyTo.EMailAddresses 으로
회신이 되지 않고 SMTP.Username 으로 들어옵니다.
제가 뭘 잘못 알고 있는 건지? 아님 설정이 빠진게 있나요.?
항상 좋은 답변에 감사드립니다.
좋은 날 되세요.
댓글 2
Delphi 이메일 질문입니다.
2019.08.26 11:24
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
사용툴: Xe8
구글을 이용한 이메일 전송 구현 중입니다.
//Email : TidMessage
SMTP.Host := 'smtp.gmail.com';
SMTP.Port := 465;
SMTP.Username := 'id';
SMTP.Password := 'pass';
SMTP.UseTLS := utUseImplicitTLS
Email.From.Address := '보내는 사람';
Email.ReplyTo.EMailAddresses := '메일 미수신에 대한 리턴을 받을 사람'
Email.Recipients.EmailAddresses := '메일 받는사람'
Email.Subject := '제목';
Email.Body.Text := '본문내용';
Email.CharSet := 'UTF-8';
SMTP.Connect;
SMTP.Send(Email);
전송은 잘됩니다.
질문: Recipients.EmailAddresses 가 존재하지 않는 이메일 주소일 경우 이에 대한 회신이 ReplyTo.EMailAddresses 으로
회신이 되지 않고 SMTP.Username 으로 들어옵니다.
제가 뭘 잘못 알고 있는 건지? 아님 설정이 빠진게 있나요.?
항상 좋은 답변에 감사드립니다.
좋은 날 되세요.
https://stackoverflow.com/questions/46976173/check-if-email-was-sent-delphi-indy10
위의 자료를 보시면 다음과 같습니다.
수신자가 복수일경우, TIdSMTP가 실패한 수신자를 건너 뛰고 나머지 수신자에게 이메일을 계속 보냅니다. 모든 수신자가 실패한 경우에만 TIdSMTP가 송신에 실패합니다 (물론 다른 수신자 이외의 오류가 발생하지 않는 한).
SMTP 서버에 전자 메일을 보내면 실제로 수행하는 작업은 전자 메일을 서버에 전달하는 것이므로 지정된 수신자에게 전자 메일을 배달하려고 시도하는지 여부를 다시보고합니다. 배송에 대한 보장은 없습니다.
지정된 수신자가 해당 서버 / 도메인에 로컬 인 경우 수신 SMTP 서버는 SMTP RCPT TO 명령에 대한 응답으로 이메일을 해당 수신자에게 전달할지 여부를 즉시보고 할 수 있습니다. TIdSMTP는 TIdSMTP.OnFailedRecipient 이벤트를 통해 또는 예외를 발생시켜 이러한 오류를 코드에보고 할 수 있습니다.
그러나 전자 메일을받는 사람에게 즉시 배달 할 수없는 경우 일반적으로 다른 서버로 전달되어 (잠재적으로 여러 번) 비동기식으로 배달되어야하며, 전자 메일을 초기 서버에 제공 한 후에야 배달이 이루어지지 않습니다.
따라서 해당 배달 중에 발생하는 오류는 TIdSMTP에서보고 할 수 없습니다. 전자 메일을 배달하지 못한 SMTP 서버 (연결된 서버와 같거나 전자 메일이 릴레이 된 다른 서버 일 수 있음)는 발생한 오류를 설명하는 전자 메일을 원래 보낸 사람의받은 편지함으로 다시 보냅니다. .
따라서 이러한 종류의 오류를 감지하려면 POP3 또는 IMAP 등의받은 편지함을 정기적으로 확인한 다음 전자 메일을 구문 분석하여 자세한 내용을 확인해야합니다. 이러한 오류는 오류의 특성, 지정된 서버가 포기하기 전에 재 시도하는 시간 등에 따라 도착하는 데 시간이 다소 걸릴 수 있습니다. 따라서 응답을 다시받는 데 몇 분, 몇 시간 또는 며칠이 걸릴 수 있습니다.
일반적으로 지정된 수신자가 적시에 유효한지 알 수있는 확실한 방법은 없습니다. SMTP가 작동하도록하고 오류를 비동기 적으로 처리해야합니다.
그러나 확인해야하는 경우 한 가지 방법은 TIdDNSResolver를 사용하여받는 사람 도메인의 MX 레코드를 조회 한 다음 TIdSMTP를 해당 도메인 서버에 연결하고 TIdSMTP.Verify ()를 호출하여받는 사람이 있는지 확인하는 것입니다. 해당 서버에서. 그러나이를 위해서는 서버가 SMTP 프로토콜 사양에서 선택적인 SMTP VRFY 명령을 구현해야하며, 지식 유출을 피하기 위해 최신 서버에서는 구현할 수 없으며 취약성 허점을 피할 수 있습니다.