Hatena::ブログ(Diary)

tackun note

2010-10-28

ActionMailerでメールを送信する!

Rubyでメールを送るぞ!

いろいろやりたいので、標準のSMTPライブラリではなく、actionmailerをつかうことにした。

http://am.rubyonrails.org/


日本語の情報はヽ( ・∀・)ノくまくまーさんがとても詳しく解説されていたので参考にしました。

http://wota.jp/ac/?date=20050731

以下、書いてみたコード。ほとんどくまくまさんのとこのパクリです。

#!/usr/local/bin/ruby

require 'rubygems'
require 'action_mailer'

# SMTPサーバ利用時のオプション
ActionMailer::Base.smtp_settings = {
        :address=>'mail.server.address',
        :port=>'587',
        :domain=>'mail.server.address',
        :user_name=>'user_name',
        :password=>'password',
        :authentication=>:plain
}

# 配送に失敗したら例外を出す
ActionMailer::Base.raise_delivery_errors = true

# 配送手段を :smtp か :sendmail から明示する。
# :sendmail の場合は "/usr/sbin/sendmail"(変更不可) が利用される。
ActionMailer::Base.delivery_method = :smtp     # default :smtp


#クラス定義
class OgaMailer < ActionMailer::Base
        def createMessage(toAddress, fromAddress, subjectText, bodyText)
                from fromAddress
                recipients toAddress
                subject subjectText
                body bodyText
        end
end


OgaMailer.createMessage('to@address', "from@address", "件名", "本文").deliver

が、送信しようとするとエラーが出てしまい送れない!!

/usr/local/lib/ruby/1.8/openssl/ssl-internal.rb:123:in `post_connection_check': hostname was not match with the server certificate (OpenSSL::SSL::SSLError)
        from /usr/local/lib/ruby/1.8/net/smtp.rb:582:in `tlsconnect'
        from /usr/local/lib/ruby/1.8/net/smtp.rb:562:in `do_start'
        from /usr/local/lib/ruby/1.8/net/smtp.rb:525:in `start'
        from /usr/local/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/network/delivery_methods/smtp.rb:115:in `deliver!'
        from /usr/local/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/message.rb:1928:in `do_delivery'
        from /usr/local/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/message.rb:228:in `deliver'
        from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-3.0.1/lib/action_mailer/base.rb:401:in `deliver_mail'
        from /usr/local/lib/ruby/gems/1.8/gems/activesupport-3.0.1/lib/active_support/notifications.rb:52:in `instrument'
        from /usr/local/lib/ruby/gems/1.8/gems/activesupport-3.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
        from /usr/local/lib/ruby/gems/1.8/gems/activesupport-3.0.1/lib/active_support/notifications.rb:52:in `instrument'
        from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-3.0.1/lib/action_mailer/base.rb:399:in `deliver_mail'
        from /usr/local/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/message.rb:228:in `deliver'

どうも認証の処理のところで止まってしまっているようです。

ググって調べてみたところ、メールサーバーによってはTLSを有効にしていると、送信エラーしてしまうこともあるようで、

enable_starttls_auto => false

をActionMailerのsmtp_settings追加することで解決できました。

ActionMailer::Base.smtp_settings = {
        :enable_starttls_auto => false, # うちのサーバーだとTLSを切らないとダメみたい
        :address=>'mail.server.address',
        :port=>'587',
        :domain=>'mail.server.address',
        :user_name=>'user_name',
        :password=>'password',
        :authentication=>:plain
}

送信できました!

もうちょっとまとめて部品化しておこうと思います。

つづく。。。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/tackun/20101028/1288282803