[การติดตั้ง PHPMailer In Laravel + การใช้งาน +ปัญหาที่คุณอาจจะต้องเจอ]


จริง ๆแล้ว Laravel เอง มีความสามารถเรื่องการส่งเมล์ได้อยู่แล้ว แต่คุณอาจเจอกับปัญหา เมล์ของ JUNK ! ซึ่งวันนี้ผมจะมาแนะนำวิธีการแก้ปัญหาที่ผมเจอมากับตัวเองให้ฟัง
เอาล่ะก่อนอื่นมา คุณต้องใช้ Laravel framework ก่อนน่ะหากยังไม่มีหรือติดตั้งไม่เป็น สามารถไปอ่านในบทความก่อน ๆ ของผมได้ ผมจะขอลัดขั้นตอนไปถึงการติดตั้ง PHPMailer เลยแล้วกัน
-----------------------------------------------------------------------------------------------------------------------

ขอบขอบคุณ Composer ไว้ก่อนเลยแล้วกันที่ทำให้เราจัดหาติดตั้ง Package ดี ๆ มาใช้งานได้ง่ายคล่องมากขึ้น เอาล่ะมาเริ่มกันเลย 
1. แก้ไข FIle composer.json 
 เพิ่ม  require : "phpmailer/phpmailer""~5.2
เมื่อเสร็ดแล้วก็รันคำสั่งผ่านทาง command line โดย Composer update หลักการทำงานของ composer คือ จะทำการตรวจสอบ config file composer.json ว่ามี package อะไรบ้าง ซึ่งจะเชื่อโยงกับ Host ของ https://packagist.org/ ซึ่งได้รวบรวม package ของ PHP ไว้มากมายเรียกได้ว่า "ขุมทรัพย์" ก็ว่าได้ เอาล่ะ รอสักพัก เมื่อโหลดเสร็ดแล้วก็เป็นอันเสร็ดพิธีการ  
ปล.คุณสามารถยัดคำสั่ง php artisan ลงใน composer.json ได้ด้วยเช่นกัน เรียกอีกชื่อหนึ่งว่า Trigger
ค่าโดยปริยายของมันก็จะมี php artisan clear-compiled และ php artisan optimize พวกนี้จะ clear compiled แล้ว auto generate Autoload classs นั้นเอง เมื่อมีการ Input Package ใหม่ ๆ จะต้องทำ
** คุณอาจทำได้อีกวิธีหนึ่งคือ composer require phpmailer/phpmailer
คือการรัน command ผ่านทาง composer ไปเลยสะดวกดีเหมือนกัน

เอาล่ะมีถึงการเรียกใช้งานผ่าน Laravel เมื่อ PHPmailer ติดตั้งลงไปใน Framework การทำงานเหมือนเป็น Facade ตัวหนึ่ง ซึ่งจะเรียกใช้งานที่ไหนก็ได้ ทำให้สะดวกขึ้น แต่ก็มีเทคนิคนิดหน่อยในการเรียกคือ การเติม \ (backslash) is the namespace separator in PHP 5.3. 
ตัวอย่าง Code
try {
            $mail = new \PHPMailer(true);
            $mail->isSMTP(true); // tell to use smtp
            $mail->CharSet = "utf-8"; // set charset to utf8
            $mail->SMTPAuth = true; // use smpt auth
            $mail->IsHTML(true);
            $mail->SMTPSecure = "tsl"; // or ssl
            $mail->Host = "localhost";
            $mail->Port = "25";
            $mail->Username = "username";
            $mail->Password = "password";
            $mail->setFrom('samarkchs@abc.com', 'Programmer');
            $mail->Subject = 'Test Send mail';
            $mail->MsgHTML($template);
            $mail->addAddress($email);
            $mail->send();
        } catch (phpmailerException $e) {
            \Log::info('phpmailer:Exception:' . json_encode($e->getMessage()));
            dd($e);
        } catch (Exception $e) {
            \Log::info('mail:Exception:' . json_encode($e->getMessage()));
            dd($e);
        }
        return true; 

หากเสร็ดแล้วก็สามารถใช้งานได้เลย ลองไปประยุคต์กันดูน่ะครับ
ปล.เหตุที่ ส่งผ่าน Kernel laravel แล้วลง Junk ผมได้ทำ poc ดูแล้ว โดยการ เอา Function embled ออกครับ
Share on Google Plus

About maxcom

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment
    Facebook Comment

0 ความคิดเห็น:

แสดงความคิดเห็น