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.
- Indice de las FAQs: Conceptos, Configuración, Formularios, Manejo de Archivos, Integración con Bases de Datos, Sesiones, Extensiones y Librerías, Seguridad, Funciones, Clases y Objetos, Frameworks
- Recomendamos también: Guía Zend, Frameworks PHP, Aceleradores PHP
- Agregar al FAQ: PHP: Instrucciones para agregar una pregunta al FAQ de PHP
- Para preguntas sobre PHP: Foro de Php
