こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Postfixで送信ができない

/var/log/syslog
10:33 solaris postfix/smtp[18719]: [ID 947731 mail.crit] fatal: open database /etc/postfix/saslpasswd.db: No such file or directory
10:34 solaris postfix/master[18715]: [ID 947731 mail.warning] warning: process /usr/libexec/postfix/smtp pid 18719 exit status 1
10:34 solaris postfix/master[18715]: [ID 947731 mail.warning] warning: /usr/libexec/postfix/smtp: bad command startup -- throttling

となっているのですがsaslpasswdはあります。saslpasswd.dbにするために何かコマンドを打つ必要があるのでしょうか?
また、後に出ているsmtpのエラーがよくわかりません、参考になるサイトなどご紹介いただけると幸いです

/etc/postfix/main.cf
alias_maps = dbm:/etc/mail/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
inet_interfaces = all
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mailq_path = /usr/bin/mailq
manpage_directory = /usr/local/man
mydestination = $myhostname, localhost
myhostname = solaris
mynetworks = 192.168.1.2, 127.0.0.0/8
myorigin = $myhostname
newaliases_path = /usr/bin/newaliases
queue_directory = /var/spool/postfix
relayhost = [192.168.1.3]:587
sample_directory = /etc/postfix
sendmail_path = /usr/lib/sendmail
setgid_group = postdrop
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/saslpasswd
smtp_sasl_security_options = noanonymous
smtpd_banner = $myhostname ESMTP $mail_name
unknown_local_recipient_reject_code = 550

/etc/postfix/saslpasswd
[192.168.1.3]:587 username:password

投稿日時 - 2006-09-11 14:20:38

QNo.2399077

困ってます

質問者が選んだベストアンサー

>smtp_sasl_security_options =
>に変えたのですが同じエラーでした。

変更後、postfix reloadは実行しましたか?


これでうまく行くか分かりませんが、main.cfに

smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain, login

の設定(上修正と下追加)をして、設定ファイルの際再読み込み(postfix reload)をして再度メールを送信した場合にはどうですか?

参考URL:http://www.postfix.org/SASL_README.html#client_sasl

投稿日時 - 2006-09-13 03:48:22

ANo.8

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.7

>make makefilesでno.2の回答の補足でお書きになったCCARGS、AUXLIBS共に指定していますか?

念のため書いておくと

make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2"

です。

投稿日時 - 2006-09-12 13:30:24

補足

付け加えるとできました。

たぶん最後の問題となるSASLのエラーです。
postfix/smtp[23573]: [ID 947731 mail.warning] warning: SASL authentication failure: No worthy mechs found
postfix/smtp[23573]: [ID 197553 mail.info] A2AAC3AB17: to=<aaa@hogehoge.co.jp>, relay=mail.hogehoge.co.jp[999.999.999.999]:587, delay=1388, delays=1388/0.05/0.09/0, dsn=4.7.0, status=deferred (SASL authentication failed; cannot authenticate to server mail.hogehoge.co.jp[999.999.999.999]: no mechanism available

ということでtelnetをすると
Trying 999.999.999.999...
Connected to mail.hogehoge.co.jp (999.999.999.999).
Escape character is '^]'.
220 mail.hogehoge.co.jp ESMTP Postfix
EHLO aaaa
250-mail.hogehoge.co.jp
250-PIPELINING
250-SIZE 5120000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250 8BITMIME
だったため、MD5類が不可だろうと思い、

smtp_sasl_security_options =
に変えたのですが同じエラーでした。

sasl自体に何かコマンドを入れて作り直さないといけないような話もあるのですがどうすればよいのでしょうか??

投稿日時 - 2006-09-12 14:08:34

ANo.6

-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------
gcc -Wmissing-prototypes -Wformat -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl -Dstrcasecmp=fix_strcasecmp -Dstrncasecmp=fix_strnasecmp -g -O -I. -I../../include -DSUNOS5 -o smtpd smtpd.o smtpd_token.o smtpd_check.o smtpd_chat.o smtpd_state.o smtpd_peer.o smtpd_sasl_proto.o smtpd_sasl_glue.o stpd_proxy.o smtpd_xforward.o smtpd_dsn_fix.o smtpd_milter.o ../../lib/libmaster.a ../../lib/libtls.a ../../lib/libdns.a ../../lib/libxsasl.a ../../lib/libmilter.a ./../lib/libglobal.a ../../lib/libutil.a -lresolv -lsocket -lnsl
-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------

これで全部ですか?

Cyrus SASLライブラリ(-L/usr/local/lib -lsasl2)の指定がないですね。
これだとシンボル参照エラーになりますね。

make makefilesでno.2の回答の補足でお書きになったCCARGS、AUXLIBS共に指定していますか?

投稿日時 - 2006-09-12 13:21:58

ANo.5

Cyrus SASLのライブラリにある関数がシンボル参照エラーになっているみたいですね。

ちなみにシンボル参照エラーになる前にsmtpdのリンクを行っているところ(-o smtpdがあるところ)があると思うのですが、その部分を出す事はできますか?

投稿日時 - 2006-09-12 12:39:11

補足

gcc -Wmissing-prototypes -Wformat -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl -Dstrcasecmp=fix_strcasecmp -Dstrncasecmp=fix_strnasecmp -g -O -I. -I../../include -DSUNOS5 -o smtpd smtpd.o smtpd_token.o smtpd_check.o smtpd_chat.o smtpd_state.o smtpd_peer.o smtpd_sasl_proto.o smtpd_sasl_glue.o stpd_proxy.o smtpd_xforward.o smtpd_dsn_fix.o smtpd_milter.o ../../lib/libmaster.a ../../lib/libtls.a ../../lib/libdns.a ../../lib/libxsasl.a ../../lib/libmilter.a ./../lib/libglobal.a ../../lib/libutil.a -lresolv -lsocket -lnsl
未定義の 最初に参照している

ここらへんでしょうか??

投稿日時 - 2006-09-12 13:03:09

ANo.4

make tidy してから、再度make makefiles ~ を実行したらどうですか?

ところでNo.3の参考URLのページみましたか?
Building Postfix with Cyrus SASL supportの所で、

% make tidy # if you have left-over files from a previous build

とあります。

投稿日時 - 2006-09-12 11:02:58

補足

毎回tidyしてからmake makefiles~~をしてmakeしてmake installの順番でしています。
今も再度やってみましたが同じエラーです。

投稿日時 - 2006-09-12 11:15:50

ANo.3

>CCARGS="-DUSE_SASL_AUTH -I/usr/local/include/sasl"

CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl"

参考URL:http://www.postfix.org/SASL_README.html#build_postfix

投稿日時 - 2006-09-12 10:19:45

補足

make時に
未定義の 最初に参照している
シンボル ファイル
sasl_errstring ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_decode64 ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_server_start ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_version_info ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_server_new ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_listmech ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_done ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_getprop ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_encode64 ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_server_step ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_server_init ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_setprop ../../lib/libxsasl.a(xsasl_cyrus_server.o)
sasl_dispose ../../lib/libxsasl.a(xsasl_cyrus_server.o)
ld: 重大なエラー: シンボル参照エラー。smtpd に書き込まれる出力はありません。
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `smtpd'
Current working directory /postfix-2.3.3/src/smtpd
*** Error code 1
make: Fatal error: Command failed for target `update'
となります。
パスが違うだけの問題なのでしょうか??

投稿日時 - 2006-09-12 10:36:29

ANo.2

>できた形式がdbではなかったのでdbm(だっけ?)で設定変えて動きました。

デフォルトのデータベース形式が dbm なんですかね。

例) デフォルトのデータベース形式の確認方法
# postconf -d | grep default_database_type
default_database_type = hash

>ただまだ問題はあって「aaa@bbb」と送ったはずが
>「aaa@bbb.localhost」と勝手にlocalhostがmailqを打つとついているのが確認されました。

Postfixのドキュメントには、ドメインのないアドレスはサポートしていないと書かれています。
そのため、bbbの部分をホスト名と思い、足りないドメイン部分(mydomain)を追加しているのだと思います。
なのでご希望の事は設定上可能ですが、Postfixのドキュメント通りだとドメインがないアドレスになりますので正常にメールを送れない可能性があります。

参考URL
Postfix Configuration Parameters
Postfix main.cf file format
append_at_myorigin と append_dot_mydomain
http://www.postfix.org/postconf.5.html#append_at_myorigin

以下、日本語訳
Postfix設定パラメータ
Postfix main.cf ファイルフォーマット
append_at_myorigin と append_dot_mydomain
http://www.kobitosan.net/postfix/trans-2.2/jhtml/postconf.5.html#append_at_myorigin


>myoriginを消したりもしたのですが・・

これコメントアウトのようにした場合なら、myoriginの規定値は$myhostnameなのでこれが設定されている事になります。

投稿日時 - 2006-09-11 20:01:39

補足

内部で動作確認ができないということでちゃんとしたドメイン名つきのアドレスにしたら

postfix/smtp[13906]: [ID 947731 mail.warning] warning: unsupported SASL client implementation: cyrus
postfix/smtp[13906]: [ID 947731 mail.crit] fatal: SASL library initialization

となりました。googleで調べた結果make時のパスに問題があるという情報にたどり着いたのですが、
make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -R/usr/local/lib -lsasl2"
でやっても動きません。何かおかしいのでしょうか?

以下、必要そうなファイルのパス?
#ls /usr/local/lib/
libdb-4.4.a
libdb-4.4.la
libdb-4.4.so
libdb-4.so -> libdb-4.4.so
libdb.a
libdb.so -> libdb-4.4.so
libsasl2.la
libsasl2.so -> libsasl2.so.2.0.22
libsasl2.so.2 -> libsasl2.so.2.0.22
libsasl2.so.2.0.22
sasl2(ディレクトリ)

#ls /usr/local/lib/sasl2
libanonymous.la
libanonymous.so -> libanonymous.so.2.0.22
libanonymous.so.2 -> libanonymous.so.2.0.22
libanonymous.so.2.0.22
libcrammd5.la
libcrammd5.so -> libcrammd5.so.2.0.22
libcrammd5.so.2 -> libcrammd5.so.2.0.22
libcrammd5.so.2.0.22
libdigestmd5.a
libdigestmd5.la
libgssapiv2.la
libgssapiv2.so -> libgssapiv2.so.2.0.22
libgssapiv2.so.2 -> libgssapiv2.so.2.0.22
libgssapiv2.so.2.0.22
libotp.a
libotp.la
libplain.la
libplain.so -> libplain.so.2.0.22
libplain.so.2 -> libplain.so.2.0.22
libplain.so.2.0.22
libsasldb.la
libsasldb.so -> libsasldb.so.2.0.22
libsasldb.so.2 -> libsasldb.so.2.0.22
libsasldb.so.2.0.22

#ls /usr/local/include/sasl
hmac-md5.h md5.h md5global.h prop.h sasl.h saslplug.h saslutil.h

投稿日時 - 2006-09-12 10:02:13

ANo.1

>saslpasswd.dbにするために何かコマンドを打つ必要があるのでしょうか?

postmapコマンドでデータベースを生成しないといけません。

main.cfファイル内で

>smtp_sasl_password_maps = hash:/etc/postfix/saslpasswd

と指定されているようですので

# postmap hash:/etc/postfix/saslpasswd

でsaslpasswd.dbが生成されると思います。


>また、後に出ているsmtpのエラーがよくわかりません

○ログ 1行目

saslpasswd.db がない事が smtp にとっては [ID 947731 mail.crit] とあるようにログの重要度が crit(critical) つまり 致命的なエラー。

○ログ 2行目

ログ1行目の致命的なエラーを受けて smtp が終了ステータス1で終了したとこをpostfixに関係するプログラムを起動するpostfixマスタープロセスのmasterがログに出力。

○ログ 3行目

ログ 2行目のsmtpの終了を受けて postfixマスタープロセスのmasterが smtp を起動出来なかった(=postfixを起動出来なかった)旨のログを出力。

と言った感じでしょうか。

投稿日時 - 2006-09-11 17:11:02

お礼

すみません。質問してからすぐ思い出してコマンド打ちました。
できた形式がdbではなかったのでdbm(だっけ?)で設定変えて動きました。

ただまだ問題はあって「aaa@bbb」と送ったはずが
「aaa@bbb.localhost」と勝手にlocalhostがmailqを打つとついているのが確認されました。
それが理由で(?)キューにたまったままです・・
どうやらmydomainをかえるとlocalhostの部分が変わったので関係しているのはわかったのですが、勝手に末尾に付くこと事態を避けたいので方法がわからない状態です。
myoriginを消したりもしたのですが・・

投稿日時 - 2006-09-11 17:36:27

あなたにオススメの質問