! Mac OS X で quickml 動かす 同一ホスト上に quickml と MTA を共存させるも参照。 ./quickmlinstall.txt !! USER と GROUP quickml を user:quickml group:quickml で動かすためにユーザーとグループを追加しておく。 ユーザー追加。 % echo "quickml:*:10016:534::0:0:quickml:/var/empty:/sbin/nologin" | sudo niload passwd . 確認。 % nidump passwd . | grep quickml quickml:*:10016:534::0:0:quickml:/var/empty:/sbin/nologin もしくはこう。 % nireport . /users name uid gid | grep quickml quickml 10016 534 グループ追加。 % echo "quickml:*:534:" | sudo niload group . 確認。 % nidump group . | grep quickml quickml:*:534: もしくはこう。 % nireport . /groups name gid | grep quickml quickml 534 !! quickml インストール 追加した user と group を指定して configure する。 rin@kahori[~/usr/local/quickml-0.7]% ./configure --with-user=quickml --with-group=quickml Makefile を確認。 rin@kahori[~/usr/local/quickml-0.7]% grep -E '(USER|GROUP)' Makefile GROUP = quickml USER = quickml make して install 。 rin@kahori[~/usr/local/quickml-0.7]% sudo make install Making install in lib Making install in quickml make[3]: Nothing to be done for `install-exec-am'. test -z "/usr/local/lib/ruby/site_ruby/1.8/quickml" || mkdir -p -- . "/usr/local/lib/ruby/site_ruby/1.8/quickml" /usr/bin/install -c -m 644 'config.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/config.rb' /usr/bin/install -c -m 644 'gettext.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/gettext.rb' /usr/bin/install -c -m 644 'mail.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/mail.rb' /usr/bin/install -c -m 644 'sweeper.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/sweeper.rb' /usr/bin/install -c -m 644 'core.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/core.rb' /usr/bin/install -c -m 644 'logger.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/logger.rb' /usr/bin/install -c -m 644 'server.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/server.rb' /usr/bin/install -c -m 644 'utils.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/utils.rb' /usr/bin/install -c -m 644 'version.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/version.rb' make[3]: Nothing to be done for `install-exec-am'. test -z "/usr/local/lib/ruby/site_ruby/1.8" || mkdir -p -- . "/usr/local/lib/ruby/site_ruby/1.8" /usr/bin/install -c -m 644 'quickml.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml.rb' Making install in . test -z "/usr/local/bin" || mkdir -p -- . "/usr/local/bin" /usr/bin/install -c 'quickml-analog' '/usr/local/bin/quickml-analog' test -z "/usr/local/sbin" || mkdir -p -- . "/usr/local/sbin" /usr/bin/install -c 'quickml' '/usr/local/sbin/quickml' /usr/bin/install -c 'quickml-ctl' '/usr/local/sbin/quickml-ctl' mkdir -p /usr/local/var/quickml chown -R quickml /usr/local/var/quickml chgrp -R quickml /usr/local/var/quickml chmod 750 /usr/local/var/quickml test -z "/usr/local/etc" || mkdir -p -- . "/usr/local/etc" /usr/bin/install -c -m 644 'quickmlrc.sample' '/usr/local/etc/quickmlrc.sample' !! 設定ファイル quickmlrc はこう。 % cat /usr/local/etc/quickmlrc # -*- mode: ruby -*- Config = { :user => "quickml", :group => "quickml", :port => 10025, :bind_address => "127.0.0.1", :smtp_host => 'localhost', :smtp_port => 25, :domain => 'qml.area51.gr.jp', :postmaster => "rin@maaya.jp", :info_url => "http://QuickML.com/", :data_dir => '/usr/local/var/quickml', :pid_file => '/var/run/quickml.pid', :log_file => '/var/log/quickml.log', :verbose_mode => true, :max_members => 100, :max_mail_length => 100 * 1024, :ml_life_time => 86400 * 31, :ml_alert_time => 86400 * 30, :auto_unsubscribe_count => 5, :sweep_interval => 3600, :max_threads => 10, :timeout => 120, :use_qmail_verp => false, :confirm_ml_creation => false, # for confirming ML creation. (experimental) # :message_catalog => nil # for English messages :message_catalog => '/usr/local/share/messages.ja', } !! 起動未遂 rin@kahori[~]% quickml-ctl start Starting QuickML services: /usr/local/sbin/quickml: Permission denied - /var/log/quickml.log おっと。 rin@kahori[~]% sudo quickml-ctl start Starting QuickML services: 確認。 rin@kahori[~]% ps auwx | grep quickml あれ。いない。 pid はある。 でも owner と group が quickml になっていない。 rin@kahori[~]% ls -l /var/run/quickml.pid -rw-r--r-- 1 root daemon 0 20 8 08:48:21 2005 /var/run/quickml.pid コードリーディング。 pid を探す。 rin@kahori[~]% cd usr/local/quickml-0.7 rin@kahori[~/usr/local/quickml-0.7]% grep quickml.pid * Makefile:PIDFILE = /var/run/quickml.pid Makefile~:PIDFILE = /var/run/quickml.pid config.log:PIDFILE='/var/run/quickml.pid' config.status:s,@PIDFILE@,/var/run/quickml.pid,;t t configure: --with-pidfile=FILE PID is stored in FILE [/var/run/quickml.pid] configure: PIDFILE='/var/run/quickml.pid' configure.ac: [ --with-pidfile=FILE PID is stored in FILE [[/var/run/quickml.pid]]], configure.ac: [PIDFILE=${withval}], [PIDFILE='/var/run/quickml.pid'] grep: lib: Operation not permitted quickml-ctl: kill `cat /var/run/quickml.pid` quickml.en.rd: --with-pidfile=FILE PID is stored in FILE [/var/run/quickml.pid] quickml.ja.rd: --with-pidfile=FILE PID is stored in FILE [/var/run/quickml.pid] quickmlrc.sample: :pid_file => '/var/run/quickml.pid', pid を探す。 rin@kahori[~/usr/local/quickml-0.7]% grep -n pid_file * quickml:50: touch(config.pid_file) quickml:53: File.chown(uid, gid, config.pid_file) quickml.in:50: touch(config.pid_file) quickml.in:53: File.chown(uid, gid, config.pid_file) quickmlrc.sample:15: :pid_file => '/var/run/quickml.pid', quickmlrc.sample.in:15: :pid_file => '%PIDFILE%', uid と gid を探す。 とりあえず uid から。 rin@kahori[~/usr/local/quickml-0.7]% grep -n uid * quickml:47: return unless Process.uid == 0 quickml:48: uid = Etc::getpwnam(config.user).uid quickml:52: File.chown(uid, gid, config.data_dir) quickml:53: File.chown(uid, gid, config.pid_file) quickml:54: File.chown(uid, gid, config.log_file) quickml:55: Process.uid = uid quickml:57: Process.euid = uid getpwnam はどうなのよ。 % ruby -e "require 'etc'; p Etc.getpwnam('quickml').uid" 10016 意図した結果だな。 次に printf デバッグしてみる。 その前に be_daemon() で STDOUT.reopen、STDERR.reopen で出力が捨てられてしまうのでコメントアウトしておく。 def be_daemon exit!(0) if fork Process::setsid exit!(0) if fork Dir::chdir("/") File::umask(022) STDIN.reopen("/dev/null", "r+") ## STDOUT.reopen("/dev/null", "r+") ## STDERR.reopen("/dev/null", "r+") end 実行。 % sudo ./quickml ./quickml:52:in `chown': cannot convert Array into Integer (TypeError) from ./quickml.d:52:in `be_secure' from ./quickml.d:70:in `main' from ./quickml.d:81 gid か。 % ruby -e "require 'etc'; p Etc.getgrnam('quickml').gid" [] なにこれ。 とにかく gid が欲しいようなので getgrnam ではなく getpwnam を使うことにしてみる。 実行。 % sudo quickml /usr/local/sbin/quickml:55:in `uid=': Operation not permitted (Errno::EPERM) from /usr/local/sbin/quickml:55:in `be_secure' from /usr/local/sbin/quickml:70:in `main' from /usr/local/sbin/quickml:81 だめだ Process.uid = uid を実行できぬ。 なぜだ。 !! バータリー とりあえず /usr/local/etc/quickmlrc の user と group を root にする。 実行。 % sudo quickml-ctl start Starting QuickML services: % ps waux | grep quickml root 8676 0.0 0.5 31168 1276 ?? S 6:45PM 0:00.02 ruby /usr/local/sbin/quickml いいかなあ。 !! 他の MTA と共存させる方法 ここを参考にして作業する。 http://namazu.org/~satoru/quickml/with-mta.ja.html transport はこう。 dnscache を動作させておくと 127.0.0.1 ではなく localhost と書ける。それだけ。 rin@kahori[/usr/pkg/etc/postfix]% cat transport qml.area51.gr.jp smtp:[localhost]:10025 main.cf の設定したところ。 % postconf -n alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases command_directory = /usr/pkg/sbin config_directory = /usr/pkg/etc/postfix daemon_directory = /usr/pkg/libexec/postfix debug_peer_level = 2 home_mailbox = Maildir/ html_directory = no local_recipient_maps = mail_owner = postfix mailq_path = /usr/pkg/bin/mailq manpage_directory = /usr/pkg/man mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, qml.$mydomain mydomain = area51.gr.jp myhostname = sakura.area51.gr.jp mynetworks = 192.168.0.0/24, 127.0.0.0/8 myorigin = $mydomain newaliases_path = /usr/pkg/bin/newaliases queue_directory = /var/spool/postfix readme_directory = /usr/pkg/share/doc/postfix sample_directory = /usr/pkg/share/examples/postfix sendmail_path = /usr/pkg/sbin/sendmail setgid_group = maildrop transport_maps = hash:/usr/pkg/etc/postfix/transport unknown_local_recipient_reject_code = 550 % sudo postmap hash:/usr/pkg/etc/postfix/transport 再読み込み。 % sudo postfix reload postfix/postfix-script: refreshing the Postfix mail system !! 動作確認 失敗。 メールアドレスというかドメインが妙に展開されてる? quickml のログ。 rin@kahori[~]% tail /var/log/quickml.log 2005-08-23T01:29:57: bare From: Susumu Miwa (三輪 晋) 2005-08-23T01:29:57: bare Cc: 2005-08-23T01:29:57: [test09]: New ML by rin@mari-off.gr.jp 2005-08-23T01:29:57: [test09]: Add: rin@mari-off.gr.jp 2005-08-23T01:29:57: Error: Unable to send mail: RuntimeError: smtp-error: MAIL FROM: => 501 Bad address syntax 2005-08-23T01:29:57: [test09:1]: Send: 127.0.0.1 0.009051 sec. 2005-08-23T01:29:57: Command: QUIT 2005-08-23T01:29:57: Closed: localhost 2005-08-23T01:29:57: Session finished: 0.604135 sec. postfix のログ。 rin@kahori[~]% tail /var/log/mail.log Aug 23 01:29:56 kahori postfix/smtpd[17816]: connect from st48.arena.ne.jp[210.150.222.2] Aug 23 01:29:56 kahori postfix/smtpd[17816]: 5712A184958: client=st48.arena.ne.jp[210.150.222.2] Aug 23 01:29:56 kahori postfix/cleanup[17819]: 5712A184958: message-id=<20050823.012950.59666187.rin@mari-off.gr.jp> Aug 23 01:29:56 kahori postfix/qmgr[17813]: 5712A184958: from=, size=892, nrcpt=1 (queue active) Aug 23 01:29:56 kahori postfix/smtpd[17816]: disconnect from st48.arena.ne.jp[210.150.222.2] Aug 23 01:29:57 kahori postfix/smtpd[17816]: connect from localhost[127.0.0.1] Aug 23 01:29:57 kahori postfix/trivial-rewrite[17818]: warning: valid_ipv4_hostaddr: invalid octet count: Aug 23 01:29:57 kahori postfix/smtpd[17816]: warning: Illegal address syntax from localhost[127.0.0.1] in MAIL command: test09=return=@qml.area51.gr.jp-@[] Aug 23 01:29:57 kahori postfix/smtp[17820]: 5712A184958: to=, relay=127.0.0.1[127.0.0.1], delay=1, status=sent (250 ok) Aug 23 01:29:57 kahori postfix/qmgr[17813]: 5712A184958: removed !! デバッグ master.cf に -v を書いてみる。 抜粋。 match_list_match: localhost: no match というのが気になる。 しかし、この list とはいったいなんだ? Sep 4 10:20:25 sakura postfix/smtp[8168]: deliver_message: from rin@mari-off.gr.jp Sep 4 10:20:25 sakura postfix/smtp[8168]: smtp_parse_destination: 127.0.0.1:10025 smtp Sep 4 10:20:25 sakura postfix/smtp[8168]: connecting to 127.0.0.1 port 10025 Sep 4 10:20:25 sakura postfix/smtp[8168]: smtp_addr_one: host 127.0.0.1 Sep 4 10:20:25 sakura postfix/smtp[8168]: begin 127.0.0.1 address list Sep 4 10:20:25 sakura postfix/smtp[8168]: pref 0 host 127.0.0.1/127.0.0.1 Sep 4 10:20:25 sakura postfix/smtp[8168]: end 127.0.0.1 address list Sep 4 10:20:25 sakura postfix/smtp[8168]: smtp_connect_addr: trying: 127.0.0.1[127.0.0.1] port 10025... Sep 4 10:20:25 sakura postfix/smtp[8168]: < 127.0.0.1[127.0.0.1]: 220 localhost ESMTP QuickML Sep 4 10:20:25 sakura postfix/smtp[8168]: > 127.0.0.1[127.0.0.1]: EHLO sakura.area51.gr.jp Sep 4 10:20:25 sakura postfix/smtp[8168]: < 127.0.0.1[127.0.0.1]: 250-localhost Sep 4 10:20:25 sakura postfix/smtp[8168]: < 127.0.0.1[127.0.0.1]: 250 PIPELINING Sep 4 10:20:25 sakura postfix/smtp[8168]: server features: 0x1005 size 0 Sep 4 10:20:25 sakura postfix/smtp[8168]: Using ESMTP PIPELINING, TCP send buffer size is 4096 Sep 4 10:20:25 sakura postfix/smtp[8168]: > 127.0.0.1[127.0.0.1]: MAIL FROM: Sep 4 10:20:25 sakura postfix/smtp[8168]: > 127.0.0.1[127.0.0.1]: RCPT TO: Sep 4 10:20:25 sakura postfix/smtp[8168]: > 127.0.0.1[127.0.0.1]: DATA Sep 4 10:20:25 sakura postfix/smtp[8168]: < 127.0.0.1[127.0.0.1]: 250 ok Sep 4 10:20:25 sakura postfix/smtp[8168]: < 127.0.0.1[127.0.0.1]: 250 ok Sep 4 10:20:25 sakura postfix/smtp[8168]: < 127.0.0.1[127.0.0.1]: 354 send the mail data, end with . Sep 4 10:20:25 sakura postfix/smtp[8168]: header_token: Text / Plain Sep 4 10:20:25 sakura postfix/smtp[8168]: header_token: 7bit Sep 4 10:20:25 sakura postfix/smtp[8168]: > 127.0.0.1[127.0.0.1]: . Sep 4 10:20:25 sakura postfix/smtp[8168]: > 127.0.0.1[127.0.0.1]: QUIT Sep 4 10:20:25 sakura postfix/smtpd[8164]: connection established Sep 4 10:20:25 sakura postfix/smtpd[8164]: master_notify: status 0 Sep 4 10:20:25 sakura postfix/smtpd[8164]: name_mask: resource Sep 4 10:20:25 sakura postfix/smtpd[8164]: name_mask: software Sep 4 10:20:25 sakura postfix/smtpd[8164]: connect from localhost[127.0.0.1] Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_list_match: localhost: no match Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_list_match: 127.0.0.1: no match Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_list_match: localhost: no match Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_list_match: 127.0.0.1: no match Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_hostname: localhost ~? 192.168.0.0/24 Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_hostaddr: 127.0.0.1 ~? 192.168.0.0/24 Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_hostname: localhost ~? 127.0.0.0/8} Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_hostaddr: 127.0.0.1 ~? 127.0.0.0/8} Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_list_match: localhost: no match Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_list_match: 127.0.0.1: no match Sep 4 10:20:25 sakura postfix/smtpd[8164]: send attr request = connect Sep 4 10:20:25 sakura postfix/smtpd[8164]: send attr ident = smtp:127.0.0.1 Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/anvil: wanted attribute: status Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: status Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute value: 0 Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/anvil: wanted attribute: count Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: count Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute value: 1 Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/anvil: wanted attribute: rate Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: rate Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute value: 1 Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/anvil: wanted attribute: (list terminator) Sep 4 10:20:25 sakura postfix/smtp[8168]: < 127.0.0.1[127.0.0.1]: 250 ok Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: (end) Sep 4 10:20:25 sakura postfix/smtp[8168]: E8F737B1CA: to=, relay=127.0.0.1[127.0.0.1], delay=1, status=sent (250 ok) Sep 4 10:20:25 sakura postfix/smtpd[8164]: > localhost[127.0.0.1]: 220 sakura.area51.gr.jp ESMTP Postfix Sep 4 10:20:25 sakura postfix/smtp[8168]: name_mask: resource Sep 4 10:20:25 sakura postfix/smtpd[8164]: < localhost[127.0.0.1]: EHLO sakura Sep 4 10:20:25 sakura postfix/smtp[8168]: name_mask: software Sep 4 10:20:25 sakura postfix/smtpd[8164]: > localhost[127.0.0.1]: 250-sakura.area51.gr.jp Sep 4 10:20:25 sakura postfix/smtp[8168]: deliver_request_final: send: "" 0 Sep 4 10:20:25 sakura postfix/smtpd[8164]: > localhost[127.0.0.1]: 250-PIPELINING Sep 4 10:20:25 sakura postfix/smtp[8168]: send attr reason = Sep 4 10:20:25 sakura postfix/smtpd[8164]: > localhost[127.0.0.1]: 250-SIZE 10240000 Sep 4 10:20:25 sakura postfix/smtp[8168]: send attr status = 0 Sep 4 10:20:25 sakura postfix/smtpd[8164]: > localhost[127.0.0.1]: 250-VRFY Sep 4 10:20:25 sakura postfix/qmgr[8161]: E8F737B1CA: removed Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_list_match: localhost: no match Sep 4 10:20:25 sakura postfix/smtp[8168]: master_notify: status 1 Sep 4 10:20:25 sakura postfix/smtpd[8164]: match_list_match: 127.0.0.1: no match Sep 4 10:20:25 sakura postfix/smtp[8168]: connection closed Sep 4 10:20:25 sakura postfix/smtpd[8164]: > localhost[127.0.0.1]: 250-ETRN Sep 4 10:20:25 sakura postfix/smtpd[8164]: > localhost[127.0.0.1]: 250 8BITMIME Sep 4 10:20:25 sakura postfix/smtpd[8164]: < localhost[127.0.0.1]: MAIL FROM: Sep 4 10:20:25 sakura postfix/smtpd[8164]: extract_addr: input: Sep 4 10:20:25 sakura postfix/smtpd[8164]: smtpd_check_addr: addr=test29=return=@qml.area51.gr.jp-@[] Sep 4 10:20:25 sakura postfix/smtpd[8164]: send attr request = rewrite Sep 4 10:20:25 sakura postfix/smtpd[8164]: send attr rule = local Sep 4 10:20:25 sakura postfix/smtpd[8164]: send attr address = "test29=return=@qml.area51.gr.jp-"@[] Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/rewrite socket: wanted attribute: flags Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: flags Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute value: 0 Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/rewrite socket: wanted attribute: address Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: address Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute value: "test29=return=@qml.area51.gr.jp-"@[] Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/rewrite socket: wanted attribute: (list terminator) Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: (end) Sep 4 10:20:25 sakura postfix/smtpd[8164]: rewrite_clnt: local: "test29=return=@qml.area51.gr.jp-"@[] -> "test29=return=@qml.area51.gr.jp-"@[] Sep 4 10:20:25 sakura postfix/smtpd[8164]: send attr request = resolve Sep 4 10:20:25 sakura postfix/smtpd[8164]: send attr address = test29=return=@qml.area51.gr.jp-@[] Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/rewrite socket: wanted attribute: flags Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: flags Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute value: 0 Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/rewrite socket: wanted attribute: transport Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: transport Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute value: CHANNEL NOT UPDATED Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/rewrite socket: wanted attribute: nexthop Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: nexthop Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute value: NEXTHOP NOT UPDATED Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/rewrite socket: wanted attribute: recipient Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: recipient Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute value: test29=return=@qml.area51.gr.jp-@[] Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/rewrite socket: wanted attribute: flags Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: flags Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute value: 4100 Sep 4 10:20:25 sakura postfix/smtpd[8164]: private/rewrite socket: wanted attribute: (list terminator) Sep 4 10:20:25 sakura postfix/smtpd[8164]: input attribute name: (end) Sep 4 10:20:25 sakura postfix/smtpd[8164]: resolve_clnt: `test29=return=@qml.area51.gr.jp-@[]' -> transp=`CHANNEL NOT UPDATED' host=`NEXTHOP NOT UPDATED' rcpt=`test29=return=@qml.area51.gr.jp-@[]' flags=error class=default Sep 4 10:20:25 sakura postfix/smtpd[8164]: ctable_locate: install entry key test29=return=@qml.area51.gr.jp-@[] Sep 4 10:20:25 sakura postfix/smtpd[8164]: extract_addr: result: test29=return=@qml.area51.gr.jp-@[] Sep 4 10:20:25 sakura postfix/smtpd[8164]: > localhost[127.0.0.1]: 501 Bad address syntax Sep 4 10:22:04 sakura postfix/cleanup[8167]: rewrite stream disconnect Sep 4 10:22:05 sakura postfix/cleanup[8167]: idle timeout -- exiting Sep 4 10:22:05 sakura postfix/smtp[8168]: idle timeout -- exiting !! 解決 quickmlrc の以下の行が原因だった。 :use_qmail_verp => true, これを false にして解決。 :use_qmail_verp => false, ついでに dnscache を動かすようにして localhost を 127.0.0.1 に名前解決させるようにした。 !!! おまけ ログを見たら のメールアドレスは quickml が作ってるようなので quickml の「=return=」を検索したら以下を発見。 Postfix で動作させるのだから config.use_qmail_verp は false だな。 def generate_return_address raise unless @address raise unless @short_name domain_part = @address.split("@").last if @config.use_qmail_verp # e.g. @short_name + "=return=" + "@" + domain_part + "-@[]" else # e.g. @short_name + "=return" + "@" + domain_part end end