Envíos de email con PHPMailer

En esta publicación vamos a ver como realizar envíos de emails, desde nuestro sitio web, con la librería PHPMailer. En primer lugar tenemos que descargar la librería https://github.com/PHPMailer/PHPMailer.

Ahora empezamos a programar, podemos hacerlo en un solo fichero php.

<?php

//incluyo los ficheros necesarios de la libreria
require('PHPMailer-master/class.phpmailer.php');
require('PHPMailer-master/class.smtp.php');

function mailMailer($destino,$asunto,$cuerpo,$nombre_destino){

$mail = new PHPMailer();

$mail->IsSMTP(); 
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

/*la dirección del servidor, p. ej.: smtp.servidor.com, se consulta en el panel de administración del hosting */
$mail->Host = "************";

// dirección remitente, p. ej.: no-responder@miempresa.com
$mail->From = "no-responder@miempresa.com";

// nombre remitente, p. ej.: Servicio de envío automático
$mail->FromName = "***********";

// asunto y cuerpo alternativo del mensaje
$mail->Subject = $asunto;

//$mail->AltBody = “Cuerpo alternativo 
//para cuando el visor no puede leer HTML en el cuerpo”; 

// si el cuerpo del mensaje es HTML
$mail->MsgHTML($cuerpo);

// podemos hacer varios AddAdress
$mail->AddAddress($destino,$nombre_destino);

// si el SMTP necesita autenticación
$mail->SMTPAuth = true;

// credenciales usuario
$mail->Username = "********";
$mail->Password = "*********"; 

if(!$mail->Send()) {
echo "Error enviando: " . $mail->ErrorInfo;
} else {
echo "¡¡Enviado!!";
}
}

$cuerpo="mensaje con PHPMailer";
$cabeceras = 'Content-type: text/html'."rn".'From: no-responder@miempresa.com' . "rn" .
    'Reply-To: no-responder@miempresa.com' . "rn";
	
// llamo a la funcion pasandole los parametros			
mailMailer("destinatario","Prueba PHPmailer recicla",$cuerpo,$cabeceras);

?>

 

6 thoughts on “Envíos de email con PHPMailer

  1. felix Reply

    No me funciona, estoy manejando el servidor de hostinger, y me truena al enviarlo… que pueda ser?

    Traté de hacerlo con la función mail de php pero si le adjunto headers no lo envia.

    • admin Post authorReply

      Hola Felix,

      ¿ es el servidor gratuito de Hostinger? Hostinger suele dar problemas en este tema en el servicio gratuito.

  2. GERRY RIOS 14681493-K Reply

    Buenas tardes, antes de todo agradesco por su tiempo en hacer estas publicaciones.
    A mi me sale un error, en mi hosting de paga donweb.com
    tengo este codigo:

    SMTPDebug = 3; // Enable verbose debug output

    $mail = new PHPMailer;

    $mail->SMTPDebug = 1; // Activar debug
    $mail->CharSet = “utf-8”;
    $mail->isSMTP(); // Set método de transporte a SMTP
    $mail->Host = ‘smtp.gmail.com’; // Especificar servidor SMTP principal y de backup
    $mail->SMTPAuth = true; // Activar autenticación SMTP
    $mail->Username = ‘gerry01.15.87@gmail.com’; // Usuario SMTP
    $mail->Password = ‘xxxxxxxxx’; // Clave SMTP
    $mail->SMTPSecure = ‘ssl’; // Activa encriptado TLS
    $mail->Port = 465; // Indicar puerto de conexión

    $mail->setFrom(‘pruebasmundotour@gmail.com’, ‘Mailer’);
    $mail->addAddress(‘gerry01.15.87@gmail.com’, ‘Cazares Luis’); // Agregar destinatario
    //$mail->addAddress(‘pruebasmundotour@gmail.com’); // Agregar dstinatario sin nombre
    //$mail->addReplyTo(‘pruebasmundotour@gmail.com’, ‘Contacto’);
    //$mail->addCC(‘cc@servidor.com’);
    //$mail->addBCC(‘bcc@servidor.com’);

    $mail->isHTML(true); // Indicar que el mensaje de correo es en formato HTML

    $mail->Subject = ‘Prueba phpmailer’;
    $mail->Body = ‘Correo electrónico con phpmailer!‘;
    $mail->AltBody = ‘Texto para clientes de correo electrónico sin soporte HTML’;

    if($mail->send())
    {
    echo “Email Successfully sent”;
    }
    else
    {
    echo “Error in Sending Mail”.$mail->ErrorInfo;
    }
    ?>

    • admin Post authorReply

      Buenos días,
      prueba a cambiar las líneas donde pone:
      $mail->SMTPSecure = ‘ssl’; // Activa encriptado TLS
      $mail->Port = 465; // Indicar puerto de conexión

      por esto:
      $mail->SMTPSecure = ‘tls’; // Activa encriptado TLS
      $mail->Port = 587; // Indicar puerto de conexión

      Espero que con esto se solucione, un saludo, Raúl.

  3. Chris Reply

    Hola,

    Tengo un gran problema, necesito mucho de tu ayuda, ya que llevo días y no logro que funcione, yo realicé un archivo con el mailer y tengo otro archivo para configurar todo, los llamados son a base de datos y es para recuperar contraseñas al momento de que las olvidan hace revisión en base de datos, pero el caso es que no funciona.

    me manda este error
    Invalid address: Mailer Error: You must provide at least one recipient email address.ok

    esto es mi código para configurar que se encuentra en un php

    //Correo cliente
    $mailRegistroDireccion = ‘mail.midominio.com’; // Specify main and backup SMTP servers
    $mailRegistroUsuario = ‘recuperador@midominio.com’; // SMTP username
    $mailRegistroPass = clave de midominio.com’; // SMTP password

    //Correos internos propios
    $mailRegistroDireccionCliente = ‘mail.midominio.com’;
    $mailRegistroUsuarioCliente = ‘recuperador@midominio.com’; // SMTP username
    $mailRegistroPassCliente = clave de midominio.com’;

    esto es mi código que esta en otro php

    _tpl = $tpl_name;
    }

    public function __set($name, $value) {
    $this->_vars[$name] = $value;
    }

    public function setVars($values) {
    $this->_vars = $values;
    }

    public function parse() {
    ob_start();
    extract($this->_vars);
    include $this->_tpl;
    return ob_get_clean();
    }
    }

    $mail = $m;

    $cadena = “Select * from PC_Clientes where CORREO = ‘”.$mail.”‘”;
    //echo $cadena;
    $result2 = mysql_query($cadena);
    while($row2 = mysql_fetch_array($result2))
    {
    $ID_CLIENTE = $row2[“ID_CLIENTE”];
    $NOMBRES = $row2[“NOMBRES”];

    }

    $newpass = randomPassword();

    $cadena = “Update PC_Clientes set USR_PASS = ‘”.md5($newpass).”‘ where CORREO = ‘”.$m.”‘”;
    mysql_query($cadena);

    $asunto = $systemName.” – Recuperación de contraseña”;
    $Mail = $mail;

    $tpl = new SimpleTemplate(“recovermailtemplate.php”);
    $tpl->sytem = $systemName;
    $tpl->login = $siteUrl;
    $tpl->site = $siteUrl;
    $tpl->color = $MailColor;
    $tpl->uid = $mail;
    $tpl->elpass = $newpass;

    $mensaje = $tpl->parse();

    //mail_utf8($Mail, $asunto, $mensaje, $headers);

    $mail = new PHPMailer;
    $mail->CharSet = ‘UTF-8’;
    $mail->isSMTP(); // Set mailer to use SMTP
    $mail->Host = $mailRegistroDireccionCliente; // Specify main and backup SMTP servers
    $mail->SMTPAuth = true; // Enable SMTP authentication
    $mail->Username = $mailRegistroUsuarioCliente; // SMTP username
    $mail->Password = $mailRegistroPassCliente; // SMTP password
    $mail->SMTPSecure = ‘tls’; // Enable encryption, ‘ssl’ also accepted

    $mail->From = $mailRegistroUsuarioCliente;
    $mail->FromName = $systemName;
    $mail->addAddress($Mail, $NOMBRES); // Add a recipient
    //$mail->addAddress(‘ellen@example.com’); // Name is optional
    $mail->addReplyTo($mailRegistroUsuarioCliente, $systemName);
    //$mail->addCC(‘cc@example.com’);
    //$mail->addBCC(‘bcc@example.com’);

    //$mail->WordWrap = 50; // Set word wrap to 50 characters
    //$mail->addAttachment(‘/var/tmp/file.tar.gz’); // Add attachments
    //$mail->addAttachment(‘/tmp/image.jpg’, ‘new.jpg’); // Optional name
    $mail->isHTML(true); // Set email format to HTML

    $mail->Subject = $systemName.’ – Recuperación de contraseña’;
    $mail->Body = $mensaje; //’This is the HTML message body in bold!‘;
    $mail->AltBody = ‘Ingresa a ‘.$systemName.’‘;

    if(!$mail->send()) {
    //echo ‘Message could not be sent.’;
    echo ‘Mailer Error: ‘ . $mail->ErrorInfo;

    } else {
    echo ‘Message has been sent’;
    }

    echo ‘ok’;
    //header(“Location: index.php”);
    exit;

    ?>

    Muchas gracias.

    • admin Post authorReply

      Buenas Chris,

      se me ocurre, por si acaso indicarle el puerto para la conexión TLS y probar. Esto se haría mediante esta línea:
      $mail->Port = 587; // Indicar puerto de conexión

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *