PHPMailer, envío de Emails fácil y elegante

PHP y Javascript PHPMailer
PHP y Javascript PHPMailer (imagen de pixabay.com)

PHPMailer, fácil y elegante.

PHPMailer es una Clase PHP que como su nombre indica, sirve para poder mandar Emails desde Scripts PHP.

PHP de forma nativa tiene la función mail(), que es súper fácil de usar. En wordpress de forma nativa tiene la función wp_mail(), que a su vez usa la función mail() de PHP y también es súper fácil de usar. Entonces ¿por qué usar PHPMailer?. Una rápida búsqueda en Google y verás que las respuestas a esa pregunta son de lo más variopintas.

Hay quien dice que es por que con PHPMailer puedes enviar tu Email en formato html. Pero es que con la función mail() también se puede. La verdad es que no dicen que con mail() no se pueda, solo dicen que con PHPMailer se puede. A mi parecer es como decir: Yo tengo un Maserati por que tiene cuatro ruedas. Es como que das a entender que los demás coches no tienen cuatro ruedas, y en realidad lo que dices es que si el Maserati tuviera solo tres ruedas no lo tendrías.

Hay quien dice que es por que con PHPMailer puedes enviar Emails con copia y con copia oculta. Pero con la función mail() también se puede.

Hay quien dice que es por que con PHPMailer puedes enviar archivos adjuntos. Pero con la función mail() también se puede.

Cierto es que en la página oficial de PHP “http://php.net/manual/es/function.mail.php” dice que la función mail() no es adecuada para envíos masivos de Emails, ya que esta abre un socket SMTP para cada envío y por lo tanto para eso no es muy eficiente.

Por otro lado PHPMailer permite el envío de Emails a través de SMTP autenticado, creo que mail() no puede, y es perfectamente viable para el envío masivo de Emails.

Y PHPMailer tiene un montón de opciones, cosa que mail() es más limitadita.

A todo esto tengo que decir que yo uso la clase PHPMailer para mandar Emails. Y expongo el motivo.

He usado y uso PHPMailer en otras páginas y blogs, y siempre con un resultado perfecto e impoluto.

Hasta hace poco usaba la función mail() en otra página y en este blog. Y tengo que decir que en la otra página sigue funcionando correctamente. En cambio en este blog al principio funcionaba, pero algo ha cambiado en el servidor, y ahora en este blog no funciona. Tenía la intención de ponerme en contacto con el Servicio Técnico del Hosting, pero antes decidí probar la clase PHPMailer, y como era de esperar funciona bien, pues ya está, problema solucionado.

Así que básicamente uso PHPMailer por que sé que no me va a dar problemas, en cambio con mail() me he peleado más de una vez.

Un apunte más, como PHPMailer  te permite enviar desde cualquier servidor SMTP (o eso creo), puedes enviar Emails desde tu cuenta de Gmail. Aunque yo prefiero enviarlos desde mi propia cuenta del dominio, creo que es más elegante. Creas una cuenta de correo no-reply@tudominio.com y los envías desde ahí. Eso si es el típico Email que no necesita respuesta, ya que es un proceso automático. Por eso el no-reply.

En el caso de que quieras que te respondan al Email del remitente, deberías de crear una cuenta algo como esto, correo@tudominio.com, o consultas@tudominio.com o ruegosypreguntas@tudominio.com. Aunque yo prefiero tener cuentas separadas, una para cada cosa, así está todo más ordenado. Y siempre puedes enviar tus Emails automáticos con la cuenta no-reply, y poner en el cuerpo del mensaje esa frase que ya hemos visto tantas veces, “Este es un Email de envío automatizado, por favor no responder. Para ponerte en contacto con nosotros, por favor hazlo a consultas@tudominio.com, gracias.”.

A todo esto tengo que decir que cada maestrillo tiene su librillo, y cada caso es totalmente distinto del resto. Por lo que yo tengo mi forma particular de hacer las cosas, y en ocasiones tengo que hacerlo de otra forma por que el caso lo requiera. Me explico. Cuando empecé con esto de la programación Web (yo ya programaba aplicaciones de escritorio), empecé a informarme que lenguajes había y que frameworks eran los más eficientes. Y encontré a Python y Django, que me fascinaron, pero también me devoraron como una manada de leones a un pobre cervatillo. En aquel tiempo no había demasiada información en castellano para Python, y mucho menos para Django. Y aunque me defiendo un poco en Inglés, la información técnica es como más complicada de entender. Así que cada vez que tenía un problema tardaba dos o tres días en solucionarlo, y aburrí, lo dejé, pudo conmigo… pero volveré, por que me fascina. Y todo esto para decirte que se me quedó grabado a fuego que Django se basa en el principio DRY (Don’t Repeat Yourself) no te repitas. Y claro está, lo aplico en la medida que puedo también en esto del envío de Emails.

Pensando en DRY, tenemos que saber si el código para enviar Emails lo vamos a utilizar solo una vez (osea en un solo sitio, como un formulario de contacto), o lo vamos a utilizar en diferentes partes de nuestro sitio (como en diferentes formularios de contacto, reporte de errores, informes de visitas, o accesos restringidos, etc…). Por que hay partes del código que no varían y partes que sí, entonces si usamos el código en 25 lugares distintos en nuestro sitio web, estaremos repitiendo 25 veces todo ese código que no varía, cuando lo podemos escribir solo una vez y cargarlo desde los 25 lugares. Y no solo escribimos menos, sino que al eliminar redundancia también estamos haciendo el código más limpio y mantenible (eso lo he cogido de Python, jeje). Por ejemplo, ya que son Scripts de envío automatizado de Emails, la dirección que usaremos será no-reply@tudominio.com para todos ellos, así que si algún día cambias esa dirección por una como no-responder@tudominio.com, solo la tendrás que cambiar en un sitio, y este cambio se verá reflejado en los 25 lugares donde cargas ese código. Así también evitas que se te olvide cambiarlo en algún sitio y tengas códigos por ahí que no funcionen.

Pensar en DRY también es pensar en el sistema de plantillas, así que podemos usarlas para el cuerpo del Email. Supongamos que queremos mandar un Email con una oferta a 200 clientes, lo suyo es que el Email vaya personalizado, algo como “Estimado José Pérez, tenemos en oferta…” y 20 o 30 líneas más. Mejor que “Estimado cliente, tenemos en oferta…”, ya que si le llamas por su nombre es como que estás pensando en él en concreto, así es más personal y no parece algo tan robotizado (que todos sabemos que lo es, pero bueno…). Entonces, si lo único que cambia es el nombre del cliente (y quizás alguna cosa más), no tiene sentido escribir 200 veces esas 20 o 30 líneas de texto. Para eso usamos una plantilla, algo como lo siguiente.

“Estimado %nombre_cliente%, tenemos en oferta…” y las 20 o 30 líneas más.

Entonces creamos un bucle que se repita tantas veces como clientes tienen que recibir ese Email, en este caso 200 veces, y solo tenemos que cambiar la etiqueta %nombre_cliente% por el nombre del cliente que toque, así de fácil. Ahora veremos todo esto.

Primero tenemos que guardar en nuestro servidor los dos archivos de la clase PHPMailer “class.phpmailer.php” y “class.smtp.php”, los puedes descargar de https://github.com/PHPMailer/PHPMailer. Yo los tengo en la carpeta clases/ para mantener un poco de orden, pero los puedes poner donde quieras, siempre y cuando los cargues con su ruta correcta.

Nota: En el repositorio oficial de PHPMailer indican que puedes usar solo el archivo “class.phpmailer.php” que es el único imprescindible, también puedes usar “class.smtp.php” si vas a usar el protocolo SMTP como es nuestro caso, y “class.pop3.php” si vas a usar el protocolo POP3. Puedes obviar el resto de archivos si no vas a usar otras características. Aunque si no tienes claro si vas a usar o no el resto de características puedes ponerlo todo y usar el auto load que cargará lo que necesite.

A continuación pongo el código que tienes que poner para enviar un Email.

// Cargamos la clase PHPMailer
require_once("clases/class.phpmailer.php");

// Instanciamos un objeto PHPMailer
$mail = new PHPMailer();

// Le decimos que usamos el protocolo SMTP
$mail->IsSMTP();

// Le decimos que es necesario autenticarse
$mail->SMTPAuth = true;

// Asignamos nuestro servidor SMTP
$mail->Host = "smtp.tudominio.com";

// Asignamos el puerto SMTP que usa nuestro servidor
// Normalmente es el 25, pero tu servidor lo podría haber cambiado.
$mail->Port = 25;

// Indicamos aquí nuestro nombre de usuario
$mail->Username = "no-reply@tudominio.com";

// Indicamos la contraseña
$mail->Password = "tucontraseña";

// Añadimos la dirección del remitente
$mail->From = "no-reply@tudominio.com";

// Añadimos el nombre del remitente
$mail->FromName = "Aquí el nombre que quieras que aparezca";

// En la dirección de responder ponemos la misma del From
$mail->AddReplyTo("no-reply@tudominio.com","Mensaje automático");

// Le indicamos que nuestro Email está en Html
$mail->IsHTML(true);

// Indicamos la dirección y el nombre del destinatario
$mail->AddAddress("tuemail@tudominio.com", "tu nick o nombre");

// Ponemos aquí el asunto
$mail->Subject = "Tu dominio usuario contactar";

// Creamos todo el cuerpo del Email en Html en la variable $body
$body = '<strong>Super oferta</strong> Masaje con final feliz, pero sin masaje. 30 Euros';

// Añadimos aquí el cuerpo del Email
$mail->MsgHTML($body);

// Enviamos y comprobamos si se ha mandado el Email correctamente
if(!$mail->Send()) {
        $mensaje_a_mostrar = "Mailer Error: " . $mail->ErrorInfo . "<br>";
        $hay_errores = true;
} else {
        $mensaje_a_mostrar = "Tu mensaje ha sido enviado.<br>";
        $hay_errores = false;
}

Enviar un Email es así de sencillo, copias esos dos archivos en tu servidor, copias y pegas este código, y cambias los datos por los tuyos y ya está. Funciona seguro.

Date cuenta que hay líneas comentadas y líneas en blanco, osea que líneas de código hay solo unas pocas.

Después puedes comprobar con la variable $hay_errores si se ha enviado el Email o no, mostrar el mensaje de $mensaje_a_mostrar, y actuar en consecuencia.

Por lo que he explicado con anterioridad, ya te habrás dado cuenta que yo no uso este código así tal cual está (por norma general, aunque alguna excepción hay), ya que hay partes del código que no cambian aunque el asunto, el cuerpo y la dirección del Email cambien. Así que los datos que no varían los guardo en un archivo que cargaré en todos los lugares desde los que envíe Emails.

Los códigos que guardo en archivos para incluir entre otros Scripts los pongo en una carpeta llamada includes/, igual que las clases en la carpeta clases/, y las plantillas de Emails en la carpeta emails/, así lo tengo todo separadito y ordenadito. :)

Archivo inc.configuracion_email.php

// Instanciamos un objeto PHPMailer
$mail = new PHPMailer();

// Le decimos que usamos el protocolo SMTP
$mail->IsSMTP();

// Le decimos que es necesario autenticarse
$mail->SMTPAuth = true;

// Asignamos nuestro servidor SMTP
$mail->Host = "smtp.tudominio.com";

// Asignamos el puerto SMTP que usa nuestro servidor
// Normalmente es el 25, pero tu servidor lo podría haber cambiado.
$mail->Port = 25;

// Indicamos aquí nuestro nombre de usuario
$mail->Username = "no-reply@tudominio.com";

// Indicamos la contraseña
$mail->Password = "tucontraseña";

// Añadimos la dirección del remitente
$mail->From = "no-reply@tudominio.com";

// Añadimos el nombre del remitente
$mail->FromName = "Aquí el nombre que quieras que aparezca";

// En la dirección de responder ponemos la misma del From
$mail->AddReplyTo("no-reply@tudominio.com","Mensaje automático");

// Le indicamos que nuestro Email está en Html
$mail->IsHTML(true);

Ahora vamos a crear dos plantillas para el cuerpo del Email, una para el administrador (osea tú), y otra para el usuario (para que sepa que te han llegado los datos). Voy a poner como ejemplo que estos Emails se van a enviar en un formulario de contacto (así aprovecho los míos, jeje).

Archivo email.contactar_admin.html

<html>
<body style="margin: 0.2em; color: #000000;">
<div style="width: 80%; font-family: Arial, Helvetica, sans-serif; font-size: 1em; padding: 2em;">
<div align="center">
<img src="http://phpyjavascript.com/wp-content/uploads/mis_imagenes/PHPyJavascript.com.jpg" style="display: block;" height="100" width="250" alt="PHP y Javascript punto com" />
</div><br><br>
<span style="font-size: 20px;">PHP y Javascript punto com</span><br><br>
<span>Nombre: %usuario_nombre%</span><br><br>
<span>Email: %usuario_email%</span><br><br>
<span>Asunto: %usuario_asunto%</span><br><br>
<span>Mensaje: %usuario_mensaje%</span><br><br><br>
************************************<br>
Recuerda no demorarte demasiado en contestar.<br>
************************************<br>
</div>
</body>
</html>

Archivo email.contactar_usuario.html

<html>
<body style="margin: 0.2em; color: #000000;">
<div style="width: 80%; font-family: Arial, Helvetica, sans-serif; font-size: 1em; padding: 2em;">
<div align="center">
<img src="http://phpyjavascript.com/wp-content/uploads/mis_imagenes/PHPyJavascript.com.jpg" style="display: block;" height="100" width="250" alt="PHP y Javascript punto com" />
</div><br><br>
<span style="font-size: 20px;">PHP y Javascript punto com</span><br><br>
<span>Nombre: %usuario_nombre%</span><br><br>
<span>Email: %usuario_email%</span><br><br>
<span>Asunto: %usuario_asunto%</span><br><br>
<span>Mensaje: %usuario_mensaje%</span><br><br><br>
************************************<br>
Este E-Mail es una respuesta automática del formulario de contacto de phpyjavascript.com, te contestaré lo antes posible. Un saludo ;)<br>
************************************<br>
</div>
</body>
</html>

En estas plantillas podemos ver alguna cosilla, primero que son prácticamente iguales, yo lo tengo así para que el usuario vea exactamente que datos son los que yo he recibido, también podemos ver que tengo puesta una imagen en la cabecera (así el Email queda como más bonito), ojo con las imágenes, tienes que especificar exactamente las medidas de la imagen o algún lector de Emails no lo leerá correctamente y no la mostrará, también podemos ver las etiquetas que he puesto entre símbolos de porcentaje %, estas etiquetas las sustituiré por los datos que el usuario introduzca en el formulario de contacto. Y por último podemos ver que el pié del Email es distinto para el usuario y para el administrador, ya que este contiene información específica para cada cual.

Está claro que estas plantillas las puedes personalizar como quieras, y que sean totalmente distintas una de la otra. Y además son bastante sencillotas, ya que solo son para enviar los datos de un formulario de contacto. Si haces una plantilla para anunciar algún tipo de producto, está claro que tendrá que ser un poquito más elaborada. Pero ves con cuidado que los lectores de Emails son muy puñeteros y no admiten todas las etiquetas Html, incluso creo que solo algunos admiten CSS en un archivo aparte, así que lo mejor es integrar el CSS en el Html.

Este Email luce así:

Screenshot phpyjavascript email de contacto
Screenshot phpyjavascript email de contacto

Para estos Emails de formulario podríamos hacer un código como el siguiente.

// Cargamos la clase PHPMailer
require_once("clases/class.phpmailer.php");

// Incluimos la configuración de PHPMailer
include("includes/inc.configuracion_email.php");

// ********************* <[ Envío al administrador ]>
// Cargamos la plantilla admin para el cuerpo del Email
$body = file_get_contents("emails/email.contactar_admin.html");

// Añadimos el asunto
$mail->Subject    = "PHP y Javascript usuario contactar";

// Aquí indicas tu Email.
$mail->AddAddress("admin@tudominio.com", "Admin");

// Aquí cambiamos las etiquetas de la plantilla por los datos del formulario
$sustituir_nombre = "%usuario_nombre%";
$por_nombre = trim(utf8_decode($_POST[tu_nombre]));
$body = str_replace($sustituir_nombre, $por_nombre, $body);

$sustituir_email = "%usuario_email%";
$por_email = trim(utf8_decode($_POST[tu_email]));
$body = str_replace($sustituir_email, $por_email, $body);

$sustituir_asunto = "%usuario_asunto%";
$por_asunto = trim(utf8_decode($_POST[el_asunto]));
$body = str_replace($sustituir_asunto, $por_asunto, $body);

$sustituir_mensaje = "%usuario_mensaje%";
$por_mensaje = stripslashes(trim(utf8_decode($_POST[tu_mensaje])));
$body = str_replace($sustituir_mensaje, $por_mensaje, $body);

// Aquí incluimos el cuerpo del mensaje ya modificado
$mail->MsgHTML($body);

// Mandamos el Email y comprobamos que se ha mandado
if(!$mail->Send()) {
	$email = false;
} else {
	$email = true;
}

// ********************* <[ Envío al usuario ]>

// Borramos direcciones y adjuntos (por si los hubiera)
$mail->ClearAddresses();
$mail->ClearAttachments();

// Cargamos la plantilla usuario para el cuerpo del Email
$body = file_get_contents("emails/email.contactar_usuario.html");

// Añadimos el asunto
$mail->Subject    = "PHP y Javascript usuario contactar";

// Aquí Añadimos el Email del usuario que puso en el formulario de contacto.
$mail->AddAddress(trim($_POST[tu_email]), trim(utf8_decode($_POST[tu_nombre])));

// Aquí cambiamos las etiquetas de la plantilla por los datos del formulario
$body = str_replace($sustituir_nombre, $por_nombre, $body);

$body = str_replace($sustituir_email, $por_email, $body);

$body = str_replace($sustituir_asunto, $por_asunto, $body);

$body = str_replace($sustituir_mensaje, $por_mensaje, $body);

// Aquí incluimos el cuerpo del mensaje ya modificado
$mail->MsgHTML($body);

// Y ahora mandamos el Email al usuario, este no lo vamos a comprobar
$mail->Send();

Ahora unos pequeños apuntes sobre el código que acabamos de ver.

En primer lugar cargamos la clase PHPMailer, y acto seguido incluimos la configuración de PHPMailer, que es ese archivo que hemos creado con esos datos que no varían (dirección SMTP, usuario, contraseña, etc…). También quiero aclarar por si no te has dado cuenta (seguro que sí), que los datos del formulario los estamos recibiendo a través de $_POST, si no tienes claro como se han enviado los datos $_POST o $_GET puedes usar $_REQUEST, así pillarás los datos de todas formas. Aunque yo no recomiendo usar $_REQUEST, ya que si no tienes claro como se han enviado los datos, deberías de tenerlo, para evitar que te metan de todo por la URL. Si no tienes muy claro lo de enviar datos, puedes echar un vistazo a un artículo que hice sobre eso: http://phpyjavascript.com/pasar-datos-de-php-a-javascript-y-viceversa/. Decir también que uso trim() para anular posibles espacios en blanco delante y detrás, utf8_decode() para que me respete los acentos y la ñ, y stripslashes() para eliminar las barras invertidas que PHP pone para escapar comillas y barras invertidas.

Este ejemplo es para enviar los datos de un formulario de contacto al administrador y al propio usuario. De hecho es el código que uso en el formulario de contacto de PHPyJavascript, así que si quieres contacta conmigo a través de él y verás como es el Email de respuesta que te llega (en teoría similar a la imagen que hay un poco más arriba).

Si quieres enviar Emails masivos, como puede ser el caso de una oferta a 200, 2000 o 20000 clientes, los que tengas, puedes hacerlo con este mismo código, exactamente el mismo sistema, solo tienes que recoger los datos de los clientes de tu base de datos donde los tendrás almacenados, en vez de recogerlos de un formulario. E incluir el código referente a cada Email, en un bucle que recorra el array con los datos de los destinatarios. Creo que los servidores de Email tienen un límite, y también creo que ese límite puede variar según lo que estés dispuesto a pagar (como siempre).

Espero que te haya servido de ayuda. Si es así comenta por favor.

if (visitante == "amigo" || visitante == "amiga") {
    alert("Un abrazo.");
} else {
    alert("Un saludo.");
}
Si te ha gustado, lo puedes compartir.

23 thoughts on “PHPMailer, envío de Emails fácil y elegante”

    1. Hola Aron, no sé que andabas buscando cuando has llegado a esta web, pero ya veo que no lo has encontrado aquí. Pienso que tu opinión es tan valiosa como cualquier otra, por lo menos eres sincero. Y puede ser que otros también piensen lo mismo, pero tú te has molestado en hacérmelo saber, así que mereces una contestación.

      Pues ahí va.

      No busco que PHPyJavascript.com tenga un diseño refinado, ni tampoco hacer de esta una web de entretenimiento. Por el contrario, intento en cada una de las entradas, poner un poco de mí, me explico lo mejor que sé, e intento dar mi visión particular en cada uno de los casos. No voy a intentar poner remedio a eso, ya que nunca fue la intención ni el propósito de esta web.

      Y pienso que, con que haya solo una persona que encuentre lo que estaba buscando, ya habrá valido la pena.

      Por otro lado. Tengo pocos comentarios, así que me entristece enormemente que este sea una colleja bien dá, pero así es la vida.

      Un saludo Aron Saldivar.

  1. Llevo unos días buscando información sobre el envío de correos electrónicos automáticos y la comparativa entre PHPMailer() y la clase nativa mail(). La verdad es que me ha servido de mucho tu entrada, tocaste justo los puntos que buscaba. Ahora toca ponerlo en práctica y pegar unos cuantos cabezazos.

    Saludos,
    Juan Antonio.

    1. Me alegra que hayas encontrado aquí lo que buscabas. Y te agradezco mucho que me lo hagas saber. Si tienes alguna duda o algún problema referente a esto, puedes contactar conmigo por el formulario de contacto, y si está en mi mano, te ayudaré a resolverlo.

      Un saludo, y gracias Juan Antonio.

      1. Buenos días Joaquín,

        Conseguí que funcionara PHPMailer en el servidor y utilizarlo para el mail de binvenida a la plataforma, para los nuevos archivos, etc.

        El problema que tengo ahora es con el estilo. Si lo introduzco en las etiquetas sí funciona pero si lo coloco en el head con la etiqueta style, no. ¿Conoces alguna forma de que reconozca el css de esa forma?

        Saludos y gracias.

        1. Hola Juan Antonio, lo primero pedirte perdón por tardar tanto en contestar. Respecto a lo que me comentas, el problema está en los lectores de emails. No todos aceptan lo mismo, cada uno va por libre. Es como los navegadores, que cada uno acepta los estilos CSS que le da la gana. Pues con los lectores de emails pasa lo mismo pero más exagerado. Yo directamente no uso las etiquetas head, paso directamente de html a body y el CSS tiene que ir integrado en las etiquetas. Además ten cuidado al usar según que regla CSS, ya que si no recuerdo mal la mayoría no las admiten. Así que yo solo uso las más básicas margin: color: font-family: font-size: padding:. Recuerdo que me encontré con problemas con el lector web de Hotmail, me ponía líneas en negro y líneas en ese lila de un link visitado, aunque solo era texto. Lo solucioné poniendo el estilo color negro en cada Span de texto.

          Así que ya sabes, el CSS en los emails es caprichoso y limitadito.

          Un saludo.

  2. Hola Joaquin muy buen trabajo, justo lo que andaba buscando, solo queria consultarte sobre un problema que me surgio a la hora de implementar el script. Al enviar una solicitud mediante el formulario de contacto, me manda el siguiente mensaje: ” Fatal error: Class ‘SMTP’ not found in /hermes/bosnaweb25a/b2950/ipg.soymuyricocom/tubeadicto/clases/class.phpmailer.php on line 1469 ”
    Cabe aclarar que no soy un experto en php, ni mucho menos (Ya me gustaria). Agradezco cualquier ayuda. Gracias

    1. Hola Sergio, yo tampoco soy un experto en PHP, jeje. El mensaje te indica que no ha encontrado el archivo, o bien por que no está en la ruta donde lo busca, o bien por que el nombre del archivo no es exactamente igual que el que busca. Entiendo que he tardado varios días en darte la respuesta, y seguro que ya lo habrás solucionado, sorry. Te deseo suerte. Y gracias por tu comentario. Un saludo Sergio.

  3. Hola Joaquin, tu informacion me sirvio bastante. Queria preguntarte si conoces alguna funcion en phpmailer donde se pueda enviar email por intervalos de tiempo. Es que necesito enviar mail masivos a 2000 clientes pero para no saturar el servidor smtp de gmail y no cree que estoy haciendo spam.
    Saludos.

    1. Hola Pablo, no conozco si PHPMailer dispone de esa funcionalidad, pero puedes usar un cron para ejecutar un script en PHP cada cierto tiempo, así ese script podría recoger los datos de los emails que toque y enviarlos. Si no puedes usar un cron, podrías usar la función setInterval de Javascript para ejecutar ese script de PHP. Espero que te funcione. Suerte. Un saludo.

  4. Saludos amigo, gracias por el tutorial,
    mi pregunta es la siguiente, estoy usando php-mailer con que tome los emails desde my base de datos,
    quisiera saber como hacer para tomar campos especificos a la hora de enviar emails como por ejemplo

    Saludos NOMBRE PERSONA en el cual el nombre de persona es un campo en mi base de datos

    alguna guia de donde pueda ver

    gracias de nuevo, pura vida!

    1. Hola Ronny, para extraer datos de una base de datos MySql se usa el comando SELECT. Debes de introducir los resultados encontrados en la base de datos en un Array, así podrás recorrer ese Array con los todos los datos que te interesan, como Email, Nombre Persona, Etc…

      Para PHP yo me apoyo mucho en http://php.net/manual/es/
      y para MySql en https://dev.mysql.com/doc/

      Espero haber ayudado.
      Un saludo.

      1. Hola Ronny, hola Joaquin.
        Gracias por el articulo, envia correo masivos, pero quiero personalizarlos mas, donde en el cuerpo del mensaje aparezca el nombre del usuario, ya aparece en el correo [pemochen@gmail.com, PemoWeb], me gustaria que saliera en el mensaje
        parte del codigo:
        while($row=mysql_fetch_array($consulta)){
        $correoEstudiante = $row[‘correo_estudiante’];
        $nombreEstudiante = $row[‘apellido_estudiante’].” “.$row[‘nombre_estudiante’];
        $template = str_replace(““, $nombreEstudiante, $template);

        $mail->setFrom($correoSitio, $empresa);
        $mail->addAddress($correoEstudiante,$nombreEstudiante);
        $mail->Subject = $x_asunto;;
        $mail->msgHTML($template);
        $mail->send();
        $mail->ClearAddresses();

        }

  5. Oye amigo buen tutorial excelente justo lo que andaba buscando, pero otra consulta, como puedo hacer para agregar un recpatcha para proceder a enviar el email

  6. Alguien sabe por que me sale este mensaje ?

    Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Boundary has a deprecated constructor in /home/express/public_html/phpmailer.php on line 1695
    Problemas enviando correo electrónico a ventas@bolsavision.com.mx
    Could not execute /usr/sbin/sendmail

  7. Hola, me parece excelente la explicacion pero me podrias ayudar tengo un problema.

    Cuando ejecuto el codigo me da un error, y no entido que hacer, me peudes ayudar.

    ////////Este es el error////////
    Fatal error: Uncaught Error: Class ‘SMTP’ not found in H:\root\home\webcheil-001\www\Test\clases\class.phpmailer.php:1466 Stack trace: #0 H:\root\home\webcheil-001\www\Test\clases\class.phpmailer.php(1549): PHPMailer->getSMTPInstance() #1 H:\root\home\webcheil-001\www\Test\clases\class.phpmailer.php(1486): PHPMailer->smtpConnect(Array) #2 H:\root\home\webcheil-001\www\Test\clases\class.phpmailer.php(1323): PHPMailer->smtpSend(‘Date: Sat, 21 O…’, ‘This is a multi…’) #3 H:\root\home\webcheil-001\www\Test\clases\class.phpmailer.php(1203): PHPMailer->postSend() #4 H:\root\home\webcheil-001\www\Test\Index.php(40): PHPMailer->send() #5 {main} thrown in H:\root\home\webcheil-001\www\Test\clases\class.phpmailer.php on line 1466

    1. Hola Jesús, perdona que haya tardado tanto tiempo en contestar. Me sabe mal, pero es que hice este blog a modo de repositorio, y entro poco. Lo siento de veras. Seguro que con tanto tiempo ya habrás encontrado la solución. De todas formas voy a intentar poner mi granito de arena.

      Diría que hay un problema con la ruta donde tienes el archivo class.phpmailer.php, ya que el error dice que no encuentra el archivo en la ruta que especifica.

      Perdona el superretraso Jesús.
      Un saludo.

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>