Laravel Send Mail with PHPMailer

บน Laravel มี Package ที่ใช้ในการ Send Mail ซึ่งก็มีหลายตัว แต่ที่นิยมใช้กันก็คือ PHPMailer โดยมี Feature ครบเครื่อง ไม่ว่าจะเป็น CC, BCC, Attachment, Validation และยัง Support ภาษาไทยด้วย


Requirement

  • PHP 5.5+

Get Started

  • ทำการติดตั้ง Laravel Package ผ่าน Composer
# C:\Apache24\htdocs\laravel> composer require phpmailer/phpmailer
  • ทำการ Create Route ในไฟล์ routes/web.php
Route::get('mail/{receiver}','MailController@index');
  • ทำการ Generate Controller ที่ชื่อว่า MailController
# C:\Apache24\htdocs\laravel> php artisan make:controller MailController
  • ทำการแก้ไขไฟล์ app/Http/Controllers/MailController.php ตัวอย่างการเชื่อมต่อ SMTP Authentication ของ Google
<?php

namespace App\Http\Controllers;  

use Illuminate\Http\Request;  
use PHPMailer\PHPMailer\PHPMailer;  
use PHPMailer\PHPMailer\Exception; 

class MailController extends Controller 
{          
    public function index($receiver)          
    {     	         
        $mail = new PHPMailer(true); 	         
        try { 	                 
            //Server settings 	                 
            $mail->isSMTP();
	    $mail->Host       = 'smtp.gmail.com';
	    $mail->SMTPAuth   = true;
 	    $mail->Username   = 'user@gmail.com';
 	    $mail->Password   = 'secret';
 	    $mail->SMTPSecure = 'tls';
 	    $mail->Port       = 587;

	    //Recipients
	    $mail->setFrom('sender@example.com', 'Sender');
	    $mail->addAddress($receiver, 'Receiver');
	    $mail->addReplyTo('info@example.com', 'Information');
	    $mail->addCC('cc@example.com');
	    $mail->addBCC('bcc@example.com');

	    // Attachments
	    $mail->addAttachment('/var/tmp/file.tar.gz');
	    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');

	    // Content
	    $mail->isHTML(true);
	    $mail->Subject = 'Here is the subject';
	    $mail->Body    = 'This is the HTML message body in bold!';
	    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

	    $mail->send();
	    echo 'Message has been sent';
        } catch (Exception $e) {
	    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
	}
    }
}
  •  หากต้องการเชื่อมต่อผ่าน SMTP แบบไม่ต้อง Authentication จะต้องแก้ไขไฟล์ตามโค้ดด้านล่าง
$mail->SMTPAuth   = false;
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

อ่านเพิ่มเติม : https://bit.ly/1e8KhJ6


Leave a Reply

Your email address will not be published. Required fields are marked *