2009/1/15 木曜日

gmailで迷惑メールにならないようにする。

Filed under: gmail — admin @ 0:29:08

さくらインターネットでcatch-allする方法でしたが、実は失敗します。
というのは、gmailがMailer-Daemonを迷惑メールとして判定してしまうため
そこで、転送が止まってしまうからです。

基本的に、どうにもならないとwikipediaにも書かれていましたが、
世の中どうにかしている人はいるもので、こちらの記事を参考にして設定してみました。
Gmailの迷惑メールフィルタを無効にする

なんとか無事にできたようです。

あとは、ここの記事にも書かれていますが、定期的にログインさせないといけないみたい。

No Tags

2009/1/14 水曜日

さくらインターネットでメールをcatch-allしたい。(失敗編)

Filed under: gmail, sakura — admin @ 14:29:47

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);

No Tags