phpmailer

PHP Mailer es la solución open source más utilizada para programar el envío de mails.

Es un script de php que nos permitirá enviar correos teniendo un mayor número de opciones de envío que si hubiesemos utilizado la funcion mail() de php. Las ventajas/diferencias de PHP Mailer frente a la función mail() de PHP son:

  • PHP Mailer utiliza programación orientada a objetos.
  • No precisa un servidor de correos local para enviar los mails (es posible mandar los mails desde tu cuenta de gmail, por ejemplo).
  • Permite que el receptor del mensaje lo reciba en texto plano en lugar de HTML, en el caso de que su cliente no pueda procesar código HTML.
  • Es utilizado por WordPress, Joomla o Drupal.
phpmailer 1

Instalación

Para utilizarlo, lo más cómo es tener instalado composer.

composer require phpmailer/phpmailer

Tras alojar la carpeta descargada en el servidor, debemos cargar los archivos necesarios:

//Load Composer's autoloader
require './vendor/autoload.php';

Además, las siguientes dos líneas deben estar en el fichero en el que instanciamos PHPMailer ($mail = new PHPMailer(true);), no vale incluir un fichero que las tenga:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

Puedes consultar su documentación en este enlace: https://github.com/PHPMailer/PHPMailer

Debemos probar esta librería en el servidor remoto, ya que en localhost a menudo nos hace falta una librería para poder enviar los mails.

Uso básico

Para mandar un mail desde el servidor de correo local:

$mail = new PHPMailer(true);
$mail->isHTML(true);                                  //Set email format to HTML
$mail->CharSet = 'UTF-8';
$mail->Subject = $subject;
$mail->Body    = $msg;
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->setFrom($emailCliente, $nombreCliente);
$mail->addAddress($emailDestinatario, $nombreDestinatario);   
$mail->send();

Para usarlo con una cuenta de gmail:

$mail = new PHPMailer();
$mail->CharSet = 'utf-8';
$mail->Host = "smtp.googlemail.com";
$mail->From = "pablomonteserin@pablomonteserin.com";
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Username = "usuario@gmail.com";
$mail->Password = "password";
$mail->SMTPSecure = "tls";
$mail->Port = 587;
$mail->AddAddress("mailDestinatario@example.com");
$mail->AddAddress("paramonty@gmail.com");
$mail->SMTPDebug  = 1;   //Muestra las trazas del mail, 0 para ocultarla
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

/*if ($archivoName != "") {
	$mail->AddAttachment($archivoTemp, $archivoName);
}*/
if(!$mail->send()) {
	echo 'Message could not be sent.';
	echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
	echo 'Message has been sent';
}

Si todo va bien, nos llegará un mail a nuestra cuenta de google informándonos de que han intentado acceder a nuestra cuenta. Si pulsamos en el enlace que se nos ofrece, podremos permitir el acceso a la cuenta de google desde localhost.

El código HTML del formulario

Recuerda que para enviar imágenes, el código HTML del cliente deberá ser similar a este:

<form action="index.php" method="post" enctype="multipart/form-data"/>
<input name="archivo" id="archivo" type="file"/>

Función para enviar imágenes como adjunto

function attachImageIfExists($mail, $file){
	if(isset($file)){
		$errors= array();
		$file_name = $file['name'];
		$file_size = $file['size'];
		$file_tmp = $file['tmp_name'];
		$file_type = $file['type'];
		$file_ext=strtolower(end(explode('.',$file['name'])));
      
		$extensions= array("jpeg","jpg","png","pdf");

		if(in_array($file_ext,$extensions)=== false){
			$errors[]="extension not allowed, please choose a PDF, JPEG or PNG file.";
		}
      
		if($file_size > 2097152) {
			$errors[]='File size must be excately 2 MB';
		}
      
		if(empty($errors)==true) {
      			$filepath = "uploads/".$file_name;
			move_uploaded_file($file_tmp,"uploads/".$file_name); //The folder where you would like your file to be saved
			echo "Success";
		if(isset($filepath))$mail->addAttachment($filepath);
		}else{
			print_r($errors);
		}
	}
	return null;
}

Ejercicio

Utilizando la plantilla adjunta (o un diseño propio), hacer una web con idiomas y por la que navegaremos redireccionando siempre a index.php y cargando con include los contenidos según sea oportuno.

La web estará compuesta de dos páginas; una con información y otra que nos permitirá mandar un mail al pulsar el botón de envío.

← Cómo crear una plantilla para nuestra página web con PHP
Arrays en PHP →

Aviso Legal | Política de privacidad