domingo, 8 de marzo de 2015

Envió de correo con PHPMailer y Gmail (Xampp)

Hay muchas maneras de enviar correos a través de PHP, pero casi siempre es un dolor de cabeza (no soy el primero que lo escribe), con PHPMailer es algo si se quiere sencillo, en este ejemplo estoy utilizando "xampp-linux-5.6.3-0" y "PHPMailer V5.2.9 (master.zip)".

Para comenzar, PHPMailer tiene ejemplos que podemos seguir y partir de allí, están dentro de la carpeta "examples" y pueden servir de ayuda, también el archivo "README" contiene un ejemplo básico y es el que tomé para este ejemplo.

<?php require 'PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->SMTPDebug = 2; /* Enable verbose debug output */ $mail->isSMTP(); /* Set mailer to use SMTP */ $mail->Host = 'smtp.gmail.com'; /* Specify main and backup SMTP servers */ $mail->SMTPAuth = true; /* Enable SMTP authentication */ $mail->Username = 'usuario@gmail.com'; /* SMTP username */ $mail->Password = 'Super~Password'; /* SMTP password */ $mail->SMTPSecure = 'tls'; /* Enable TLS encryption, 'ssl' also accepted */ $mail->Port = 587; /* TCP port to connect to */ $mail->Helo = 'localhost'; /* Permite usar EHLO / HELO */ $mail->Hostname = 'gmail.com'; /* Permite usar un hostname */ $mail->From = 'usuario@gmail.com'; /* Correo Gmail */ $mail->FromName = 'Pedro Pérez'; /* Nombre de usuario Gmail */ $mail->addAddress('usuario-2@live.com', 'Fulanito de Tal'); /* Add a recipient / correo de destino */ // $mail->addAddress('ellen@example.com'); /* Name is optional */ // $mail->addCC('cc@example.com'); // $mail->addBCC('bcc@example.com'); // $mail->addAttachment('/var/tmp/file.tar.gz'); /* Add attachments / agregar un archivo*/ // $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); /* Optional name */ $mail->isHTML(true); /* Set email format to HTML / Comentar para texto plano */ $mail->Subject = 'Prueba de Email usando PHPMailer y Gmail'; /* Asunto */ $mail->Body = 'Aquí se escribe el mensaje a mostrar!!'; /* Lo que se mostrará en el mensaje */ if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; } ?>

Quedaría más o menos así:


Nada del otro mundo, además que está comentado, pero para que no queden dudas explico lo más importante.

"require 'PHPMailerAutoload.php';" → dependencia de PHPMailer.

SMTPDebug = 2; → activamos el modo debug.
isSMTP(); → utilizamos SMTP.
Host = 'smtp.gmail.com'; → SMTP de gmail.
SMTPAuth = true; → Actíva la autenticación SMTP.
SMTPSecure = 'tls'; → Usamos tls.
Port = 587; → El puerto de conexión es el 587.
Helo = 'localhost'; → Usamos EHLO / HELO.
Hostname = 'gmail.com'; → Asignamos un hostname.
Username = 'usuario@gmail.com'; → Usuario de Gmail.
Password = 'clave'; → Su contraseña.
From = 'usuario@gmail.com'; → Usuario de Gmail.
FromName = 'Nombre Ap.'; → Nombre del usuario de Gmail.
addAddress('destino@live.com', 'Nombre Des.'); → Correo de destino.

addAttachment('/var/tmp/file.tar.gz'); → Archivo adjunto.
isHTML(true); → Activamos / Desactivamos HTML.
Subject = 'Correo de aviso'; → El asunto de correo.
Body = 'Este es el mensaje'; → El mensaje como tal.

Comentar que en "Helo" se puede colocar lo que se desee, es lo que se muestra justo antes de la dirección ip, (Received: from localhost ([190.61.55.55])), y "Hostname" es lo que se mostrará en al final de "message-ID", (Message-ID: <2b4366312uw3eebe1z3s@gmail.com>), para terminar, si queremos enviar el correo en "texto plano" debemos comentar "isHTML(true);".

Con esto ya estaría todo listo para enviar un correo, si se presenta algún problema con en mi caso, que no podía enviar el correo por problemas de certificados la solución la conseguí y fue algo sencillo, añadir unas líneas de código y listo.

El error es algo parecido a esto:

Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /Applications/XAMPP/xamppfiles/htdocs/phpMailer/class.smtp.php on line 338

La Solución es agregar algunas líneas de código al archivo "class.smtp.php", las líneas a agregar van cerca de la línea número 242 y debería quedar más o menos así.

public function connect($host, $port = null, $timeout = 30, $options = array()) { if(count($options)==0){ $options["ssl"]=array("verify_peer"=>false,"verify_peer_name"=>false,"allow_self_signed"=>true); }

Ejemplo:


El comentario de donde tomé el ejemplo está en el siguiente enlace:
Comentario en hithub.

Solucionado lo anterior, sin ningún problema se debería poder enviar mensajes, si tienen problemas con los acentos, pueden editar el archivo "class.phpmailer.php" en la línea 47 "public $CharSet = 'iso-8859-1';" y colocar "'UTF-8'" en lugar de "'iso-8859-1'".

Descargar PHPMailer.

9 comentarios:

Anónimo dijo...

Muchas gracias, me sirvió de mucho tu ejemplo!!!.

L.J.Marín dijo...

Me alegra que te sirviera el ejemplo Roberto, de nada (:

Unknown dijo...

Funciona excelente muchas gracias!

L.J.Marín dijo...

Por nada Miguel, y que bueno que todavía funciona xD saludos.

JC dijo...

Gracias, esttuve dando vueltas pr todo google y nada exepto tu solucion funciono. gracias por compartir.

L.J.Marín dijo...

Me alegra que te haya servido Jose, saludos.

Luis Tamiche dijo...

Como recuperar contraseña facebooka cuantos nos ha pasado que nos hemos olvidado nuestra contraseña de hotmail, por el hecho de que ya no la usábamos mucho tiempo

Anónimo dijo...

Hi Clients!

We have the fresh and valid USA ssn leads and dead fullz
99% connectivity with quality
*If you have any trust issue before any deal you may get few to test
*Every leads are well checked and available 24 hours
*Fully cooperate with clients

*Format of Fullz/leads/profiles
°First & last Name
°SSN
°DOB
°(DRIVING LICENSE NUMBER)
°ADDRESS
(ZIP CODE,STATE,CITY)
°PHONE NUMBER
°EMAIL ADDRESS
°REFERENCE DETAILS
°BANK ACCOUNT DETAILS

****Contact Me****
*ICQ :748957107
*Telegram :@James307
*Gmail :taimoorh944@gmail.com

lead cost $2 for each
Price can be negotiable if order in bulk

*Contact soon!
*Hope a long term deal
*Thank You

PROF.LUCIOUS HAWARD dijo...

Are you in a financial crisis, looking for money to start your own business or to pay your bills?
GET YOUR BLANK ATM CREDIT CARD AT AFFORDABLE PRICE*
We sell this cards to all our customers and interested buyers
worldwide,Tho card has a daily withdrawal limit of $5000 and up to $50,000
spending limit in stores and unlimited on POS.

YOU CAN ALSO MAKE BINARY INVESTMENTS WITH LITTLE AS $500 AND GET $10,000 JUST IN SEVEN DAYS

**WHAT WE OFFER** 

*1)WESTERN UNION TRANSFERS/MONEY GRAM TRANSFER*
*2)BANKS LOGINS*
*3)BANKS TRANSFERS*
*4)CRYPTO CURRENCY MINNING*
*5)BUYING OF GIFT CARDS*
*6)LOADING OF ACCOUNTS*
*7)WALMART TRANSFERS*
*8)BITCOIN INVESTMENTS*
*9)REMOVING OF NAME FROM DEBIT RECORD AND CRIMINAL RECORD*
*10)BANK HACKING*
**email blankatmmasterusa@gmail.com
**you can also call or whatsapp us Contact us today for more enlightenment *
*+1(539) 888-2243*
**BEWARE OF SCAMMERS AND FAKE HACKERS IMPERSONATING US BUT THEY ARE NOT
FROM *
*US CONTACT US ONLY VIA THIS CONTACT **
*WE ARE REAL AND LEGIT...........2020 FUNDS/FORGET ABOUT GETTING A LOAN..*

IT HAS BEEN TESTED AND TRUSTED