개발 Q&A

제목 smtp_sock를 이용한 외부 메일 서버로 전송시 전송여부를 판단하려면 ?
카테고리 PHP
글쓴이 람이 작성시각 2017/01/09 15:07:32
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 12213   RSS
function sendmail($name, $from, $to, $subject, $body, $html, $charset ) {
     $smtp_server = "smtp.yourip.com"; //enter your smtp server here
     $smtp_user = "yourusername"; //enter your smtp username here
     if (!$smtp_sock = fsockopen("$smtp_server", 25)) {
          die ("Couldn't open mail connection to $smtp_server! \n");
     }
     fputs($smtp_sock, "HELO $smtp_server\n");
     fputs($smtp_sock, "VRFY $stmp_user\n");
     fputs($smtp_sock, "MAIL FROM:$from\n");
     fputs($smtp_sock, "RCPT TO:$to\n");
     fputs($smtp_sock, "DATA\n");
     fputs($smtp_sock, "From: $name<$from>\n");
     fputs($smtp_sock, "X-Mailer: miplus\n");
     if ($html) fputs($smtp_sock, "Content-Type: text/html;");
     else fputs($smtp_sock, "Content-Type: text/plain;");
     fputs($smtp_sock, "charset=$charser\n"); 
     fputs($smtp_sock, "MIME-Version: 1.0\n"); 
     fputs($smtp_sock, "Subject: $subject\n");
     fputs($smtp_sock, "To: $to\n");
     fputs($smtp_sock, "$body");
     fputs($smtp_sock, "\n.\nQUIT\n");
     fclose($smtp_sock);
}
$name = "보내는 사람 이름"; 
$from = "보내는 사람 이메일 주소";
$to = "받는 사람 이메일 주소";
$subject = "제목";
$body = "내용";
$html = "html 사용여부(1:사용, 0:사용안함)";
$charset = "UTF-8";
sendmail($name, $from, $to, $subject, $body, $html, $charset);

 

이와 같은 소스가 있는데요... 여기서 서버가 연결되었냐 아니냐는 판단이 되지만,

이메일이 잘 갖는지는 알 수 없는 것 같아서...

 

외부 서버메일을 사용해서 메일을 전송하는데... 혹시, 위 소스에서 메일 전송이 정상적으로 발송되었는지 알 수 있는 방법은 없을까요 ?

지금 문제가 되는 

도메인의 maillog (외부 서버)를 확인해 보니

 

Jan  9 16:02:58 localhost sendmail[8431]: v091tS5g006242: to=user@user.com, delay=05:07:30, xdelay=00:00:00, mailer=esmtp, pri=674891, relay=next.net.user.com., dsn=4.0.0, stat=Deferred: next.net.user.com.: No route to host

 

굵게 칠한 부분이 문제인듯 한데ㅠ.ㅜ

이렇게 나오는데.... 이런것들을 에러로 처리하려고 합니다. 그냥 메일이 갔다, 안갔다만 나와도 됩니다.

 

 

 다음글 젠킨스 관련 질문입니다. (3)
 이전글 한테이블에 레코드가 많으면 어떻게 처리해야하나요? (2)

댓글

변종원(웅파) / 2017/01/09 16:29:59 / 추천 0

$return = fputs($smtp_sock, "\n.\nQUIT\n");

리턴 값으로 판단할 수는 있지만 100% 정확하지는 않습니다. (true 나왔다고 100% 전달된게 아니기 때문에 그렇습니다)

 

람이 / 2017/01/09 16:49:06 / 추천 0

웅파님 감사합니다.

일단, 적용은 해 봐야 겠네요.... 적용해서 테스트를 해 보겠습니다.

적용해 보니  No route to host 인데도 성공으로 나오네요.. ㅠ.ㅜ

확실한 방법은 없나 보네요 ㅠ.ㅜ

변종원(웅파) / 2017/01/10 10:04:13 / 추천 1

람이/ 메일 간단한게 아닙니다. ㅎㅎ 

지금 받은 리턴은 내가 보냈다 입니다. 난 에러가 없다이고 조금 있다가 상대쪽에서 리턴이 옵니다. 그걸 케치해야 정확한 에러를 잡을 수 있습니다.

람이 / 2017/01/11 10:59:24 / 추천 0

웅파님 도움 감사드립니다.

구글링을 더 해 보니까.. 그렇더라구요... 젠장 ㅠ.ㅜ

 

혹시,

 

위 소스상에서 파일을 첨부하는 방법 아시나요 ㅋ????

 

구글링 하러갑니다.