메일 송수신 실패시 리턴 메일을 받도록 Return-Path 지정하기

메일 송수신 실패시 리턴 메일을 받도록 Return-Path 지정하기

메일 수신주소나 서버의 이상으로 에러 메일이 반송되는 경우,
이를 Return-Path라는 헤더 정보에 담아둔 주소로 보낼 수 있다.

그런데 보통의 웹호스팅 사이트들이 이를 코딩에서 조정하는 것을
우선으로 하지 않고 해당 서버명이 들어간 메일어드레스로 강제지정하는 경우가 많다.

http://drupal.org/project/returnpath
이런 경우에 Return-Path 모듈을 사용하면,
드루팔 메일 센드 drupal_mail_send함수를 이용한 Return-Path의 지정이 가능하다.

--- 2010.09 추가 ---

최근 한 프로젝트에서, 리턴 패스가 제대로 작동하지 않고 호스팅 회사의 주소가 그대로 보이는 경우가 있었다. 소스 상에도 모듈 설정 상에도 문제는 없었다.
한참 조사한 뒤에 알았는데 - "모듈의 해제 후 재설정"에도 무반응이었으나 -
"모듈의 해제 후 언인스톨!(모듈 화면에 있다. 디비 설정도 몇몇 청소한다)하고 재설정"했더니 문제 현상이 고쳐졌다.
귀한 정보를 주신 ta님에게 감사 드린다.

댓글

최근에 메일관련 모듈인 sendmail모듈 대신

최근에 메일관련 모듈인 sendmail모듈 대신 postfix 모듈을 사용하는 서버에 사이트를 이관하는 작업이 있었는데 위의 코드를 사용하면 메일의 'From'부분에 "Apache"라고 표시되는 에러현상이 있었습니다. (메일 송수신에는 문제 없음) 확인해본 결과 헤더부분에 'From'부분이 포함되어 있지않아서 서버의 디폴트 값이 출력되었었습니다. 아래에 에러수정한 소스 남깁니다. $MAIL_ADDR_FROM = "reply-to-sample@bulabula-test.com"; $headers = array( 'MIME-Version' => '1.0', 'Content-Type' => 'text/plain; charset=UTF-8; format=flowed; delsp=yes', 'Content-Transfer-Encoding' => '8Bit', 'Return-Path' => $MAIL_ADDR_FROM, 'Reply-To' => $MAIL_ADDR_FROM, 'X-Mailer' => 'Drupal', 'from' => $MAIL_ADDR_FROM, ); // $body : Mail Body. $message = array( 'body' => $body, 'headers' => $headers, ); // $to : Mail Address for Recipient. $message = array_merge($to, $message); drupal_mail_send( $message );

위 리턴 패스를

위 리턴 패스를 적용한 발송 소스 예제입니다.
발신자(송신자)의 주소가 Hosting 회사의 주소 대신에
소스에 지정한 메일 주소로 바뀝니다.


$MAIL_ADDR_FROM = "reply-to-sample@bulabula-test.com";

// Build the default headers
$headers = array(
    'MIME-Version'      => '1.0',
    'Content-Type'       => 'text/plain; charset=UTF-8; format=flowed; delsp=yes',
    'Content-Transfer-Encoding' => '8Bit',
    'Return-Path' => $MAIL_ADDR_FROM,
    'Reply-To' => $MAIL_ADDR_FROM,
    'X-Mailer'   => 'Drupal'
);

// $body : Mail Body.
$message = array(
    // 'id'   => 'mail_notice',
    'from'     => $MAIL_ADDR_FROM,
    // 'language' => user_preferred_language($user_info),
    'body'     =>  $body,
    'headers' => $headers,
);

// $to : Mail Address for Recipient.
$message = array_merge($to, $message);

drupal_mail_send( $message );