at_yasu's blog

ロード的なことを

メールからの投稿

メールから Wordpressに投稿する PHP スクリプトのプロトタイプができた。


まだバグだらけだけど、とりあえず日本語には対応。

(ファイルのアップロードできないし、toを見ていないからどこからのメールでも受け付けちゃうし、二つ以上のファイルがある場合の対応は考えてないし・・・ごにょごにょごにょ)

と云う訳で、使用は自己責任で。
file:'mail.php.gz' (gzip圧縮しています)



次に、postfixの設置方法。

/etc/postfix/master.cf
ここにフィルタする為のスクリプトパスを書く。
#
# Filter
#
# =============================================================
# service type  private unpriv  chroot  wakeup  maxproc command
#               (yes)   (yes)   (yes)   (never) (100)
# =============================================================
filter    unix  -       n       n       -       10      pipe
  flags=Rq user=postfix_filter argv=/path/to/filter.sh -f ${sender} -- ${recipient}
flter    unix  -       n       n       -       10      pipe
  flags=Rq user=postfix_filter argv=/path/to/filter.sh -f ${sender} -- ${recipient}
/path/to/filter.sh
postfixが呼び出すフィルタスクリプト。内容は、下記の様になる。
#!/bin/sh

# Simple shell-based filter. It is meant to be invoked as follows:
#       /path/to/script -f sender recipients...

# Localize these.
INSPECT_DIR=/home/postfix_filter/filter
SENDMAIL="/usr/sbin/sendmail -i"

# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || {
    echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }

cat >in.$$ || { 
    echo Cannot save mail to file; exit $EX_TEMPFAIL; }

# Specify your content filter here.
# filter <in.$$ || {
#   echo Message content rejected; exit $EX_UNAVAILABLE; }
#cp in.$$ /tmp/test.$$
/usr/local/bin/php /path/to/mail.php < in.$$


$SENDMAIL "$@" <in.$$

exit $?
/path/to/mail.php
さっきのgzipファイルを展開してやります。そして、上記の/path/to/filter.shに上記の様に実行させる様にします。

フィルタに関する詳しい事は、FILTER_READMEを読んでください。

他のMTAの方法は知りません。どっときゅーめーるって何?