メール投稿の設定

必要なもの

sendmailコマンド

adiaryからメールを送信するために使用します。どの MTA(メール送信デーモン)でも付属していると思います。通常パスは自動で発見するので大丈夫です*1レンタルサーバでは利用出来ることが多いようです*2

adiaryからインストールされているサーバにおいて、sendmailコマンド((sendmail互換送信コマンド。メール送信デーモンはsendmailに限らずなんでも構いません))がインストールされ、外部に向けてメールが送信できる状態である必要があります。

専用メールアドレス

adiaryへの投稿に使用する(投稿を受け取るために使用する)専用のメールアドレスが必要です。普段使用しているメールアドレスと共用することはできません(次々とメールが消えていきます。危険です)。

メールは、pop(apop含む)で処理する方法と、Webサーバと同じサーバで動くメールサーバを利用するか fetchmail+procmail を使いメールから直接起動する方法の2種類に分かれます。

*1 : /usr/sbin/sendmail, /usr/bin/sendmail /usr/lib/sendmail の順で検索します。

*2 : 詳細はレンタルサーバの情報をご確認ください

共通

  • mail.cgi がない場合は mail.cgi.orig をリネームしてください。
  • mail.cgi に実行権限を付けてください(0755)。
  • mail.conf.cgimail.conf.cgi.sample をリネームして生成してください。
  • メール投稿を利用するが、画像アップロードを使用しないという場合は、mail.conf.cgi の <$_call('uploader.conf.cgi')><$_call('adiary.conf.cgi')> と書き直してください。
  • popモード以外(但しcrontab併用pop含む)では __cache/ data/ public/ 以下の全ファイルが、mail.cgi が実行される権限で読み書きできる必要があります。よく分からない人は file=0666/dir=0777 であるか注意してください。*3

*3 : 古いバージョンの adiary ではファイルモードの標準が 0660/0770 になっていたので、その時代から使っている方はそういうファイルが紛れている可能性があります。

popの設定方法

  • レンタルサーバでは通常この方法のみ利用出来ます(レンタルサーバの設定によっては利用出来ません)。
  • これが一番簡単な方法です。

Perlの設定

Perl 5.6系の場合、標準ではNet::POP3モジュールがないとのことですので別途インストールしてください。ActivePerlの場合は5.6系でも入っているそうです(未確認)。

Perl 5.8系では特別な設定は不要です。

adiaryの設定

mail-post@blog.adiary.xx というメールアドレスを利用すると仮定して説明します。まず adiary.conf.cgi を設定します。

<$v.mail_post_address = "mail-post@blog.adiary.xx">
# メールのチェック間隔(秒)
<$v.pop_timer=5*60>	5分間隔
# popログ 兼 チェック間隔記録用ファイル
<$v.pop_log_file="<@data_dir>pop_log.txt">

pop_timer には pop をチェックする感覚を秒数で指定します。難しいことは省略しますが、前にチェックしたときからこの時間だけ過ぎたあと最初にアクセスがあったときに pop による投稿処理が行われます。実際に表示画面に反映されるのは、さらにその次のアクセス以降になります。

crontab が利用できる環境でしたら、このタイマーを使わず crontab で mail.cgi を直接起動してください。

続いて mail.conf.cgi も設定します。細かいことは設定ファイルを読んでください。

<#$Server_name = 'blog.adiary.xx'>
<$Basepath='/adiary/'>

<$mail.pop_mode = 'pop'> 'apop' も指定可能
<$mail.pop_log_file = v.pop_log_file>
<$mail.pop_host='blog.adiary.xx'>
<$mail.pop_user='mail-post'>
<$mail.pop_pass='password'>

特にBasepthは正しく設定してください。adiary.cgiによってBathpathは次のようになります。

URLBasepath
http://www.~.xx/cgi/blog/adiary.cgi/cgi/blog/
http://www.~.xx/blog/adiary.cgi/blog/
http://www.~.xx/adiary.cgi/

エラーの確認

ログファイルにエラーが記録されている場合、pop に失敗している可能性があります。その場合は直接 mail.cgi をブラウザから開いてみてください。エラーメッセージが表示されるはずです。

サーバからの直接起動、fetchmail+procmailなどの利用方法

大抵メールサーバには、特定のメールが来た際に、コマンドを直接呼び出す機能があります。sendmail ならば、aliases に例えば次のように書きます。

blog-post:	"| /home/www/adiary/mail.cgi"

他のメールデーモン(やfetchmail等)での設定方法は各自調べてみてください*4。mail.cgi に対してパイプでヘッダを含めた完全なメールデータを渡してください。

adiary.conf.cgi は次のようになります。

<$v.mail_post_address = "mail-post@blog.adiary.xx">
# popログ 兼 チェック間隔記録用ファイル
<$v.pop_log_file="<@data_dir>pop_log.txt">

pop_timerは設定しないでください。mail.conf.cgi では前半をきちんと設定してください。webサーバから起動されるわけではないため、手動で設定する必要があります。ここの設定を間違えると、メール投稿時は変なRSSが生成される、といった不具合が起きます。

<#$mail.pop_mode = 'pop'> この行は設定してはいけない

最後に mail.cgi の設定ですがVersion1.22以降の方はこの設定は不要です。8行目付近にコメントアウトされているカレントディレクトリ設定を適切に記述してください。

chdir("/home/www/adiary");

サーバ上ディレクトリ(Web上のディレクトリではありません)の絶対パスを指定してください。

これで一通り機能するはずです。

*4 : もし設定解説記事を書かれた場合は、ほかのみなさんのために、この記事へTBを送ってくださると助かります。