(Ruby) Getting Net::SMTP working with Gmail…?

后端 未结 5 1250
野的像风
野的像风 2020-12-05 17:50

Does anyone have any quality (and up-to-date) information regarding sending mail via Gmail using Ruby\'s Net::SMTP? I\'ve seen several examples -- most dating from 2007 to

相关标签:
5条回答
  • 2020-12-05 18:40

    https://web.archive.org/web/20110113211408/http://blog.segment7.net/articles/2009/07/08/smtp_tls-1-0-3 might help

    and here are some more characters to satisfy SO requirements...

    0 讨论(0)
  • 2020-12-05 18:46

    Are you connecting to smtp.gmail.com port 465 I am assuming? .

    openssl s_client -connect smtp.gmail.com:587
    

    CONNECTED(00000003) 8298:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:601:

    The error looks very similar to yours. The following command does work:

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

    So I think what is happening is that you do not have STARTTLS support enabled. I am not sure how to do it in ruby buy what I did find out is that the action_mailer_tls plugin allows this by patching Net::SMTP. As of Ruby 1.8.7, Net::SMTP has this support built-in.

    If you are using Ruby < 1.8.7 here is the patch.

    0 讨论(0)
  • 2020-12-05 18:49

    You also need to have two newline characters between the subject and the body of the message. Otherwise, only the subject will be transmitted, and the message body will be left blank.

    msg = "Subject: My Subject Goes Here\n\nMy message goes here"
    
    0 讨论(0)
  • 2020-12-05 18:51

    I actually just got this working. Wrote a quick script to test it.

    I was getting a different error than you were (requiring STARTTLS), I also found I had to use port 587 instead of 465.

    I found the trick to get it working in a Rails plugin I found. (agilewebdevelopment.com/plugins/net_smtp_tls_support)

    if you 'eval' this file (it adds tls support to the standard Net::SMTP library):

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

    then run 'Net::SMTP.enable_tls()'

    everything seems to work fine.

    Here's my code:

    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: <unique.message.id.string@example.com>
    
    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
    

    obviously, i downloaded the above mentioned file to the same directory and named it 'smtp_tls.rb'

    Hope this helps!

    0 讨论(0)
  • 2020-12-05 18:52

    Actually the below works for gmail without a plugin or a gem, at least with Ruby 1.9.1p376, but good luck finding documentation that'll tell you so:

        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 looks like 'you@domain.com' & YourDomain can probably be anything you like, but I use the actual domain name.

    0 讨论(0)
提交回复
热议问题