2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

Can’t create user output file!

現象:

Procmailを使ったPostfixメールサーバでユーザアカウントを追加して追加したユーザ宛にテストメールを送信したら、メール受信が拒否されてしまい送信者にエラー通知が送られてしまう。

エラー内容が、

This is the Postfix program at host ホスト名.

I’m sorry to have to inform you that the message returne below could not be delivered to one or more destinations.

For further assistance, please send mail to<postmaster>

If you do so, please include this problem report. You can delete your own text from the message returned below.

The Postfix program

<メールアドレス>: can’t create user output file

と言うエラーが、通知される。


1.エラーの原因

この原因は、2つ程考えられる。

■ mailboxにたまってるメールが容量制限ぎりぎりもしくはオーバーした時に発生する。

■ procmailのレシピ設定ファイルprocmailrcの記述ミス。


2.対策

■ mailboxにたまってるメールが容量制限ぎりぎりもしくはオーバーした時に発生する。

単純に、Postfixの設定ファイル main.cf のmailbox_size_limit及びmessage_size_limitの数値を多くする。以下のmain.cfサンプルの赤字のパラメータを調整する。ただし、原則としてmailbox_size_limitmessage_size_limitより大きくなくてはならない。

# cd /etc/postfix

# vi main.cf

# Postfixのオーナーのユーザ名定義
mail_owner = postfix

# Postfixのオーナーのグループ定義
setgid_group = maildrop

# Postfixのセカンドオーナー定義
default_privs = nobody

# このサーバの名前
myhostname = sub2.kozupon.com

# このネットワークのドメイン名
mydomain = kozupon.com

# 全てのメールの送信ドメイン
myorigin = $mydomain
#myorigin = $myhostname

# 監視するインターフェースの指定
inet_interfaces = all

# メッセージのアドレスとして認めるホストの定義
mydestination = $myhostname, localhost.$mydomain $mydomain

# メール中継の制限(中継を許可するIPアドレスもしくはネットワークアドレス)。IPアドレスでリレー拒否設定する場合は、ここに追加する
mynetworks = 192.168.255.0/24, 127.0.0.0/8, ***.***.***.***

# メール中継を許すホストおよびアドレスの定義(中継を許可するドメインを指定)
# 私の場合は、外部リレーはドメインで許可しています。上記のmynetworks設定の中にIPアドレスを定義してもかまわない。
relay_domains = $mydestination, onechan-kawaii.com

# EXPN/VRFY コマンドを拒否する(telnetによるアカウント漏洩拒否)
disable_vrfy_command = yes

# SMTPで接続したときにPostfix Versionを非表示にする
smtpd_banner = $myhostname ESMTP $mail_name

# 明示したドメインをFROM行に持たないメールは拒否する
smtpd_sender_restriction = reject_non_fqdn_sender, reject_unknown_sender_domain, permit

# ヘッダチェック(怪しいヘッダ付きメールを拒否する設定)
# Dubtful mail is blocked by the mail header
header_checks = regexp:/etc/postfix/header_checks

# メール本文でチェック(怪しい文字列を拒否する)
# It blocks in the text of mail
body_checks=regexp :/etc/postfix/body_checks

# ORBSデータベース定義(不正中継ブラックリストでブロックするための指定)
# 注:relays.osirusoft.comは既にサービスを停止している。サービスを停止している不正中継DBサイトを設定しているとメール受信出来なくなるので注意すること!
maps_rbl_domains = or.orbl.org, relays.mail-abuse.org, spamcop.net, abl.v6net.org
(注:ブラックリストを提供していたrelays.osirusoft.comは運営を止めました。ここを設定してる人は、直ぐに設定解除しましょう。)

# 送信元ホストの制限(SPAMメール拒否設定)
# ここでは、ORBSで登録されているホストからのメールを拒否する。
smtpd_client_restrictions = permit_mynetworks, reject_maps_rbl, permit

# MAILコマンドの前にHELO(EHLO)コマンドを要求
smtpd_helo_required = yes

# HELO(EHLO)ホスト制限(Hello拒否設定)
# パラメータは HELO(EHLO)でクライアントが送れるホストを制限する。ここをシビアにすることで、
# 止めることができるUCEソフトウェアもある。 
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, permit

# ★メール中継の制限(オプションパラメータでの制限をする場合に使う)
# It is transmitting agency and refuses.
smtpd_recipient_restrictions = regexp:/etc/postfix/recipient_checks.reg, check_sender_access hash:/etc/postfix/bad_sender, permit_mynetworks, reject_maps_rbl, check_relay_domains

# 中継禁止の有無
# 注:この2行を”no”にすると何でもかんでも中継禁止にしてしまう!気を付けること。
allow_percent_hack = yes
swap_bangpath = yes

# エイリアスファイルの在処の指定
alias_maps = hash:/etc/postfix/aliases

# エイリアスデータベースの在処の指定
alias_database = hash:/etc/postfix/aliases

# ユーザメールボックスの在処の指定
mail_spool_directory = /var/spool/mail

# mailboxのファイルサイズの制限値(約50MB)
mailbox_size_limit = 51200000

# mailboxのエンベロープ情報を含めたメッセージのトータルサイズをバイト単位での制限値(約10MB)
message_size_limit = 10240000

# デバッグレベルの指定
debug_peer_level = 2

# デバッガコマンドパスの指定
debugger_command =
PATH=/usr/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5

# Postfixメールキューコマンドのパス
mailq_path = /usr/libexec/postfix

# Postfixメールキューパス
queue_directory = /var/spool/postfix

# Postfixコマンドディレクトリのパス
command_directory = /usr/sbin

# デーモンディレクトリのパス
daemon_directory = /usr/libexec/postfix

# Postfixオンラインマニュアルのパス
manpage_directory = /usr/local/man

# Postfix設定サンプルファイルのパス
sample_directory = /etc/postfix

# READMEディレクトリの有無
readme_directory = no

# AntiVirus独自の設定
mailbox_command = /usr/sbin/amavis “$SENDER” “$RECIPIENT”

# 外部コマンドへのメール配送の制限(メーリングリスト等を立ち上げている場合は必要!)
allow_mail_to_commands = alias,forward,include

■ procmailのレシピ設定ファイルprocmailrcの記述ミス。

この場合は、procmailrcファイルの一部を訂正する。デフォルトのメールボックスのパスの指定が原因である。procmailの旧バージョンと新バージョンではユーザ用の環境変数の指定が違う。間違いやすいので注意が必要である。
以下参照。

# cd /etc/postfix

# vi procmailrc

DEFAULT=/var/mail/$LOGNAME    ← これはprocmail新バージョン用
もしくは
DEFAULT=/var/mail/$USER       ← これはprocmail旧バージョン用

:0
* ^Subject: \/.*
* ? echo “$MATCH” | nkf -Zme | grep ‘!.*広告.*!’
/dev/null

:0
* ^Subject: \/.*
* ? echo “$MATCH” | nkf -Zme | grep ‘DM@.*広告.*@’
/dev/null

:0
* ^Subject: \/.*
* ? echo “$MATCH” | nkf -Zme | grep ‘未承諾広告※’
/dev/null

:0
* ^Subject: \/.*
* ? echo “$MATCH” | nkf -Zme | grep ‘未承諾広告’
/dev/null

 :0
 * ^[Ff]rom:.*yahoo.co.kr
/dev/null

以上

コメント