質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

1546閲覧

Ruby Net::SMTP メール送れない startメソッド

kazuyakazuya

総合スコア193

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/08/05 08:01

編集2019/08/05 11:54

RubyのNet/smtpでメールを送りたいです。
参考リファレンス
メール送信先・・・matsu-kazu4@ezweb.ne.jp
送信元 ・・・ matsukazu0409@gmail.com

ruby

1require 'net/smtp' 2Net::SMTP.new("smtp.gmail.com",587).start("matsukazu0409","パスワード",":plain"){|f| 3 f.open_message_stream("matsukazu0409@gmail.com", "matsu-kazu4@ezweb.ne.jp"){|m| 4 } 5}

実行すると

cmd

1C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:981:in `check_auth_response': 530 5.7.0 Must issue a STARTTLS command first. f6sm85254743pga.50 - gsmtp (Net::SMTPAuthenticationError) 2 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:736:in `auth_plain' 3 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:728:in `authenticate' 4 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:565:in `do_start' 5 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:518:in `start' 6 from sample2.rb:2:in `<main>'

(STARTTLS)
一度非暗号化で通信を開始した後 STARTTLS コマンドを実行し、途中から暗号化ありの通信にアップグレードする手法

イメージ説明

startの引数のauthtype(認証のタイプ)を一通り試したのですがだめでした。
他にもポートや(25番と587番)や
ダブルクォーテーション シングルクォーテーションなど
試したのですがやはりだめでした。

何が原因なのでしょうか?
startメソッドに渡す引数が間違っているのか

原因が分からないので参考になるリンクまたは説明をお願いします。

追記

ruby

1require 'net/smtp' 2Net::SMTP.new("smtp.gmail.com",587).start("matsukazu0409","パスワード",":plain"){|f| 3 f.starttls 4 f.open_message_stream("matsukazu0409@gmail.com", "matsu-kazu4@ezweb.ne.jp"){|m| 5 } 6}

cmd

1#starttls追記前 2C:\Users\u16154\Desktop\ruby_lesson>ruby sample2.rb 3C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:981:in `check_auth_response': 530 5.7.0 Must issue a STARTTLS command first. y128sm103149625pgy.41 - gsmtp (Net::SMTPAuthenticationError) 4 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:736:in `auth_plain' 5 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:728:in `authenticate' 6 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:565:in `do_start' 7 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:518:in `start' 8 from sample2.rb:2:in `<main>' 9 10 11 12#starttls追記後 13C:\Users\u16154\Desktop\ruby_lesson>ruby sample2.rb 14C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:981:in `check_auth_response': 530 5.7.0 Must issue a STARTTLS command first. u16sm15528930pjb.2 - gsmtp (Net::SMTPAuthenticationError) 15 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:736:in `auth_plain' 16 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:728:in `authenticate' 17 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:565:in `do_start' 18 from C:/Ruby24-x64/lib/ruby/2.4.0/net/smtp.rb:518:in `start' 19 from sample2.rb:2:in `<main>'

ruby

1require 'net/smtp' 2s = Net::SMTP.new("smtp.gmail.com","587") 3smtp = s.start("smtp.gmail.com","587")#ポートを記入しないとエラーになる。 4smtp.starttls 5smtp.authenticate("matsukazu0409","パスワード",":plain") 6smtp.open_message_stream("matsukazu0409@gmail.com","matsu-kazu4@ezweb.ne.jp"){|mail| 7}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

正しいプログラムでSTARTTLSで、smtp.gmail.comに送信しようとしてみましたが、認証エラーになり、

ログインをブロックしました

xxxxxxx@gmail.com
誰かがあなたのパスワードを使って Google 以外のアプリからあなたのアカウントにログインしようとしました。Google
はこのログインをブロックしました。アカウント アクティビティを確認し、自分以外は誰もアクセスできないようにしてください。
アクティビティを確認
https://accounts.google.com/AccountChooser?Email=~~~~~~~~
このメールは Google のアカウントやサービスの重要な変更についてお知らせするためにお送りしています。
© 2019 Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA

というメールが来ました。GmailはIDとパスワードが合っていても認証できず、難易度が高いようです。
他のSMTPサーバーを目標にした方が良いでしょう。

投稿2019/08/05 12:07

otn

総合スコア84538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2019/08/05 12:09

ありがとうございます。
guest

0

ベストアンサー

エラーメッセージのとおりです。

530 5.7.0 Must issue a STARTTLS command first

投稿2019/08/05 08:12

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2019/08/05 08:18 編集

ありがとうございます。 リファレンスには starttls というメソッドがありましたが 通常は Net::SMTP#start で STARTTLS が送られるため 利用する必要はないはずです。 と書かれています。。。
maisumakun

2019/08/05 08:20

利用しても変化はなかったのですか?
kazuyakazuya

2019/08/05 08:24

コードを追記しました。 追記のようにやったのですが変化なかったです。
maisumakun

2019/08/05 08:25

同じく「Must issue a STARTTLS command first」が出るということでしょうか?>変化なかった
kazuyakazuya

2019/08/05 08:30

実行結果を追記しました。
maisumakun

2019/08/05 08:33

エラーメッセージを読むと、「STARTTLSの前にAUTHしようとしている」ことが問題のようです。まずは認証なしでstartだけしてからSTARTTLS、AUTHと順を踏んでやってみるといいかもしれません。
kazuyakazuya

2019/08/05 08:50

ありがとうございます。
kazuyakazuya

2019/08/05 09:08

できればお願いします。 認証なしでstartだけしてからSTARTTLS、AUTHと順 コードを追記しました。やり方としては合っていますか? (これでもエラーになってしまう。。。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問