RubyのNet/SMTPでメールを送りたいです。
smtp4devでダミーのSMTPサーバー(localhost)を使うので実際にメールが外に流れることはありません。
やりたいことは
SMTP AUTH認証 と TLS の2つが整っているSMTPサーバーにアクセスしてメールを送るプログラムを作成
するということです。
一応、SMTP AUTH認証だけが実装されているパータンのものは成功しました。
ruby
1require 'net/smtp' 2a = Net::SMTP.new("localhost",50002) 3a.start('localhost'){|smtp| 4 smtp.authenticate("sample_user_name","sample_password") 5 smtp.send_message(<<-EndOfMail, 'from@example.com', 'to@example.net') 6 From: Your Name <from@example.com> 7 To: Dest Address <to@example.net> 8 Subject: test mail 9 Date: Sat, 23 Jun 2019 18:20:50 +0900 10 Message-Id: <unique.message.id.string@yourhost.example.com> 11 12 This is a test mail. 13 EndOfMail 14} 15
smtp4devの仕様なのか
startの引数に指定するSMTP AUTHの情報はなんでも通過できます。(なにも指定しなければ無論エラーになる。)
とりあえずこれでメールを送ることはできました。
つぎはTLS機能もsmtp4devに設定して(TLSじゃないと受け付けない・・・はず)
プログラムコードには
ruby
1starttlsメソッド
を追加
ver2.4リファレンス
ruby
1require 'net/smtp' 2a = Net::SMTP.new("localhost",50002) 3a.start('localhost'){|smtp| 4 smtp.starttls 5 smtp.authenticate("sample_user_name","sample_password") 6 smtp.send_message(<<-EndOfMail, 'from@example.com', 'to@example.net') 7 From: Your Name <from@example.com> 8 To: Dest Address <to@example.net> 9 Subject: test mail 10 Date: Sat, 23 Jun 2019 18:20:50 +0900 11 Message-Id: <unique.message.id.string@yourhost.example.com> 12 13 This is a test mail. 14 EndOfMail 15} 16
実行結果
cmd
1:\Users\matsu\Desktop\ruby_lesson>ruby sample.rb 2<internal:prelude>:78:in `__read_nonblock': An established connection was aborted by the software in your host machine. (Errno::ECONNABORTED) 3 from <internal:prelude>:78:in `read_nonblock' 4 from C:/Ruby24-x64/lib/ruby/2.4.0/net/protocol.rb:172:in `rbuf_fill' 5 from C:/Ruby24-x64/lib/ruby/2.4.0/net/protocol.rb:154:in `readuntil' 6 from C:/Ruby24-x64/lib/ruby/2.4.0/net/protocol.rb:164:in `readline' 7 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:950:in `recv_response' 8 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:944:in `get_response' 9 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:734:in `block in auth_plain' 10 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:960:in `critical' 11 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:733:in `auth_plain' 12 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:728:in `authenticate' 13 from sample.rb:5:in `block in <main>' 14 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:519:in `start' 15 from sample.rb:3:in `<main>'
cmd
1確立された接続は、ホストマシンのソフトウェアによって中止されました。
みたいなことが書かれてありますが
コード自体には問題はないのでしょうか?
ファイアウォールが原因なのかと思い一回すべて無効にしてから
実行してみたのですが結果は全く変わらなかったので
ファイアウォールは関係ないと思います。
何が原因なのかがわかりません。
リファレンスを見た限り違うと思いますが
Rubyのバージョン自体の問題なのでしょうか?
分からないので参考になるリンクまたは説明をお願いします。
解決方法
smtp4devではできませんでしたがsendgridを経由したらいけました。
smtp4dev自体に問題があったようです。
ruby
1require 'net/smtp' 2a = Net::SMTP.new("smtp.sendgrid.net", 587) 3a.enable_starttls 4a.start('matsukazu0409@gmail.com'){|smtp| 5 smtp.authenticate("sendgridユーザー","パスワード") 6 smtp.send_message(<<-EndOfMail, 'matsukazu0409@gmail.com', 'matsu-kazu4@ezweb.ne.jp') 7 From: Your Name <from@example.com> 8 To: Dest Address <to@example.net> 9 Subject: test mail 10 Date: Sat, 23 Jun 2019 18:20:50 +0900 11 Message-Id: <unique.message.id.string@yourhost.example.com> 12 13 This is a test mail. 14 EndOfMail 15 16 17 } 18

回答2件
あなたの回答
tips
プレビュー