Thinking on hiring me?

Please read

Fernando Guillén

a Freelance Web Developer

cabecera decorativa

software development as an artistic expression

Ruby: cliente Pop SSL ó como leer tu cuenta Gmail desde Ruby.

Cómo ya dicen en muchas partes, pero me repito aquí para parecer muy listo y por marcarlo como nota mental, para acceder a tu cuenta Pop en Gmail desde Ruby hay que hacer una ñapa porque la versión actual de Ruby (1.8.6) no admite conexiones Pop bajo SSL.

Si si.. la 1.9 ya tiene el soporte, y dicen por ahí que descargándote el pop.rb de esta versión desde el repositorio y haciéndole un require ya funciona.. pero no, por lo menos a mí no porque me salta alguna dependencia con OpenSSl:

NoMethodError: undefined method `set_params' for #<openssl::ssl::sslcontext:0x210f4d0>;
</openssl::ssl::sslcontext:0x210f4d0>

Y no quería seguir tirando de el hilo.

El workarround que más me ha gustado ha sido el de montar un tunel ssh y hacer la petición desde el Net::POP3 al túnel y que el túnel se la haga llegar al pop de Gmail bajo SSL.

No voy a entrar en detalle porque ya lo hacen en muchos sitios.

Actualizado: acabo de ver un sitio dónde explican como usar la implementación pop.rb de la 1.9 sin el problema que me da a mí.

Los pasos resumidos que este post explica son:

1) Descargarte una implementación de la librería POP3: la versión 13778.

2) Ponerla en tu carpeta lib con este nombre por ejemplo: pop_ssl.rb con esto sobreescribiremos la implementación de esta librería que trae ruby por defecto con una versión mayor.

3) Descargarte este fichero y ponerlo también en lib: pop_gmail_client.rb

class PopGmailClient
  def self.read_account( account_user, account_pass )
    mails = []
    Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE)
    Net::POP3.start( 'pop.gmail.com', 995, account_user, account_pass ) do |pop|
      pop.each_mail do |m|
        mails << m.pop
      end
    end
    mails
  end
end

4) Requerirlos desde el environment.rb al final del todo con:

require 'pop_ssl'
require 'pop_gmail_client'

Y ya podemos usarlo como queramos:

$ script/console
Loading development environment (Rails 2.0.2)
>> PopGmailClient.read_account( "fguillen.testing@gmail.com", "xxx" )

O desde ruby directamente:

$ irb
>> require 'lib/pop_ssl.rb'
=> true
>> require 'lib/pop_client_gmail.rb'
=> true
>> PopGmailClient.read_account( "fguillen.testing@gmail.com", "xxx" )
4 Comments to “Ruby: cliente Pop SSL ó como leer tu cuenta Gmail desde Ruby.”
  1. Alex Epelde Says:

    Haciendo un pequeño desarrollo me he encontrado con esta problemática que planteas en el post. La verdad que la solución planteada en tu última actualización parece la mejor, y digo parece porque no se muy ien como implemetarla. ¿Se supone que una versión antigua del POP3 no tiene ese problema? ¿Como la “importo” en mi proyecto? Disculpa mi “novatez”. La verdad es que llevo muy poco con ruby, pero me está enganchando bastante. Disculpa también si te estoy molestando de alguna forma planteandote estas dudas. Enhorabuena por el blog.

  2. fguillen Says:

    Hola @Alex, no molestas en absoluto y tus formas son muy correctas.

    He actualizado la ‘actualización’ con una pequeña explicación de los pasos a dar.

    Espero te sirva.

    f.

  3. หนังxxx Says:

    Thankѕ for some other informative site. Where else may
    I am getting that type of infߋ written in such a perfect means?

    I’ve a mission that I’m just now running on, and I’ve been at the looқ
    out foг such info.

  4. หนังเอ็ก Says:

    Hі there mates, how is everything, and what you wish for to say
    about this article, in my view its really amazing in favօr
    of me.

Leave a comment

a Freelance Web Developer is proudly powered by WordPress
Entries (RSS) and Comments (RSS).

Creative Commons License
Fernando Guillen's blog by Fernando Guillen is licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License.