ドコモメールを自宅サーバで受信してGmailに転送

やっとこさ docomo.ne.jp なメールも公式にIMAP経由で受信できるようになったので、Gmailに転送できるようになった。
ただ、GmailはPOP3しか対応していないので、自宅のLinuxサーバでfetchmailを使いIMAP受信をしてGmailに転送することとした。

これでうんざりする迷惑メールもGmailの優秀なフィルタで排除されるし、携帯のメールもGmailにアーカイブしておけるようになった。

fetchmailインストール

# aptitude install fetchmail

設定ファイル作成
# vi /etc/fetchmailrc

poll imap.spmode.ne.jp
proto imap
uidl
timeout 30
username “docomo ID”
password “docomo IDパスワード”
smtpname “kuniharumaki+docomo@gmail.com”
smtphost “localhost”
idle
no mimedecode
keep
ssl

パスワード直書きなのでパーミッション注意
# chmod 600 /etc/fetchmailrc

デーモンとして起動するように設定
# vi /etc/default/fetchmail

OPTIONS=–syslog
START_DAEMON=yes

起動してメールがGmailに転送されてるか確認して終わり
# /etc/init.d/fetchmail start

動作状況はsyslogに出力されてるので確認する。
daemonとして起動させておくと、ほぼメールの着信と同時に転送がかかる。

参考情報: ドコモメールアプリ以外のメールソフトでのご利用方法
https://www.nttdocomo.co.jp/service/docomo_cloud/docomo_mail/function/other/index.html

wp-mta導入 メールで投稿可能に (Postfix+procmail使用)

配布元:WordPress Plugins/JSeries » wp-mta
せっかく自宅サーバだし、MTAも自由に触れる環境にあるのでwp-mtaの導入をしてみることに。
このスクリプトはメールサーバにメールが着信したタイミングで実行されるため、WordPressの標準機能にあるメールでの投稿に比べるとメール送信から反映されるタイムラグが無くて良い。

設置方法は、ほぼ配布元にある手順どおり。
違う部分は.forwardを使う部分をprocmailに変えたくらい。あとはスクリプトがウチの環境だと上手く動かなかったところを簡単に手直しさせてもらいました。

procmailを使っている理由は、Postfixでのメール配信にvirtualを使っていて.forwardが使えなかったため。メール受信時にこのスクリプトがキックできれば方法は何でも良いはず。(実際うまくいきました)

1.まず設定書き換え (デフォルトのままで使いました)

2.PEAR::Mail::mimeDecode.php インストール
とりあえず入っているか確認。

# pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.2 stable
Console_Getopt 1.2.3 stable
PEAR 1.6.1 stable
Structures_Graph 1.0.2 stable

で、入っていないっぽいので、pear install コマンドでサクッと。

# pear install Mail_mimeDecode
downloading Mail_mimeDecode-1.5.0.tgz …
Starting to download Mail_mimeDecode-1.5.0.tgz (9,281 bytes)
…..done: 9,281 bytes
downloading Mail_Mime-1.5.2.tgz …
Starting to download Mail_Mime-1.5.2.tgz (22,176 bytes)
…done: 22,176 bytes
install ok: channel://pear.php.net/Mail_mimeDecode-1.5.0
install ok: channel://pear.php.net/Mail_Mime-1.5.2

3. ~/.procmailrc レシピ追加

:0
* ^To: hogehoge@example.com ←受信用のメールアドレスに変更
|/usr/bin/php [wordpress-root]/wp-mta.php

4.wp-mta.php コメントアウト (12-15行目)
[php num=12]
#if (! defined(‘WPMTA_DEBUG’) && ! isset($_SERVER[‘RECIPIENT’])) {
# echo “Oops! Not launched from dot-qmail/dot-forward file!\n”;
# exit;
#}
[/php]

5.wp-mta.php function yn_photo_sub_dir修正 (415行目付近・ちょっとずれてるかも…)
なぜか mkdirでの再帰作成時のパーミッションがYYYYは700で、MMは755で作成され、画像表示が出来ないためMMのみでなく、YYYYも強制的にchmodするようにした。
mkdirをrecursiveで実行した際にそうなるっぽいのだが、原因不明。切り分けはきちんと出来ていないが、まあ、自分が使うだけのスクリプトなのでよしとする。
使用中のPHPバージョンは PHP 5.2.0-8+etch7 (cli) (built: Jul 2 2007 21:46:15)、ウチだけかなぁ。
[php num=415]
function yn_photo_sub_dir($post_time_local) {
$dir = WPMTA_PHOTO_DIR . gmdate(‘Y/m’, $post_time_local);
$dir2 = WPMTA_PHOTO_DIR . gmdate(‘Y’, $post_time_local); //これ追加
if (! is_dir(ABSPATH . $dir)) {
if (! mkdir(ABSPATH . $dir, 0755, TRUE)) {
echo “Error: Can’t create thumbnail folder.\n”;
return WPMTA_PHOTO_DIR;
}
chmod(ABSPATH . $dir2, 0755); //これ追加
chmod(ABSPATH . $dir, 0755);
}
return $dir . “/”;
}
[/php]

6.wp-mta.php 一部変更 冒頭
dot-qmailからの呼び出しかどうかをチェックしている部分があるが、その代わり。上記でコメントアウトした部分の下に。
コマンドライン引数が空だったら、CLIで実行されていないものとしてサイトのトップページにリダイレクト。
放っておいても実害は無いが、ちょっと気持ち悪いので。
ただし、結果的に多分動いているからOKレベルなので、この実装で本当に正しいかは謎。
[php]
// —– Check if launched from CLI —–
if (! defined(‘WPMTA_DEBUG’) && ! $argc > 0) {
$host = $_SERVER[‘HTTP_HOST’];
$uri = rtrim(dirname($_SERVER[‘PHP_SELF’]), ‘/\\’);
header(“Location: http://$host$uri/”);
exit;
}
[/php]

これで、wp-contensの下にphotosディレクトリを作成して、メール受信ユーザのIDにchownしておけば動作する。
便利なスクリプトを公開して下さったyuriko氏に感謝!

2007-08-02追記
function yn_images2htmlの一部修正。
WordPressを/(ルート)にインストールしてるのですが、その場合、画像へのリンクのURLに/が1つ多く付いてしまうので。
[php]
$short_url = preg_replace(‘#^https?://[^/]*/?#’, ‘/’, get_bloginfo(‘wpurl’)) . ‘/’;

$short_url = preg_replace(‘#^https?://[^/]*/?#’, ‘/’, get_bloginfo(‘wpurl’));
[/php]
相変わらず結果オーライの場当たり的対応です。。。