verpを使いたくて、メールをcatch-allしたかったのですが、さくらインターネットのレンタルサーバーはMTAにsendmailを使用している為出来ません。なのでgmailを一旦介して受け取るようにします。設定が複雑なので、そのときのメモを残しておきます。前提条件として
- さくらインターネットの共有レンタルサービスを使用している。
- さくらのドメインを使用している。
作業手順
- google APPを登録
- さくらのドメインでゾーン編集を行う
- さくらのレンタルサーバードメイン設定
- gmail側の設定
- さくら側メール設定
- verp処理プログラム
…あまりにも作業内容が長いので以下要点だけ
google APPを登録
ここでアカウントを登録無料のアカウント登録
さくらのドメインでゾーン編集を行う
1.まずはcatch-allしたい独自ドメインexample.comをgoogle APPに認証する為にgoogle APPで発行されたgoogleXXXXXXXXXXXXをサブドメインとして登録します。
googleXXXXXXXXXXXXXXXX CNAME google.com.
※google.com.の行末の.(ドット)を付け忘れないように注意してください。2.次に認証が通ったらgoogle APPのMXを登録します。ここで元から設定されていたさくらへのMXは削除します。3.SPFを記述します。google APPからの送信と、さくらの共有サーバーからの送信を許可しておきます。※SPFの設定についてはこちらを参照させて頂きました。
@ NS ns1.dns.ne.jp. NS ns2.dns.ne.jp. MX 10 ASPMX.L.GOOGLE.COM. MX 20 ALT1.ASPMX.L.GOOGLE.COM. MX 20 ALT2.ASPMX.L.GOOGLE.COM. MX 30 ASPMX2.GOOGLEMAIL.COM. MX 30 ASPMX3.GOOGLEMAIL.COM. MX 30 ASPMX4.GOOGLEMAIL.COM. MX 30 ASPMX5.GOOGLEMAIL.COM. TXT "v=spf1 +a:wwwXXX.sakura.ne.jp include:_spf.google.com ~all" googleXXXXXXXXXXXXXXXX CNAME google.com. mail A AAA.BBB.CCC.DDD ftp A AAA.BBB.CCC.DDD www A AAA.BBB.CCC.DDD
※ 注意)NSはさくらのDNSに自動的に設定されるのでここでは設定しないように、設定するとおかしくなります。
さくらインターネットのレンタルサーバー側(WEBサーバー)のドメイン設定
通常のさくらのドメインを使用する設定ではなく『他社で取得、または他社で管理中のドメインを移して使う>> ドメインの追加へ進む (非推奨)』で追加するようにします。
gmail側の設定
ret+*@example.comに来たメールをret-XXX@XXXXXX.sakura.ne.jpの固定アドレスへ転送するように設定します。verpは本当は-(ハイフン)を使うので本来はret-*@example.comなのですが、gmailのエイリアス機能は+なので+を使います。 ちなみに+記号をメールアドレスに使うのはRFCに準拠してないです。なので、gmailのエイリアスはWEBサービスの登録に使う場合に使えないことが多いです。ちなみに+文字はメールアドレスでは特別な意味を持ちます。あんまり使わないので詳細は忘れました(笑)。話が脱線しましたが、verpでは問題ないのでこんな設定で行きます。※ 尚、gmailのキャッチオールアドレス機能は使いません。エイリアス機能のみ使います。1.新しいユーザーを作成
姓 return 名:addressユーザー名: ret @example.com
2.新しいユーザーでログイン3.メール転送とPOP/IMAP設定
次の宛先にメールを転送受信メールをXXX@XXX.sakura.ne.jpに転送しメールのコピーを削除
さくら側メール設定
/HOME/ユーザー名/Mailbox/XXX/.mailfilter
.mailfilterの設定内容はこんな感じ
to "| /home/ユーザー名/bin/verp.php 2>&1 >> /home/ユーザー名/logs/verp.log"
でVERPを処理するプログラムを記述テスト中は上の用にログを吐いておくとデバックしやすいが、放置しておくとログがサーバーのディスク容量を圧迫するので、安定稼動したら以下のように/dev/nullに捨てておくこと。
to "| /home/ユーザー名/bin/verp.php 2>&1 >> /dev/null
verp処理プログラム
qmailでは環境変数(Return-Path)から取り出していたところをメールヘッダーのDelivered-Toあたりを抜き出してret+hogehoge=sample.com@example.jpを処理する。くどいようですが”-”を”+”に変えるのを忘れない。phpのプログラムサンプル
#!/usr/local/bin/php -q< ?$prefix = "ret";$delimiter = '+';$delimiter = preg_quote($delimiter);$domain = "example.com";$domain = preg_quote($domain);$alnum = "a-zA-Z0-9";$target = "Delivered-To"; $regex ='/'."^".$target.": ".$prefix.$delimiter."("."[{$alnum}_.-]+"."=[{$alnum}_.-]+."."[{$alnum}]+".")"."@".$domain.'/';echo "正規表現: ".$regex."n"; $buffer = file("php://stdin");foreach($buffer as $buf){ if(!$is_body and preg_match($regex,$buf,$match)){ $verp = $match[1]; $verp = str_replace("=","@",$verp); echo "VERPアドレス: ".$verp."n"; } if(preg_match("/^(n|rn|r)$/",$buf)){ $is_body = true; }}print_r($buffer);