mailの最近のブログ記事

Rails3でメールを送信したところ、送信できなかった。

ActionMailerの設定は、

config/initializers/02_action_mailer.rb
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
  :address        => "mail.example.com",
  :port           => "587",
  :domain         => "example.com",
  :user_name      => "username",
  :password       => "password",
  :authentication => :cram_md5
}

のようにしている。
同じ設定で、Rails2では送信できている。

原因

ActionMailer::Base.raise_delivery_errors = true

を追加して実行したところ、

OpenSSL::SSL::SSLError (hostname was not match with the server certificate)

となり、SSL証明書の検証で例外が発生しているらしいことが分かった。

また、メールサーバのログでも、
connect from xxxxx
setting up TLS connection from xxxxx
TLS connection established from xxxxx
lost connection after STARTTLS from xxxxx
disconnect from xxxxx
という状態だった。

このメールサーバはテスト用のpostfixで、
smtpd_tls_security_level = may
にしており、
smtpd_tls_cert_file、smtpd_tls_key_file には、自己証明書を設定していた。

Rails3では、STARTTLSがデフォルトで有効になっているためTLSで接続しようとするが、このメールサーバの証明書がテスト用の自己証明書だったので検証に失敗していたのが原因らしい。

解決方法

証明書を正当なものにすればよいと思われるが、テスト環境なのでとりあえず今は自己証明書を使いたい。
そのためには、ActionMailer::Base.smtp_settingsの設定で、STARTTLSを無効にするか証明書の検証を無効にする。

ActionMailer::Base.smtp_settings = {
  :address        => "mail.example.com",
  :port           => "587",
  :domain         => "example.com",
  :user_name      => "username",
  :password       => "password",
  :authentication => :cram_md5,
  :enable_starttls_auto => true,  # STARTTLSを無効にする場合はfalseにする
  :openssl_verify_mode => 'none'  # STARTTLSを有効にしつつ、不正な証明書もOKにしたい場合は、証明書の検証を無効にする
}

証明書の検証を無効にするのは本当はよくないけど、テスト環境等で自己証明書でもOKにしたい場合は、とりあえず上記のようにすれば、TLSでメールが送信できます。


OpenWebOps

email - Postfix & Rails 3.0 ActionMailer: lost connection after STARTTLS - Stack Overflow

カテゴリー:

カテゴリー:

カテゴリー:

Postfixで、aliasesや.forwardで転送設定した場合に、転送がエラーになると、元の送信者にエラーメールがいってしまう。

これを防ぐ一番簡単な方法は、転送先をsendmailコマンドへのリダイレクトにして、-fオプションでエンベロープ送信者を変更すること。

| /usr/sbin/sendmail -f <エンベーロープ送信者> <転送先アドレス>
のように設定する。


例:

foo: foo, "| /usr/sbin/sendmail -f forward xxx@example.com"

sendmailコマンドの-fオプションは、エンベロープ送信者の指定。
エラーメールはエンベロープ送信者に送信されるので、これで元の送信者にエラーメールはいかなくなる。
エラーメールの送信がループしないよう注意は必要。
上記の例ではforwardの転送先が最終的にfooにならないようにする。

[postfix-jp:01469] Re: [Q] .forward で転送失敗のメールを送信者に知らせたくない

カテゴリー:

カテゴリー:

Postfix チュートリアル - Postfixの罠

Postfix は「-」で始まっているメールアドレスへの配送をデフォルトで拒否してしまう。

メールログを見ると、
status=bounced (bad address syntax)
となっている。

「-」で始まっているメールアドレスへの配送を許可するには、main.cfに

allow_min_user = yes

カテゴリー:

カテゴリー:

■ PAMの設定

$ cd /etc/pam.d
$ sudo cp ftpd pop
$ sudo cp ftpd imap

■ UW IMAPのインストール

http://www.washington.edu/imap/ からUW IMAP toolkit source distributionをダウンロードして適当なディレクトリに展開する。
展開したディレクトリで、

$ make osx SSLTYPE=none PASSWDTYPE=pam

実行ファイルを/usr/local/libexec/にコピー。

$ sudo mkdir /usr/local/libexec
$ sudo cp imapd/imapd /usr/local/libexec/
$ sudo cp ipopd/ipop3d /usr/local/libexec/

■ 自動起動の設定

自動起動のためのplistを2つ作成する。

/Library/LaunchDaemons/imap.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>edu.washington.imap</string>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/local/libexec/imapd</string>
	</array>
	<key>Sockets</key>
	<dict>
		<key>Listeners</key>
		<dict>
			<key>Bonjour</key>
			<false/>
			<key>SockServiceName</key>
			<string>imap</string>
			<key>SockType</key>
			<string>stream</string>
		</dict>
	</dict>
	<key>inetdCompatibility</key>
	<dict>
		<key>Wait</key>
		<false/>
	</dict>
</dict>
</plist>
/Library/LaunchDaemons/pop3.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>edu.washington.pop3</string>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/local/libexec/ipop3d</string>
	</array>
	<key>Sockets</key>
	<dict>
		<key>Listeners</key>
		<dict>
			<key>Bonjour</key>
			<false/>
			<key>SockServiceName</key>
			<string>pop3</string>
			<key>SockType</key>
			<string>stream</string>
		</dict>
	</dict>
	<key>inetdCompatibility</key>
	<dict>
		<key>Wait</key>
		<false/>
	</dict>
</dict>
</plist>
作成したplistをロード。
$ sudo launchctl load /Library/LaunchDaemons/pop3.plist
$ sudo launchctl load /Library/LaunchDaemons/imap.plist

カテゴリー:

40 ubuntuにpostfixでSMTP AUTH 【mjrecのなんでもない日々】/ウェブリブログ【mjrecのなんでもない日々】

$ touch /etc/sasldb2
$ sudo chown postfix /etc/sasldb2
$ sudo ln /etc/sasldb2 /var/spool/postfix/etc/sasldb2
$ sudo /usr/sbin/saslpasswd2 -c -u domain名 user名

sasldb2へのシンボリックリンクと、オーナーの設定が必要だった。

カテゴリー:

カテゴリー: