2009-07-26 6 views
22

RubyのNet :: SMTPを使用してGmailを介してメールを送信することに関する品質(最新)の情報はありますか?私はいくつかの例を見てきました。ほとんどのものが2007年から2008年半ばまでの日付であり、どれも私のために働いていません。最新の1.8.7リリースを使用している最新のサンプルが必要です。私は、ドキュメントが、誰も実際に使用していない簡単な例だけではカバーしていないと感謝しています。 SMTPプロトコルに関して(Ruby)GmailでNet :: SMTPを使用するには...?

SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol 

私はひどくSSLに精通していないよ、これはすべて私に失われた:

は現在、私は、エラーを受信して​​います。残念なことに、Net :: SMTPのドキュメントはベースだけをカバーしており、様々な潜在的なOpenSSL :: SSLコンテキストの完全なリストを提供していないので、さまざまなものを試すこともできません。

とにかく、誰かがこれをGmailと連携させるための品質情報があれば、それは最も高く評価されます。

ベスト。

答えて

10

かもしれません。テストするためのクイックスクリプトを作成しました。

あなたは(STARTTLSを必要とする)されたよりも、私は別のエラーを得ていた、私はまた、私はトリックが、それは私が見つけたのRailsプラグインでの作業を取得することが判明、私はポート587の代わりに465

を使用していた発見しました。 (agilewebdevelopment.com/plugins/net_smtp_tls_support)

あなたはこのファイル(それは標準のネット:: SMTPライブラリにTLSサポートを追加します) 'にeval' の場合:

http://happiness-is-slavery.net/wp-content/rails-plugins/smtp_add_tls_support/lib/smtp_add_tls_support.rb

をし、「ネット:: SMTPを実行します。 enable_tls() '

すべてうまくいくようです。

明らか
require 'rubygems' 
require 'net/smtp' 

eval File.read("smtp_tls.rb") 
Net::SMTP.enable_tls() 
FROM_EMAIL = "REMOVED" 
PASSWORD = "REMOVED" 
TO_EMAIL = "REMOVED" 

msgstr = <<END_OF_MESSAGE 
From: Your Name <#{FROM_EMAIL}> 
To: my phone <#{TO_EMAIL}> 
Subject: text message 
Date: Sat, 23 Jun 2001 16:26:43 +0900 
Message-Id: <[email protected]> 

This is a test message. 
END_OF_MESSAGE 

Net::SMTP.start('smtp.gmail.com', 587, 'gmail.com', 
         FROM_EMAIL, PASSWORD, :plain) do |smtp| 
    smtp.send_message msgstr, FROM_EMAIL, TO_EMAIL 

end 

が、私は同じディレクトリに上記のファイルをダウンロードし、「smtp_tls.rb」このことができます

希望それを命名:

は、ここに私のコードです!

+0

はおそらくあまりにも動作するsmtp_tls宝石のように見えます... – Jerceratops

+0

"上記のファイル"のURLが壊れています。それはどこに行った任意のアイデア? ねえ!それを見つけた:https://github.com/andreashappe/smtp_add_tls_support – JDS

2

あなたはsmtp.gmail.comポート465に接続していますか? 。

openssl s_client -connect smtp.gmail.com:587 
CONNECTED

(00000003) 8298:エラー:140770FC:SSLルーチン:SSL23_GET_SERVER_HELLO:不明なプロトコル:s23_clnt.c:601:

エラーはあなたに非常によく似ています。次のコマンドは動作します:

openssl s_client -starttls smtp -connect smtp.gmail.com:587 

私は、あなたがSTARTTLSサポートを有効にしていないと考えています。私はrubyでそれをどうやって行うのか分かりません。私が見つけたものは、action_mailer_tlsプラグインがNet :: SMTPにパッチを当てることでこれを可能にするということです。 Ruby 1.8.7以降、Net :: SMTPにはこのサポートが組み込まれています。

Rubyをご使用の場合< 1.8.7 hereはパッチです。

+0

実際、Gmailは奇妙な獣だと思われます。ポート465はうまく動作しますが、ポート587 *と*でSTARTTLSを使用する必要があるため、問題が発生します。後者は私が仕事をするのに必要な組み合わせです。何か案は? –

+0

SSL/STARTTLSは587でも不可能だと言っていますか? –

+0

私の投稿を編集しました。 SSLを使用せずにHELOを起動した後にSTARTTLSコマンドを実行すると、サーバーの起動を要求するように動作しているように見えます。私は確信していません。 –

46

実際に以下のようにあなたを教えてあげるのドキュメントを見つける少なくともルビー1.9.1p376で、プラグインや宝石なしでGmailの動作しますが、幸運:

require 'net/smtp' 

    msg = "Subject: Hi There!\n\nThis works, and this part is in the body." 
    smtp = Net::SMTP.new 'smtp.gmail.com', 587 
    smtp.enable_starttls 
    smtp.start(YourDomain, YourAccountName, YourPassword, :login) do 
     smtp.send_message(msg, FromAddress, ToAddress) 
    end 

YourAccountNameはあなた」のように見えます@ domain.com '& YourDomainはおそらくあなたの好きなものですが、実際のドメイン名を使用します。

+0

それは素晴らしい作品、おかげでたくさん...善良私 – jasoares

+1

ああ、ありがとうございました。これに関するドキュメントはひどいです。素敵な例! :) –

+0

これで "スタックレベルが深すぎる"というエラーが表示されています。最初のメールが「OK」で送信され、別のメールを送信しようとすると、そのエラーが発生します。何が問題なの?ありがとう。 –

1

また、件名と本文の間に2つの改行文字が必要です。それ以外の場合は、件名のみが送信され、メッセージ本文は空白のままになります。

msg = "Subject: My Subject Goes Here\n\nMy message goes here" 
関連する問題