웹에서 메일 보내기

nalrim의 이미지

웹에서 메일을 보내면 제목이 Mail Delivery Subsystem 이런 메세지가 날라옵니다.
내용은..

The original message was received at Fri, 2 Mar 2007 08:26:24 +0900
from apache@localhost
 
  ----- The following addresses had permanent fatal errors -----
@localhost
 
  ----- Transcript of session follows -----
553 5.1.3 @localhost... User address required
 
 
Final-Recipient: RFC822; @localhost
X-Actual-Recipient: rfc822; "553 User address required"@localhost.localdomain
Action: failed
Status: 5.1.3
Last-Attempt-Date: Fri, 2 Mar 2007 08:26:24 +0900

sendmail 설정에 문제가 있는건지 php로 만든 스크립트에 문제가 있는건지
아니면 다른 문제인지 모르겠습니다.

sendmail 설정은 별다른게 없고 access에 릴레이 할 호스트명들을 적어줬습니다.
대신 iptables로 접근제한을 했습니다.

이렇게 하고나니 access에 등록한 호스트에서 smtp를 사용할때는
아이디와 비밀번호 없이도 메일전송이 되더군요.
혹시 이게 문제의 발단인지 모르겠습니다.

그리고 php로 만든 스크립트는 예전부터 잘 쓰던거라 문제가 없을꺼라 보지만
한번도 남에게 검증받은 적이 없어서 혹시나해서 올려봅니다.
<?php
require_once('Mail.php');
require_once('Mail/mime.php');

$body = $_POST['body_mail'];

$headers = array(
'From' => 'manager@gmail.com',
'To' => $_POST['to_mail'],
'Subject' => $_POST['subject_mail']
);

// 참조자에는 항상 메일관리자 이메일주소를 추가하여 모니터링.
$recipients = $_POST['bcc_mail'] . ",postmaster@gmail.com";

$mime = new Mail_mime();
$mime->setHTMLBody($body);

$encoded_body = $mime->get($msg_build_param);
$encoded_headers = $mime->headers($headers);

$params['sendmail_path'] = '/usr/lib/sendmail';
$mail =& Mail::factory('sendmail', $params);

$mail->send("", $encoded_headers, $encoded_body);
?>

무엇이 문제일까요?

ibin의 이미지

아래처럼 보낸사람주소(회신주소)가 'apache@localhost'로 잘못 지정되어 나가면서 발생하는 문제로 추측됩니다만...

http://passkorea.net/support/FAQ/ViewDoc.aspx?cat=11&docNo=28977

nalrim의 이미지

헤더에는 분명히 From에 실제 존재하는 이메일 주소가 붙어있었습니다.

김정균의 이미지

문제는 return-path 에 apache@localdoamin.localhost 가 붙는다는 얘기죠.

그리고, 일단 localhost.localdomain 이 붙었다는 얘기는 님의 서버의 hostname 이 FQDN 으로 설정이 안되어 있다는 것으로 이것도 문제중에 하나 입니다.

Header 는 user define hedaer 이고, return-path 는 MTA 가 붙이는 헤더 입니다. 아, 물론 return-path 도 위조가 가능하기는 합니다. :-)

ibin의 이미지

김정균님이 잘 설명해주셨네요.

보낸사람주소(회신주소)... 즉 return-path 를 제가 알려드린 주소의 방법을 참고하셔서
실제 존재하는 메일계정으로 지정해서 다시 발송테스트를 해보셔야 할겁니다.

nalrim의 이미지

헤더에 return-path를 쓴 상태이고 알려주신 방법을 써봤지만 여전히 동일한 오류 메일이 날라옵니다.

ibin의 이미지

메일로그를 통해 보낸사람 주소가 어떻게 기록되는지 확인해보셔야 할 것 같습니다.
tail -n50 /var/log/maillog

nalrim의 이미지

로그에도 @localhost.. 와 같이 User address가 없다는 동일한 오류메세지가 남아있습니다.
다른 방법을 쓸수없는 상황이라서 해결되면 이곳에 다시 쓰겠습니다.

참고로 웹에서 php와 같은 스크립트를 사용하면 이런 오류가 발생하지만
이메일 에이젼트나 프로그램을 사용하면 정상적으로 메일이 발송됩니다.

ibin의 이미지

PHP의 PEAR Class를 사용하신 듯 한데 이 경우 문제없이 발송이 되어야 정상인데 이상하군요.
지금처럼 발송방법을 sendmail 을 사용하도록 해두었다면
'From'헤더의 값을 MTA에서 return-path로 사용하도록 설정됩니다.
ex) /usr/lib/sendmail -fUserID@domain.com

PEAR Class가 문제(구버젼 등)가 있거나 sendmail 에서 '-f'옵션을 인식하지 못하는게 아닐까 추측됩니다.

PEAR Class 문제가 아니라면 발송방법을 'sendmail'이 아닌 소켓방식으로 변경해서 테스트해보시는게 어떨까요?

nalrim의 이미지

호스트명을 FQDN으로 변경하고나서는 잘 되네요.
PEAR의 Mail_Mime 클래스내에서 헤더를 설정해놓은게 무시되는것 같습니다.
정확한건 아니지만 $mime->headers() 메소드는 잘 동작하는데 Mail 클래스의 send 메소드에서는
헤더가 무시되고 sendmail 서버의 설정을 따르는것 같습니다.

nalrim의 이미지

FQDN으로 해보니 스팸으로 처리가 되는듯 하네요.
일단 성공이다 싶었는데.. 잠시 기다리니 역시 동일한 오류메세지가 날라옵니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.