[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[postfix-jp: 4029] Re: 複数RCPTコマンド時の挙動について



荻野です。

石原 said the following on 11/12/19 10:52:
> destination_recipient_limit = 1
> とすることにより複数RCPT TOがある場合、1つの宛先につき1メールずつ送信することは出来ました。

これは送信するときに1メールずつ送信することになります。

> しかし、1メール毎にRCPT TOのアドレスをToヘッダに設定することが出来ずに苦戦しています。
> 前提として、受け取るメールにはToヘッダは設定されてきておりません。
> 
> main.cfに
> smtpd_recipient_restrictions = check_recipient_access
> regexp:/etc/postfix/prepend_rcpt_to
> ,permit_mynetworks
> ,reject_unauth_destination
> 
> prepend_rcpt_toに
> /(.*)/ PREPEND To: $1
> 
> のように設定すれば、RCPT TOのアドレスをToヘッダに設定することが出来るのですが、
> 全てのメールに全てのRCPT TOのアドレスがToヘッダに設定されてしまいます。

これは smtpd の設定なので受信するときの設定です。受信時に To: ヘッダを付
けてしまえば、その後で一通ずつ送信してもみんなおんなじになってしまいます。

しかし、Postfix で置換などを行えるのは smtpd_xxxx_restrictions など受信
時しかないと思いますので、結論としては単独の Postfix ではできないと思わ
れます。


> 解決法やヒントになるものでも構いませんので、
> ご存知の方がいらっしゃいましたらご教授願えますでしょうか。

Postfix をポート番号などで分けて2段構えにし、最初の Postfix では
destination_recipient_limit で1通ずつとして relay_host で2段目の
Postfix に渡し、2段目の Postfix で prepend_rcpt_to でヘッダを追加しては
どうでしょうか。

別案としては master.cf の smtp に -o content_filter=rcptto2header:dummy
をつけて smtp 経由で受信したものを全部 rcptto2header に送り込み、
rcptto2header は書き換えを行ったものを sendmail コマンドで配送依頼すると
いう手があります。今回のお話は prepend_rcpt_to で書き換えられる範囲(例
えば To: は最初は存在しないなど)ですが、配送と書き換えを分離したり、書
き換えに柔軟性を持たせようとすれば、こちらがすっきりするように思います。
(もし何らかのスクリプトが書ければ、ですが)

こちらについては、
  http://www.postfix-jp.info/trans-2.3/jhtml/FILTER_README.html
等を参照してください。


準備:書き換えを実行するユーザ XXX を作成しておきます。

master.cf: smtp ポートの標準の smtpd に設定する例
smtp      inet  n       -       -       -       -       smtpd
    -o content_filter=rcptto2header:dummy
rcptto2header unix   -       n       n       -      10       pipe
    flags=q user=XXX
    argv=/usr/local/sbin/rcptto2header ${sender} ${recipient}

master.cf: 別に 10025 ポートに立てる例
10025        inet  n       -       -       -       -       smtpd
    -o content_filter=rcptto2header:dummy
    -o smtpd_client_restrictions=permit_mynetworks,reject
rcptto2header unix   -       n       n       -      10       pipe
    flags=q user=XXX
    argv=/usr/local/sbin/rcptto2header ${sender} ${recipient}

main.cf: rcptto2header に渡すときに宛先毎にメールを分ける(これはスクリ
プトが手抜きだからで、スクリプト側で複数の宛先を処理することもできるかも
しれませんが、こちらの方がシンプルかと。
rcptto2header_destination_recipient_limit=1


/usr/local/sbin/rcptto2header の例:なるべく単純に、特に中間ファイルを作
成しないように書いた方が無難です。To: が無いのが確実なら awk の部分は
cat だけでもうまくいくかも知れません。
このスクリプトは手抜きなので、To: が付いていて、かつ複数行に渡っていると
きはうまく動きません。
#!/bin/sh
#   Usage: rcptto2header sender recipient

sender="$1"; recipient="$2"
{
    # To: ヘッダを出力
    echo "To: $recipient"

    # 元のメールの To: ヘッダ以外を出力
    awk '
      BEGIN { inheader=1 }
      inheader==1 && $1 !~ /^[Tt][Oo]:/ { print }
      /^$/ { inheader=0 }
      inheader==0 { print }
    '
} | /usr/sbin/sendmail -G -i -f "$sender" -- "$recipient"

exit $?

-- 
荻野 充 (おぎの みつる) ... 「萩(はぎ)」にあらず
Key fingerprint = 7F26 5414 1805 F31B 1617  10B7 C117 07AE 1691 9BD1

_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxxxxxxxxxxxxxxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list

Follow-Ups
[postfix-jp: 4030] Re: 複数RCPTコマンド時の挙動について, 石原
References
[postfix-jp: 4023] 複数RCPTコマンド時の挙動について, 聡石原
[postfix-jp: 4024] Re: 複数RCPTコマンド時の挙動について, Kimiya Kitani
[postfix-jp: 4027] Re: 複数RCPTコマンド時の挙動について, 石原

[検索ページ] [Postfix-JP ML Home]