ruby smtp email-integration ruby-1.8

(Ruby) Getting Net:: SMTP trabajando con Gmail...?



email-integration ruby-1.8 (5)

¿Alguien tiene alguna información de calidad (y actualizada) con respecto al envío de correo a través de Gmail utilizando Ruby''s Net :: SMTP? He visto varios ejemplos, la mayoría desde 2007 hasta mediados de 2008 y ninguno de ellos funciona para mí. Necesito más ejemplos actuales que usen la versión más reciente 1.8.7. También apreciaría si la documentación no solo cubriera ejemplos simples que nadie usa realmente.

Actualmente estoy recibiendo un error:

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

No estoy muy familiarizado con SSL en lo que respecta al protocolo SMTP, por lo que todo esto se pierde en mí. Desafortunadamente, la documentación de Net :: SMTP solo cubre las bases y no proporciona una lista completa de los diversos contextos potenciales de OpenSSL :: SSL, así que no puedo probar varios.

De todos modos, si alguien tiene información de calidad sobre cómo hacer que esto funcione con Gmail, sería muy apreciado.

Mejor.


¿Se está conectando al puerto 465 de smtp.gmail.com, estoy asumiendo? .

openssl s_client -connect smtp.gmail.com:587

CONECTADO (00000003) 8298: error: 140770FC: rutinas SSL: SSL23_GET_SERVER_HELLO: protocolo desconocido: s23_clnt.c: 601:

El error parece muy similar al tuyo. El siguiente comando funciona:

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

Entonces, creo que lo que está sucediendo es que no tiene habilitada la compatibilidad con STARTTLS. No estoy seguro de cómo hacerlo en Ruby Buy. Lo que sí descubrí es que el complemento action_mailer_tls lo permite parcheando Net :: SMTP. A partir de Ruby 1.8.7, Net :: SMTP tiene este soporte incorporado.

Si está utilizando Ruby <1.8.7 here está el parche.


En realidad acabo de hacer funcionar esto. Escribió un guión rápido para probarlo.

Recibí un error diferente al de usted (requiriendo STARTTLS), también descubrí que tenía que usar el puerto 587 en lugar del 465.

Encontré el truco para hacerlo funcionar en un plugin de Rails que encontré. (agilewebdevelopment.com/plugins/net_smtp_tls_support)

si ''evalúa'' este archivo (agrega el soporte tls a la biblioteca Net :: SMTP estándar):

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

luego ejecute ''Net :: SMTP.enable_tls ()''

Todo parece funcionar bien.

Aquí está mi código:

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

obviamente, descargué el archivo mencionado anteriormente en el mismo directorio y lo nombré ''smtp_tls.rb''

¡Espero que esto ayude!


En realidad, lo siguiente funciona para gmail sin un complemento o una gema, al menos con Ruby 1.9.1p376, pero buena suerte para encontrar documentación que te lo diga:

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 se ve como ''[email protected]'' y YourDomain probablemente puede ser lo que quieras, pero uso el nombre de dominio real.


También debe tener dos caracteres de nueva línea entre el asunto y el cuerpo del mensaje. De lo contrario, solo se transmitirá el asunto y el cuerpo del mensaje se dejará en blanco.

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