Libreria Net/SMTP (by sh4van3)

Iniciado por ANTRAX, Febrero 24, 2010, 04:19:32 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Hoy vamos a ver la librer?a Net/SMTP. Lo primero de todo, un poco de teor?a sacada de la Wikipedia:

Simple Mail Transfer Protocol (SMTP), o protocolo simple de transferencia de correo. Protocolo de red basado en texto utilizado para el intercambio de mensajes de correo electr?nico entre computadoras u otros dispositivos (PDA's, tel?fonos m?viles, etc.). Est? definido en el RFC 2821 y es un est?ndar oficial de Internet.
SMTP se basa en el modelo cliente-servidor, donde un cliente env?a un mensaje a uno o varios receptores. La comunicaci?n entre el cliente y el servidor consiste enteramente en l?neas de texto compuestas por caracteres ASCII. El tama?o m?ximo permitido para estas l?neas es de 1000 caracteres.


Ahora ya vamos a la pr?ctica. Gracias a esta librer?a podemos enviar mails por medio de un servidor SMTP a un nivel m?s alto que con sockets. Lo primero que tenemos que hacer es requerir la librer?a, y crear el objeto mediante el cual se va a realizar la conexi?n con nuestro servidor SMTP:
Código: php

require 'net/smtp' #Requerimos la librer?a SMTP
smtp=Net::SMTP.start('servidorsmtp', puerto, 'dominio', '[email protected]', 'contrase?a') # Creamos el objeto y establecemos la conexi?n con el servidor SMTP


Una vez tenemos creada la conexi?n, tenemos que preparar nuestro mensaje. Para ello creamos el mensaje:

Código: php
mail="From: Perico <[email protected]>\n To: destinatario <[email protected]>\n Subject: Asunto del mensaje\n Texto del mensaje\n" # Creamos nuestro mensaje y lo declaramos en la variable "mail"


Ahora s?lo queda mandar el mail. Para ello, una vez declarada la variable "mail" que es donde reside el mensaje, tenemos que enviarlo:
Código: php

smtp.send_message(mail, '[email protected]', '[email protected]')#aplicamos a la variable smtp el m?todo "send_message".


Una vez mandado quedar?a cerrar la sesi?n. Para cerrar la sesi?n podemos hacerlo de dos formas:

1.- Si lo hemos hecho por variables (como lo he explicado yo hasta ahora):

Código: php
smtp.finish


2.- Si hemos utilizado un bloque, cerrar?a sesi?n autom?ticamente:

Código: php
Net::SMTP.start('servidorsmtp', puerto, 'dominio', '[email protected]', 'contrase?a') do |smtp|
smtp.send_message(mail, '[email protected]', '[email protected]')
end


Ahora veamos dos ejemplos de env?o de mails:

Ejemplo 1 (sin bloque)
Código: php
require 'net/smtp'
mail="From: Perico <[email protected]>\n To: destinatario <[email protected]>\n Subject: Asunto del mensaje\n Texto del mensaje\n"
smtp=Net::SMTP.start('servidorsmtp', puerto, 'dominio', '[email protected]', 'contrase?a')
smtp.send_message(mail, '[email protected]', '[email protected]')
smtp.finish


Ejemplo 2(con bloque)
Código: php
mail="From: Perico <[email protected]>\n To: destinatario <[email protected]>\n Subject: Asunto del mensaje\n Texto del mensaje\n
Net::SMTP.start('servidorsmtp', puerto, 'dominio', '[email protected]', 'contrase?a') do |smtp|
smtp.send_message(mail, '[email protected]', '[email protected]')
end


Si crearamos un iterador, tendr?amos nuestro propio mail-bomber:P

Saludos!