初めてのシステムと日記

システムも日記も初めてです。

VERP形式でのバウンスメール対応

■やりたいこと

Return-toにユーザーのメールアドレスを付加して、

バウンスメールが帰ってきたらReturn-toからユーザーメールアドレスを取得する。

バウンスメールのbodyからユーザーメールアドレスを正規表現でごりごり取得するのは

メール内容によってはミスする可能性があるので上記方法で取得します。

To:user-test@hoge.com //ユーザーのメールアドレス
From:system-test@test.com //システムメール
Return-to:system-test+user-test=hoge.com@test.com //バウンスメール先
(システムメルアド+ユーザーメルアド=ユーザードメイン@システムドメインの形式)

メール環境

・メールサーバー:Postfix

・ライブラリ:qdmail


これをPostfixのVERP形式での送信を用いて対応してみます。


■PosftfixのVERP設定

VERP設定にはまずパラメーターを設定します。

default_verp_delimiters (デフォルト値: +=)
  VERP送信を行ったが、区切り文字を指定しなかったときに使用されるVERPの区切り文字。
  下のverp_delimiter_filterが指定されなかったら利用される。

verp_delimiter_filter (デフォルト: -+=)
  sendmailやSMTPでのVERP送信で使用する区切り文字。@や%などすでにメールアドレスで特別な意味を持つ文字は利用できない。
  なので上のReturn-toのユーザーアドレスはuser-test@hoge.comではなくuser-test=hoge.comになっている。

smtpd_authorized_verp_clients (デフォルト値: none)
  VERP形式の送信で要求できるSMTPクライアント。今回はデフォルトのまま。

disable_verp_bounces (デフォルト: no)
  複数の受信者を持つVERPメールに対して1つのバウンスレポートを送るか、受信者ごとにバウンスメールを送るかの指定。
  今回は複数の受信者には送らないのでデフォルト値のまま。


■qdmailでのVERP送信

http://hal456.net/qdsmtp/xverp

fromを指定するところにXVERPを追記します。

require_once('qdsmtp.php');

$param = array(
    'host'=>'smtp.example.com',
    'port'=> 25 ,
    'from'=>'<from@example.com> XVERP',
    'protocol'=>'SMTP',
);
$smtp = & new QdSmtp($param);


■上記以外のVERP送信

SMTPサーバー(メーラー)

MAIL FROM:<sender@domain> XVERP

MAIL FROM:<sender@domain> XVERP=+= // VERPパラメーターをFROMの中で指定。

sendmail

% sendmail -V -f owner-listname ....

% sendmail -V+= -f owner-listname .... // VERPパラメーターを-Vの中で指定。