Вопрос

Есть ли у кого-нибудь качественная (и актуальная) информация об отправке почты через Gmail с использованием Ruby's Net:: SMTP?Я видел несколько примеров, большинство из которых датируются периодом с 2007 по середину 2008 года, и ни один из них мне не подходит.Мне нужно больше актуальных примеров, в которых используется самая последняя версия 1.8.7.Я также был бы признателен, если бы документация охватывала не только простые примеры, которые на самом деле никто никогда не использует.

В настоящее время я получаю сообщение об ошибке:

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

Я не очень хорошо знаком с SSL в том, что касается протокола SMTP, так что все это упущено из виду.К сожалению, документация Net :: SMTP охватывает только основы и также не предоставляет полный список различных потенциальных контекстов OpenSSL :: SSL, поэтому я не могу попробовать различные из них.

В любом случае, если у кого-нибудь есть какая-либо качественная информация о том, как заставить это работать с Gmail, я был бы вам очень признателен.

Лучшие.

Это было полезно?

Решение

На самом деле у меня это только что получилось.Написал быстрый скрипт для проверки.

Я получал другую ошибку, чем вы (требуется STARTTLS), я также обнаружил, что мне пришлось использовать порт 587 вместо 465.

Я нашел способ заставить его работать в плагине Rails, который нашел.(agilewebdevelopment.com/plugins/net_smtp_tls_support)

если вы «оцениваете» этот файл (он добавляет поддержку tls в стандартную библиотеку Net::SMTP):

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

затем запустите «Net::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: <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

очевидно, я загрузил вышеупомянутый файл в тот же каталог и назвал его «smtp_tls.rb».

Надеюсь это поможет!

Другие советы

На самом деле приведенное ниже работает для Gmail без плагина или драгоценного камня, по крайней мере, с Ruby 1.9.1p376, но удачи в поиске документации, которая вам это скажет:

    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 выглядит как «you@domain.com», а YourDomain, вероятно, может быть любым, но я использую фактическое имя домена.

Вы подключаетесь к smtp.gmail.com порту 465, я полагаю?.

openssl s_client -connect smtp.gmail.com:587

ПОДКЛЮЧЕН (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 здесь это патч.

Вам также необходимо иметь два символа новой строки между темой и телом сообщения.В противном случае будет передана только тема, а тело сообщения останется пустым.

msg = "Subject: My Subject Goes Here\n\nMy message goes here"

https://web.archive.org/web/20110113211408/http://blog.segment7.net/articles/2009/07/08/smtp_tls-1-0-3может помочь

и вот еще несколько символов, удовлетворяющих требованиям SO...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top