Есть ли у кого-нибудь качественная (и актуальная) информация об отправке почты через Gmail с использованием Ruby 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, мы будем очень признательны.
Лучший.
5 ответов
Я на самом деле только что получил эту работу. Написал быстрый скрипт для проверки.
Я получал другую ошибку, чем вы (требуется STARTTLS), я также обнаружил, что мне пришлось использовать порт 587 вместо 465.
Я нашел способ заставить его работать в найденном мной плагине Rails. (agilewebdevelopment.com/plugins/net_smtp_tls_support)
Если вы оцените этот файл (он добавляет поддержку tls в стандартную библиотеку Net :: SMTP):
Затем запустите '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, вероятно, может быть любым, но я использую фактическое доменное имя.
Я полагаю, вы подключаетесь к порту 465 smtp.gmail.com? .
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 buy, но я обнаружил, что плагин 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 ...
Похожие вопросы
Связанные вопросы
Новые вопросы
ruby
Ruby - это многоплатформенный динамический объектно-ориентированный интерпретируемый язык с открытым исходным кодом. Тег [ruby] предназначен для вопросов, связанных с языком Ruby, включая его синтаксис и его библиотеки. Вопросы Ruby on Rails должны быть помечены [ruby-on-rails].