쉽지 않은 부분입니다. 일반적으로 메일보내는 프로그램은 지정해 놓은 SMTP서버에 메일을 일방적으로 보내는 방식입니다. (릴레이라 합니다.)
그러고 나면 SMTP서버가 받을 사람 주소를 분석하여 (@표시 뒷부분에 있는)해당 메일서버의 IP를 알아냅니다.(DNS 룩업을 이용하여.. 예컨데 ...@hotmail.com의 메일서버 주소는 211.233.30.140이런식으로)
그리고는 그 서버로 메일을 다시 보내주는 일을 하죠 이때 메일발송에 실패할 수 있구요(해당메일서버에 그런 계정이 없을 경우에 주로 발생합니다.) 그러면 발송되지 않은 메일을 SMTP서버가 다시 갖게 되는 데 이것이 바로 반송된 메일이 되는 것이죠
즉, 메일을 지정한 SMTP에 보낼때는 메일주소 형식 자체에 문제가 있거나 SMTP서버 접속에 실패하지 않는 한 오류가 발생하지 않는다는 점입니다.
이것을 해결하려면 개발하고자 하는 메일 프로그램이 SMTP서버를 통해 릴레이 하지 말고 직접 DNS룩업을 통해 메일받을 사람의 메일서버 IP를 알아낸다음 그 IP를 기존의 SMTP호스트 열듯이 접속하여 메일을 직접 넣는 것이죠 말하자면 아까 말한 SMTP서버가 대행하는 역할을 직접 구현하는 겁니다. 이 때 발생하는 오류는 감지할 수 있구요. 이 오류를 처리하면 메일발송 실패에 대한 처리나 로그를 남길 수 있습니다
사실 해당 메일주소에 나와있는 메일 서버주소의 IP만 알고 있으면 나머지 과정은 기존과 똑같은데 그 IP를 알아내는 과정을 코딩해야 한다는 점이 좀 까다롭겠죠 직접 프로토콜을 이용하려면 UDP통신에 대해 알아야 하지만, Indy같은 컴포넌트를 쓰시면 DNS룩업 컴포넌트가 있습니다. (강추) Indy사이트에서 컴포넌트와 함께 예제를 다운받으시면 DNS룩업 예제가 있으니 별로 어렵지 않게 해결할 수 있을 듯...
그러고 나면 SMTP서버가 받을 사람 주소를 분석하여 (@표시 뒷부분에 있는)해당 메일서버의 IP를 알아냅니다.(DNS 룩업을 이용하여.. 예컨데 ...@hotmail.com의 메일서버 주소는 211.233.30.140이런식으로)
그리고는 그 서버로 메일을 다시 보내주는 일을 하죠 이때 메일발송에 실패할 수 있구요(해당메일서버에 그런 계정이 없을 경우에 주로 발생합니다.) 그러면 발송되지 않은 메일을 SMTP서버가 다시 갖게 되는 데 이것이 바로 반송된 메일이 되는 것이죠
즉, 메일을 지정한 SMTP에 보낼때는 메일주소 형식 자체에 문제가 있거나 SMTP서버 접속에 실패하지 않는 한 오류가 발생하지 않는다는 점입니다.
이것을 해결하려면 개발하고자 하는 메일 프로그램이 SMTP서버를 통해 릴레이 하지 말고 직접 DNS룩업을 통해 메일받을 사람의 메일서버 IP를 알아낸다음 그 IP를 기존의 SMTP호스트 열듯이 접속하여 메일을 직접 넣는 것이죠 말하자면 아까 말한 SMTP서버가 대행하는 역할을 직접 구현하는 겁니다. 이 때 발생하는 오류는 감지할 수 있구요. 이 오류를 처리하면 메일발송 실패에 대한 처리나 로그를 남길 수 있습니다
사실 해당 메일주소에 나와있는 메일 서버주소의 IP만 알고 있으면 나머지 과정은 기존과 똑같은데 그 IP를 알아내는 과정을 코딩해야 한다는 점이 좀 까다롭겠죠 직접 프로토콜을 이용하려면 UDP통신에 대해 알아야 하지만, Indy같은 컴포넌트를 쓰시면 DNS룩업 컴포넌트가 있습니다. (강추) Indy사이트에서 컴포넌트와 함께 예제를 다운받으시면 DNS룩업 예제가 있으니 별로 어렵지 않게 해결할 수 있을 듯...
델초버자 wrote:
> 메일보내는 프로그램을 만들고 있습니다.
> 근데, 보내는것은 되는데 한가지 알고 싶은게 있어요
> 메일주소가 잘못되거나하면, 메일이 않가고 반송되자나여
>
> 이걸 매일보내면서 알수 없을까요
> 다시말하면
> 반송되는 사람을 알고 싶어서요
>
> 아시는분 좀 갈켜주세요
>
> 즐프 하세요