PHP:SMTP utilizando Sockets en PHP

De Foros del Web

Estuve probando cómo hacer para autenticar usuario SMTP por Sockets y este código me ha dado buenos resultados:

/////////////// Archivo mail.php /////////////////////

set_time_limit(0);

include("cmailer.php");

$m = new cMailer(); $m->AgregaDireccion("destino1@isp.org"); $m->AgregaDireccion("destino2@isp.com");

$m->AgregaRemitente("remitente@isp.com"); $m->AgregaAsunto("Mensaje de prueba");

$m->AgregaMensaje("Este es un sencillo mensaje de prueba configurando Username y Password");

$m->AgregaServidor("smtp.isp.com");

$m->AgregaNombreUsuario("nombreusuario");

$m->AgregaContrasenya("contraseña");

$m->Autenticar();

$m->Enviar();

?>


/////////////////// Archivo cmailer.php//////////////////////////////

class cMailer { var $_Direcciones;

var $_cantidadDirecciones = 0;

var $_ConexionSMTP;

var $_Remitente;

var $_ServidorSMTP;

var $_Asunto = "";

var $_Mensaje;

var $_NombreUsuario;

var $_Contrasenya;

var $_Autenticar = 0;


function cMailer() { }


function AgregaNombreUsuario($NombreUsuario) {

$this->_NombreUsuario = $NombreUsuario; }

function AgregaContrasenya($Contrasenya) {

$this->_Contrasenya = $Contrasenya; }

function Autenticar() {

$this->_Autenticar = 1; }

function NoAutenticar() {

$this->_Autenticar = 0; }

function AgregaDireccion($Direccion) {

$this->_Direcciones[$this->_cantidadDirecciones] = $Direccion;

$this->_cantidadDirecciones++; }

function AgregaRemitente($Remitente) {

$this->_Remitente = $Remitente; }

function AgregaMensaje($Mensaje) {

$this->_Mensaje = $Mensaje; }

function AgregaAsunto($Asunto) {

$this->_Asunto = $Asunto; }

function Enviar() {

$cadenaEHLO = "EHLO ".$this->_ServidorSMTP."\r\n";

fputs($this->_ConexionSMTP, $cadenaEHLO);

if($this->_Autenticar == 1) {

$cadenaAUTH = "AUTH LOGIN\r\n";

fputs($this->_ConexionSMTP, $cadenaAUTH);

$cadenaNombreUsuario = base64_encode($this->_NombreUsuario)."\r\n";

fputs($this->_ConexionSMTP, $cadenaNombreUsuario);

$cadenaContrasenya = base64_encode($this->_Contrasenya)."\r\n";

fputs($this->_ConexionSMTP, $cadenaContrasenya); }

$cadenaMAIL = "MAIL FROM: ".$this->_Remitente."\r\n";

fputs($this->_ConexionSMTP, $cadenaMAIL);

for($i = 0; $i < $this->_cantidadDirecciones; $i++) {

$cadenaRCPT .= "RCPT TO: ".$this->_Direcciones[$i]."\r\n"; }

$cadenaRCPT .= "\r\n";

fputs($this->_ConexionSMTP, $cadenaRCPT);

$cadenaDATA1 = "DATA\r\n";

fputs($this->_ConexionSMTP, $cadenaDATA1);

if($this->_Asunto != "") {

$cadenaSubject = "Subject: ".$this->_Asunto."\r\n\r\n";

fputs($this->_ConexionSMTP, $cadenaSubject); }


$cadenaDATA2 = $this->_Mensaje."\r\n.\r\n";

fputs($this->_ConexionSMTP, $cadenaDATA2);

fputs($this->_ConexionSMTP, "QUIT\r\n");

fclose($this->_ConexionSMTP); }

function AgregaServidor($Servidor, $Puerto = 25) {

$this->_ConexionSMTP = fsockopen("$Servidor", "$Puerto", $e, $em, 5) or die("No puedo abrir el socket");

echo fgets($this->_ConexionSMTP, 4096)."

\n";

$this->_ServidorSMTP = $Servidor; }

}

?>


--Fmmeson 05 Dic 2002

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales