ส่งเมล์ด้วย PHP mail() ผ่าน SMTP Authentication

<?php
require_once "Mail.php";

$from = "Sandra Sender <sender@example.com>";
$to = "Ramona Recipient <recipient@example.com>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "mail.example.com";
$username = "smtp_username";
$password = "smtp_password";

$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject);
$smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
echo $mail->getMessage();
}
else {
echo "Message successfully sent!";
}
?>

ส่งเมล์ด้วย PHP mail() ผ่าน SMTP Authentication และ SSL

<?php
require_once "Mail.php";

$from = "Sandra Sender <sender@example.com>";
$to = "Ramona Recipient <recipient@example.com>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "ssl://mail.example.com";
$port = "465";
$username = "smtp_username";
$password = "smtp_password";

$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject);
$smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
echo $mail->getMessage();
}
else {
echo "Message successfully sent!";
}
?>

หมายเหตุ:

- วิธีนี้จำเป็นต้องใช้ PEAR Mail Package (Mail.php) ซึ่งปกติจะมาพร้อมกับ PHP4+ อยู่แล้วครับ เราไม่จำเป็นต้องเขียน script นี้ขึ้นมาเองครับ

- smtp_username / smtp_password คือ อีเมล์ account และรหัสผ่านของเมล์, host หมายถึง ค่า SMTP หรือ Outgoing Mail Server ของอีเมล์ที่เราใช้

Related Posts

Tags: ,



36 Comments to “วิธีส่งเมล์ด้วย PHP mail() ผ่าน SMTP Authentication”

  1. akees | September 19th, 2008 at 5:32 pm

    แล้ว require_once “Mail.php”; เรียก function อะไรอย่างไรบ้างครับ ขอดูตัวอย่างหน่อยได้ไหมครับ

  2. Chet | November 5th, 2008 at 9:50 am

    ใช่คับ require_once “Mail.php”; เรียก function อย่างไร ขอดู ตย ด้วยคับ

  3. Chakkit | November 5th, 2008 at 10:25 am

    Mail.php เป็น PEAR Mail Package ที่ลงมาพร้อมกับ PHP4+ อยู่แล้วครับ
    เราไม่ต้องเขียนไฟล์นี้ขึ้นมาเอง ตัว PHP จะไปเรียกใช้จาก PEAR ให้อัตโนมัติครับ

    ข้อมูลเพิ่มเติมเกี่ยวกับ Package ตัวนี้
    http://pear.php.net/package/Mail

  4. Chet | November 5th, 2008 at 11:53 am

    ขออีกคำถามนะคับ ผมกำลัง งง จิง ๆ

    ไม่ทราบว่า PHP Version 5.1.6 มีไหมคับ

    ถ้ามี อยู่ตรงไหน และ ถ้าไม่มี download มาใช้ร่วมกันได้ไหมคับ

    แนะนำหน่อยคับ ต้องส่งงานวันนี้ด้วยอะ

  5. Chakkit | November 5th, 2008 at 12:08 pm

    ถ้าหมายถึงติดตั้งเองใน windows ขึ้นอยู่กับ package ที่เรา download มาครับ

    ลองดูที่ folder ที่ลง PHP ไว้ เช่น c:\php\pear ว่ามีไฟล์อะไรมั้ย

    ถ้าไม่มีอะไรให้ทำตามนี้ครับ
    - start menu > run > พิมพ์ cmd แล้ว enter
    - เข้า folder ที่ลง php ไว้ เช่น cd \php
    - พิมพ์ go-pear แล้วกด enter ไปเรื่อยๆ ครับ
    - พอเรียบร้อย พิมพ์ pear install Mail ครับ

  6. Chet | November 5th, 2008 at 1:09 pm

    มีไฟล์ go-pear.phar 1 ไฟล์ครับ

    แต่ตอนนี้ผม download file Mail-1.2.0b1 มานะครับแต่ไม่ทราบว่าจะนำไปใช้ยังไงครับ

  7. Chakkit | November 5th, 2008 at 1:42 pm

    ทำตามนี้้เลยครับ
    - start menu > run > พิมพ์ cmd แล้ว enter
    - เข้า folder ที่ลง php ไว้ เช่น cd \php
    - พิมพ์ go-pear แล้วกด enter ไปเรื่อยๆ ครับ
    - พอเรียบร้อย พิมพ์ pear install Mail ครับ

  8. Chet | November 5th, 2008 at 4:41 pm

    ผมทำตามขั้นตอนตามที่คุณ Chakkit ให้มาแล้วนะคับ แต่ติดตรงขั้นตอนสุดท้ายนะ

    - พอเรียบร้อย พิมพ์ pear install Mail ครับ

    มันพิมพ์แล้ว dos หา file ไม่เจอนะครับ

  9. Chakkit | November 5th, 2008 at 4:46 pm

    - พิมพ์ go-pear แล้วกด enter ไปเรื่อยๆ ครับ

    ขั้นอตนนี้เรียบร้อยแล้วหรือยังครับ
    ต้องผ่านอันนี้ก่อนนะครับ (ต้องขึ้นประมาณ installed successfully)

  10. Chet | November 5th, 2008 at 5:18 pm

    เรียบร้อยแล้วครับ

    แล้วใน floder Pear ก็จะมีสร้าง file ขึ้นมาเยอะแยะเลยคับ

    แต่ไม่มีไฟล์ Mail.php คับ

    ผมพิม pear install mail ไม่เจอนะคับ

  11. Chakkit | November 5th, 2008 at 5:24 pm

    ที่ cmd เข้า folder c:\php แล้วพิมพ์ pear install Mail ดูครับ
    ถ้าไม่ได้ ลอง restart เครื่องดูทีนึงครับ

  12. Chet | November 5th, 2008 at 5:42 pm

    ผมพิมแบบนี้นะคับ ไม่รู้ว่าได้หรือยัง ต้อง chack ตรงไหน แต่ Main.php ผมยังหาไม่เจออะคับ

    C:\>cd appserv

    C:\AppServ>cd php5

    C:\AppServ\php5>pear install Mail
    Did not download dependencies: pear/Net_SMTP, use –alldeps or –onlyreqdeps to
    download automatically
    pear/Mail can optionally use package “pear/Net_SMTP” (version >= 1.1.0)
    downloading Mail-1.1.14.tgz …
    Starting to download Mail-1.1.14.tgz (17,537 bytes)
    …..done: 17,537 bytes
    install ok: channel://pear.php.net/Mail-1.1.14

    C:\AppServ\php5>

  13. Chakkit | November 5th, 2008 at 5:45 pm

    คิดว่าเรียบร้อยแล้วนะครับ

    ถ้าใช้ไมได้ให้พิมพ์
    pear install –alldeps Mail

  14. Chet | November 5th, 2008 at 6:23 pm

    ยังไม่ได้เลยคับ

    C:\AppServ\php5>pear install Mail-alldeps
    parsePackageName(): “alldeps” is neither a valid version nor a valid state in “M
    ail-alldeps”
    invalid package name/package file “Mail-alldeps”
    Cannot initialize ‘Mail-alldeps’, invalid or missing package file
    Package “Mail-alldeps” is not valid
    install failed

    C:\AppServ\php5>

    file mail.php ก็ไม่เจอคับ

  15. Chakkit | November 5th, 2008 at 6:24 pm

    pear install –alldeps Mail
    (ดูเครื่องหมายดีๆ ครับ)

    ผมเข้าใจว่ามันลงเสร็จแล้ว ลองเรียกใช้ดูครับ

    ถ้าไม่ได้ ศึกษาจากเว็บ PEAR ดูครับ
    http://pear.php.net/

  16. KayZ | November 10th, 2008 at 11:10 am

    Fatal error: Call to undefined method PEAR_Error::send()
    มัน Error อย่างนี้ ครับ แก้ไข ยังไง ดีครับ

  17. Chakkit | November 10th, 2008 at 12:13 pm

    ขอดู code หน่อยครับ อาจจะระบุค่าบางตัวไม่ถูกต้อง

  18. poo | December 23rd, 2008 at 10:47 am

    ลองเอาวิธีของพี่ไปใช้ดู มันฟ้องแบบนี้ค่ะ
    ไม้ค่อยเข้าใจเท่าไหร่เลยค่ะ
    Fatal error: Class ‘Mail’ not found in C:\AppServ\www\mailserver\dd-formmailer.php on line 675

  19. Chakkit | December 23rd, 2008 at 1:53 pm

    ที่เครื่องไม่ได้ลง PEAR ไว้นะครับ
    ดูวิธีลง ที่นี่ ครับ
    ขั้นตอนการติดตั้ง-php-pear-บน-windows

  20. parinya | February 9th, 2009 at 9:53 am

    ผมลองทำตามแล้วครับ แต่มันบอก class เมลหาไม่เจอ ผมเลยลอง copy ไฟล์ mail.php แล้วกับ pear.php ไปไว้ใน floder เดียวกันกับที่เราเก็บ code ไว้ครับ มันก็ส่งได้นะ แต่ว่าจะไปอยู่ ในเมลขยะครับ ขอบคุณบทความดีๆ หามาหลายที่แล้วส่งไม่ได้ซักกะอัน แต่สงสัยอยู่นิดนึง ถ้าผมเอา code นี้ไป run ที่อื่นไม่รู้ว่ามันจะ run ได้ไหมครับ

  21. Chakkit | February 9th, 2009 at 12:08 pm

    @parinya

    ถ้า server ที่ใช้งานไม่ได้ลงไว เราสามารถ set include path ตามที่เรา upload PEAR ไว้ ลงใน .htaccess ก็จะใช้ได้ครับ

    ส่วนที่เข้า Junk นั้น ถ้าระบุ parameter ถูกต้อง การส่งผ่าน SMTP แบบนี้ จะเหมือนเราส่งผ่าน Mail Client เช่น MS Outlook ครับ ลองตรวจสอบข้อความดูว่ามันเป็น Pattern ของ Junk Mail หรือป่าว

  22. ongsa | March 4th, 2009 at 6:01 pm

    ถ้า server ที่ใช้งานไม่ได้ลงไว เราสามารถ set include path ตามที่เรา upload PEAR ไว้ ลงใน .htaccess ก็จะใช้ได้ครับ

    .htaccess เขียนแก้ยังไงเหรอครับ

  23. Chakkit | March 4th, 2009 at 6:19 pm

    ระบุ include path ของ pear ที่เรา upload เข้าไปเองครับ เช่น

    php_value include_path “.:/usr/share/pear:/var/www/vhosts/domain.com/httpdocs/pear”

  24. วิธีส่งเมล์ด้วย PHP mail() ผ่าน SMTP Authentication | BobNone.Com | June 11th, 2009 at 2:13 am

    [...] PHP mail() ผ่าน SMTP Authentication view plaincopy to [...]

  25. tokchaiya | November 5th, 2009 at 12:09 pm

    เพิ่ม pear install net_smtp ไปอีกตัว

  26. Kings Network | April 9th, 2010 at 12:17 am

    อ่านดูแล้ว ยังงง ๆ เรื่อง pear อะครับ

  27. JEEP | September 14th, 2010 at 9:58 am

    ลองแล้วขึ้น error ตามนี้ครับช่วยแนะนำผมด้วย

    C:\AppServ\php5>pear install Mail
    pear/Mail requires PEAR Installer (version >= 1.5.6), installed version is 1.4.1
    1
    No valid packages found
    install failed

  28. JEEP | September 14th, 2010 at 2:09 pm

    ตอนนี้ผมส่งผ่านละครับ
    ไม่ทราบว่าจำทำยังไงไม่ให้อีเมลที่ส่งออกไปไม่ไปเข้าถังขยะครับ
    ขอคำแนะนำด้วยครับ

  29. Chakkit | September 14th, 2010 at 2:59 pm

    @JEEP

    เมล์เข้า Junk ขึ้นอยู่กับหลายปัจจัยครับ เช่น Mail Server ติด Blacklist หรือไม่ตั้งค่า Reverse DNS หรือ ข้อความที่ส่งไปเป็นเมล์โฆษณา/SPAM

    ลองรับส่งเมล์กันปกติก่อนครับ ถ้าไม่ติดปัญหาก็มาดูที่ข้อความ

  30. JEEP | September 14th, 2010 at 3:33 pm

    to K.Chakkit

    ขอบคุณครับ ตอนนี้การส่งเมลส่งได้ครับ ผมจะลองปรับที่ข้อความดู ขอบคุณมากเลยครับที่เขียนบทความดีดี

  31. wss | January 21st, 2011 at 1:35 am

    โค้ดที่ผมใช้นะครับไม่รู้ถูกป่าว
    คือว่าผมเป็นเด็กฝึกงานอะครับทำโปรเจคส่งอาจารย์อะครับ ช่วยทีครับ
    <?php
    require_once “Mail.php”;

    $from = “nipon “;
    $to = “katay “;
    $subject = “Hi!”;
    $body = “Hi,\n\nHow are you?”;

    $host = “ssl://smtp.live.com”;
    $port = “25″;
    $username = “tengkilo_9@hotmail.com”;
    $password = “********”;

    $headers = array (’From’ => $from, ‘To’ => $to, ‘Subject’ => $subject);
    $smtp = Mail::factory(’smtp’, array (’host’ => $host, ‘port’ => $port, ‘auth’ => true, ‘username’ => $username, ‘password’ => $password));

    $mail = $smtp->send($to, $headers, $body);

    if (PEAR::isError($mail)) {
    echo $mail->getMessage();
    }
    else {
    echo “Message successfully sent!”;
    }
    ?>

    มันขึ้น error อย่างงี้นะครับ

    Fatal error: Class ‘Mail’ not found in C:\AppServ\www\phpMyAdmin\mail.php on line 15

  32. Chakkit | January 21st, 2011 at 5:26 am

    @wss

    ติดตั้ง PEAR ก่อนครับ
    ส่วนการติดตั้ง ให้ลองดูที่ folder PHP จะมีไฟล์ pear.bat
    จะขึ้นหน้าต่างมา ทำตามขั้นตอนไปจนเสร็จ

    จากนั้นทำการติดตั้ง Mail ด้วยการเข้าที่ cmd แล้วพิมพ์คำสั่ง
    pear install –alldeps Mail

  33. taza | January 30th, 2011 at 2:04 pm

    หลังจากลงตามข้างบนเสร็จแล้ว พอรันโค๊ต มันขึ้นแบบนี้คับ มันต้องไปเซ็ทอะไรอีกมั้ยคับ
    authentication failure [SMTP: SMTP server does not support authentication (code: 250, response: irp3.truemail.co.th 8BITMIME SIZE 15000000)]

  34. Chakkit | January 30th, 2011 at 2:12 pm

    @taza

    ถ้าใช้ SMTP ของ ISP ให้ระบุ ‘auth’ => false ครับ

  35. taza | January 30th, 2011 at 3:30 pm

    อ่อ น่าจะได้แล้วครับ ตอนนี้errorเกี่ยว กับpass เด๋วโทรไปถามpass callcenterก่อน (ลืม) ไงก็ขอบคุณไว้ก่อนครับ

  36. Chi3ZzTaEz | February 27th, 2011 at 2:21 pm

    ทำตามข้างบนแล้ว ขึ้น Message successfully sent แล้วครับ แต่ทำไมไม่มีอะไรเข้ามาในเมลเลยอะครับ

Leave a Comment

You must be logged in to post a comment.

Copyright © 2008 iBiz Network Co., Ltd. Powered by wordpress, Theme by ericulous