imapをつかったDoCoMoからGmailへの転送ツールの作成

概要

例えば、プロバイダメールや、スマホメールをGoogleメールに集めたい。でも、Gmailでは、POP3による外部メールの取り込み機能はあるけど、IMAPで取り込みが出来ない・・・
そんな時に以下のスクリプトをどこかに仕掛けておけばOKです!
私は使っていませんでしたが、昔imodeのメールを転送するサービス「imoten」というのがあったようですね。今回のツールはメールを転送するものではなくて(結果そうなっているように見えますが)クライアント動作として、source側からIMAPでとってきて、destination側にIMAPで差し込みをしちゃうだけのツールになります。

事前準備

imap接続に際して、以下の準備が必要です。

  • Gmailの設定で、IMAPアクセスの項目で、IMAPを有効にするを選択
  • googleアカウントの設定で、安全でないデバイスからの接続を許可
  • 各種スマホメールをWifiなどのインターネット経由で閲覧可能にする

手順概要

  1. スクリプトファイルを設置する
  2. cronの設定をする

手順

  1. スクリプトファイルを設置する
    ココでは、設置するファイル名を mailrelaytool.php と、します。
    また、phpは imap, sslをコンパイル時に利用できるようにしており、imap.soをphp.iniもしくは実行時のextensionの設定で利用できる状態である事とします。
    以下のプログラムを /home/USERNAME/bin/mailrelaytool.php に設置したとします。

    ※ここでミソはgmailはPLAINに対応していない事です!
  2. cronの設定をする

    ※cliのphp.iniにextension=imap.so の記述があれば、「-d extension=imap.so」の部分は不要です。

以上です!

その後、修正版。2重起動防止。いつ発動しても良いように、前回取得時間を記憶するようにした版
エラー処理とか手抜きなので、使う時には直してね!

nginx+php5-fpmで504や104のエラーが出たら・・・

504のエラーが出た場合

client—①—nginx—②—php5-fpm—③—mysql

上記の構成として、この場合、②においてnginx—>php5-fpmでphp5の処理が遅くnginxが切断してしまった。
という事なので、nginxのfastcgiのtimeout値を伸ばしてあげる必要があります。

例えば、以下のようなファイルを作成して、nginxを再起動します。

※reloadでも良いかもしれません

104のエラーが出た場合

client—①—nginx—②—php5-fpm—③—mysql

において、php5が処理時間がかかってしまって、nginx—>php5-fpmにクエリは投げられたけど、nginx< ---php5-fpmに返す際に、php5-fpmがコネクションを切っちゃったケース。

php5-fpmのプロセスが足りない場合
→ /etc/php5/fpm/pool.d/www.conf : pm.max_children = 5 や、pm.max_spare_servers = 3を増やす
※ pm = dynamicを確認

mysqlの接続数も増やす 5×3=15だったのを増やした分だけ接続できるように!

ここにイイカンジでまとまってました。