วิธีส่งเมล์ด้วย PHP mail() ผ่าน SMTP Authentication
PHP June 1st, 2008
ส่งเมล์ด้วย 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 ของอีเมล์ที่เราใช้
About
แล้ว require_once “Mail.php”; เรียก function อะไรอย่างไรบ้างครับ ขอดูตัวอย่างหน่อยได้ไหมครับ
ใช่คับ require_once “Mail.php”; เรียก function อย่างไร ขอดู ตย ด้วยคับ
Mail.php เป็น PEAR Mail Package ที่ลงมาพร้อมกับ PHP4+ อยู่แล้วครับ
เราไม่ต้องเขียนไฟล์นี้ขึ้นมาเอง ตัว PHP จะไปเรียกใช้จาก PEAR ให้อัตโนมัติครับ
ข้อมูลเพิ่มเติมเกี่ยวกับ Package ตัวนี้
http://pear.php.net/package/Mail
ขออีกคำถามนะคับ ผมกำลัง งง จิง ๆ
ไม่ทราบว่า PHP Version 5.1.6 มีไหมคับ
ถ้ามี อยู่ตรงไหน และ ถ้าไม่มี download มาใช้ร่วมกันได้ไหมคับ
แนะนำหน่อยคับ ต้องส่งงานวันนี้ด้วยอะ
ถ้าหมายถึงติดตั้งเองใน windows ขึ้นอยู่กับ package ที่เรา download มาครับ
ลองดูที่ folder ที่ลง PHP ไว้ เช่น c:\php\pear ว่ามีไฟล์อะไรมั้ย
ถ้าไม่มีอะไรให้ทำตามนี้ครับ
- start menu > run > พิมพ์ cmd แล้ว enter
- เข้า folder ที่ลง php ไว้ เช่น cd \php
- พิมพ์ go-pear แล้วกด enter ไปเรื่อยๆ ครับ
- พอเรียบร้อย พิมพ์ pear install Mail ครับ
มีไฟล์ go-pear.phar 1 ไฟล์ครับ
แต่ตอนนี้ผม download file Mail-1.2.0b1 มานะครับแต่ไม่ทราบว่าจะนำไปใช้ยังไงครับ
ทำตามนี้้เลยครับ
- start menu > run > พิมพ์ cmd แล้ว enter
- เข้า folder ที่ลง php ไว้ เช่น cd \php
- พิมพ์ go-pear แล้วกด enter ไปเรื่อยๆ ครับ
- พอเรียบร้อย พิมพ์ pear install Mail ครับ
ผมทำตามขั้นตอนตามที่คุณ Chakkit ให้มาแล้วนะคับ แต่ติดตรงขั้นตอนสุดท้ายนะ
- พอเรียบร้อย พิมพ์ pear install Mail ครับ
มันพิมพ์แล้ว dos หา file ไม่เจอนะครับ
- พิมพ์ go-pear แล้วกด enter ไปเรื่อยๆ ครับ
ขั้นอตนนี้เรียบร้อยแล้วหรือยังครับ
ต้องผ่านอันนี้ก่อนนะครับ (ต้องขึ้นประมาณ installed successfully)
เรียบร้อยแล้วครับ
แล้วใน floder Pear ก็จะมีสร้าง file ขึ้นมาเยอะแยะเลยคับ
แต่ไม่มีไฟล์ Mail.php คับ
ผมพิม pear install mail ไม่เจอนะคับ
ที่ cmd เข้า folder c:\php แล้วพิมพ์ pear install Mail ดูครับ
ถ้าไม่ได้ ลอง restart เครื่องดูทีนึงครับ
ผมพิมแบบนี้นะคับ ไม่รู้ว่าได้หรือยัง ต้อง 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>
คิดว่าเรียบร้อยแล้วนะครับ
ถ้าใช้ไมได้ให้พิมพ์
pear install –alldeps Mail
ยังไม่ได้เลยคับ
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 ก็ไม่เจอคับ
pear install –alldeps Mail
(ดูเครื่องหมายดีๆ ครับ)
ผมเข้าใจว่ามันลงเสร็จแล้ว ลองเรียกใช้ดูครับ
ถ้าไม่ได้ ศึกษาจากเว็บ PEAR ดูครับ
http://pear.php.net/
Fatal error: Call to undefined method PEAR_Error::send()
มัน Error อย่างนี้ ครับ แก้ไข ยังไง ดีครับ
ขอดู code หน่อยครับ อาจจะระบุค่าบางตัวไม่ถูกต้อง
ลองเอาวิธีของพี่ไปใช้ดู มันฟ้องแบบนี้ค่ะ
ไม้ค่อยเข้าใจเท่าไหร่เลยค่ะ
Fatal error: Class ‘Mail’ not found in C:\AppServ\www\mailserver\dd-formmailer.php on line 675
ที่เครื่องไม่ได้ลง PEAR ไว้นะครับ
ดูวิธีลง ที่นี่ ครับ
ขั้นตอนการติดตั้ง-php-pear-บน-windows
ผมลองทำตามแล้วครับ แต่มันบอก class เมลหาไม่เจอ ผมเลยลอง copy ไฟล์ mail.php แล้วกับ pear.php ไปไว้ใน floder เดียวกันกับที่เราเก็บ code ไว้ครับ มันก็ส่งได้นะ แต่ว่าจะไปอยู่ ในเมลขยะครับ ขอบคุณบทความดีๆ หามาหลายที่แล้วส่งไม่ได้ซักกะอัน แต่สงสัยอยู่นิดนึง ถ้าผมเอา code นี้ไป run ที่อื่นไม่รู้ว่ามันจะ run ได้ไหมครับ
@parinya
ถ้า server ที่ใช้งานไม่ได้ลงไว เราสามารถ set include path ตามที่เรา upload PEAR ไว้ ลงใน .htaccess ก็จะใช้ได้ครับ
ส่วนที่เข้า Junk นั้น ถ้าระบุ parameter ถูกต้อง การส่งผ่าน SMTP แบบนี้ จะเหมือนเราส่งผ่าน Mail Client เช่น MS Outlook ครับ ลองตรวจสอบข้อความดูว่ามันเป็น Pattern ของ Junk Mail หรือป่าว
ถ้า server ที่ใช้งานไม่ได้ลงไว เราสามารถ set include path ตามที่เรา upload PEAR ไว้ ลงใน .htaccess ก็จะใช้ได้ครับ
.htaccess เขียนแก้ยังไงเหรอครับ
ระบุ include path ของ pear ที่เรา upload เข้าไปเองครับ เช่น
php_value include_path “.:/usr/share/pear:/var/www/vhosts/domain.com/httpdocs/pear”
[...] PHP mail() ผ่าน SMTP Authentication view plaincopy to [...]
เพิ่ม pear install net_smtp ไปอีกตัว
อ่านดูแล้ว ยังงง ๆ เรื่อง pear อะครับ
ลองแล้วขึ้น 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
ตอนนี้ผมส่งผ่านละครับ
ไม่ทราบว่าจำทำยังไงไม่ให้อีเมลที่ส่งออกไปไม่ไปเข้าถังขยะครับ
ขอคำแนะนำด้วยครับ
@JEEP
เมล์เข้า Junk ขึ้นอยู่กับหลายปัจจัยครับ เช่น Mail Server ติด Blacklist หรือไม่ตั้งค่า Reverse DNS หรือ ข้อความที่ส่งไปเป็นเมล์โฆษณา/SPAM
ลองรับส่งเมล์กันปกติก่อนครับ ถ้าไม่ติดปัญหาก็มาดูที่ข้อความ
to K.Chakkit
ขอบคุณครับ ตอนนี้การส่งเมลส่งได้ครับ ผมจะลองปรับที่ข้อความดู ขอบคุณมากเลยครับที่เขียนบทความดีดี
โค้ดที่ผมใช้นะครับไม่รู้ถูกป่าว
คือว่าผมเป็นเด็กฝึกงานอะครับทำโปรเจคส่งอาจารย์อะครับ ช่วยทีครับ
<?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
@wss
ติดตั้ง PEAR ก่อนครับ
ส่วนการติดตั้ง ให้ลองดูที่ folder PHP จะมีไฟล์ pear.bat
จะขึ้นหน้าต่างมา ทำตามขั้นตอนไปจนเสร็จ
จากนั้นทำการติดตั้ง Mail ด้วยการเข้าที่ cmd แล้วพิมพ์คำสั่ง
pear install –alldeps Mail
หลังจากลงตามข้างบนเสร็จแล้ว พอรันโค๊ต มันขึ้นแบบนี้คับ มันต้องไปเซ็ทอะไรอีกมั้ยคับ
authentication failure [SMTP: SMTP server does not support authentication (code: 250, response: irp3.truemail.co.th 8BITMIME SIZE 15000000)]
@taza
ถ้าใช้ SMTP ของ ISP ให้ระบุ ‘auth’ => false ครับ
อ่อ น่าจะได้แล้วครับ ตอนนี้errorเกี่ยว กับpass เด๋วโทรไปถามpass callcenterก่อน (ลืม) ไงก็ขอบคุณไว้ก่อนครับ
ทำตามข้างบนแล้ว ขึ้น Message successfully sent แล้วครับ แต่ทำไมไม่มีอะไรเข้ามาในเมลเลยอะครับ