วิธีส่งเมล์ด้วย 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 Mail -alldeps
ยังไม่ได้เลยคับ
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 Mail -alldeps
(ดูเครื่องหมายดีๆ ครับ)
ผมเข้าใจว่ามันลงเสร็จแล้ว ลองเรียกใช้ดูครับ
ถ้าไม่ได้ ศึกษาจากเว็บ 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 อะครับ