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("
[email protected]");
$m->AgregaDireccion("
[email protected]");
$m->AgregaRemitente("
[email protected]");
$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;
}
}
?>