PHP - การส่งอีเมลโดยใช้ PHP
ต้องกำหนดค่า PHP อย่างถูกต้องในไฟล์ php.iniไฟล์ที่มีรายละเอียดว่าระบบของคุณส่งอีเมลอย่างไร เปิดไฟล์ php.ini ที่มีอยู่ใน/etc/ ไดเรกทอรีและค้นหาส่วนที่มุ่งหน้าไป [mail function].
ผู้ใช้ Windows ควรตรวจสอบให้แน่ใจว่ามีคำสั่งสองคำสั่ง อย่างแรกเรียกว่า SMTP ที่กำหนดที่อยู่เซิร์ฟเวอร์อีเมลของคุณ อย่างที่สองเรียกว่า sendmail_from ซึ่งกำหนดที่อยู่อีเมลของคุณเอง
การกำหนดค่าสำหรับ Windows ควรมีลักษณะดังนี้ -
[mail function]
; For Win32 only.
SMTP = smtp.secureserver.net
; For win32 only
sendmail_from = [email protected]
ผู้ใช้ Linux ต้องแจ้งให้ PHP ทราบตำแหน่งของไฟล์ sendmailใบสมัคร ควรระบุเส้นทางและสวิตช์ที่ต้องการในคำสั่ง sendmail_path
การกำหนดค่าสำหรับ Linux ควรมีลักษณะดังนี้ -
[mail function]
; For Win32 only.
SMTP =
; For win32 only
sendmail_from =
; For Unix only
sendmail_path = /usr/sbin/sendmail -t -i
ตอนนี้คุณพร้อมที่จะไป -
การส่งอีเมลข้อความธรรมดา
PHP ใช้ประโยชน์จากไฟล์ mail()ฟังก์ชั่นในการส่งอีเมล ฟังก์ชันนี้ต้องการอาร์กิวเมนต์บังคับสามอาร์กิวเมนต์ที่ระบุที่อยู่อีเมลของผู้รับหัวเรื่องของข้อความและข้อความจริงนอกจากนี้ยังมีพารามิเตอร์เสริมอื่น ๆ อีกสองพารามิเตอร์
mail( to, subject, message, headers, parameters );
นี่คือคำอธิบายสำหรับแต่ละพารามิเตอร์
ซีเนียร์ No | พารามิเตอร์และคำอธิบาย |
---|---|
1 | to จำเป็น ระบุผู้รับ / ผู้รับอีเมล |
2 | subject จำเป็น ระบุหัวเรื่องของอีเมล พารามิเตอร์นี้ต้องไม่มีอักขระขึ้นบรรทัดใหม่ |
3 | message จำเป็น กำหนดข้อความที่จะส่ง แต่ละบรรทัดควรคั่นด้วย LF (\ n) เส้นไม่ควรเกิน 70 อักขระ |
4 | headers ไม่จำเป็น. ระบุส่วนหัวเพิ่มเติมเช่น From, Cc และ Bcc ควรแยกส่วนหัวเพิ่มเติมด้วย CRLF (\ r \ n) |
5 | parameters ไม่จำเป็น. ระบุพารามิเตอร์เพิ่มเติมให้กับโปรแกรม send mail |
ทันทีที่เรียกว่าฟังก์ชันเมล PHP จะพยายามส่งอีเมลจากนั้นจะส่งคืนจริงหากสำเร็จหรือเป็นเท็จหากล้มเหลว
สามารถระบุผู้รับหลายคนเป็นอาร์กิวเมนต์แรกของฟังก์ชัน mail () ในรายการที่คั่นด้วยเครื่องหมายจุลภาค
การส่งอีเมล HTML
เมื่อคุณส่งข้อความโดยใช้ PHP เนื้อหาทั้งหมดจะถือว่าเป็นข้อความธรรมดา แม้ว่าคุณจะรวมแท็ก HTML ไว้ในข้อความ แต่แท็กนั้นจะแสดงเป็นข้อความธรรมดาและแท็ก HTML จะไม่ได้รับการจัดรูปแบบตามไวยากรณ์ HTML แต่ PHP มีตัวเลือกในการส่งข้อความ HTML เป็นข้อความ HTML จริง
ในขณะที่ส่งข้อความอีเมลคุณสามารถระบุเวอร์ชัน Mime ประเภทเนื้อหาและชุดอักขระเพื่อส่งอีเมล HTML ได้
ตัวอย่าง
ตัวอย่างต่อไปนี้จะส่งข้อความอีเมล HTML ไปที่ [email protected] โดยคัดลอกไปที่ [email protected] คุณสามารถเขียนโค้ดโปรแกรมนี้ในลักษณะที่ควรรับเนื้อหาทั้งหมดจากผู้ใช้จากนั้นจึงควรส่งอีเมล
<html>
<head>
<title>Sending HTML email using PHP</title>
</head>
<body>
<?php
$to = "[email protected]";
$subject = "This is subject";
$message = "<b>This is HTML message.</b>";
$message .= "<h1>This is headline.</h1>";
$header = "From:[email protected] \r\n";
$header .= "Cc:[email protected] \r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-type: text/html\r\n";
$retval = mail ($to,$subject,$message,$header);
if( $retval == true ) {
echo "Message sent successfully...";
}else {
echo "Message could not be sent...";
}
?>
</body>
</html>
การส่งไฟล์แนบพร้อมอีเมล
ในการส่งอีเมลที่มีเนื้อหาผสมต้องตั้งค่า Content-type ส่วนหัวของ multipart/mixed. จากนั้นสามารถระบุส่วนข้อความและไฟล์แนบได้ภายในboundaries.
ขอบเขตเริ่มต้นด้วยยัติภังค์สองตัวตามด้วยหมายเลขเฉพาะซึ่งไม่สามารถปรากฏในส่วนข้อความของอีเมลได้ ฟังก์ชัน PHPmd5()ใช้ในการสร้างเลขฐานสิบหก 32 หลักเพื่อสร้างหมายเลขเฉพาะ ขอบเขตสุดท้ายที่แสดงถึงส่วนสุดท้ายของอีเมลจะต้องลงท้ายด้วยยัติภังค์สองตัว
<?php
// request variables // important
$from = $_REQUEST["from"];
$emaila = $_REQUEST["emaila"];
$filea = $_REQUEST["filea"];
if ($filea) {
function mail_attachment ($from , $to, $subject, $message, $attachment){
$fileatt = $attachment; // Path to the file
$fileatt_type = "application/octet-stream"; // File Type
$start = strrpos($attachment, '/') == -1 ?
strrpos($attachment, '//') : strrpos($attachment, '/')+1;
$fileatt_name = substr($attachment, $start,
strlen($attachment)); // Filename that will be used for the
file as the attachment
$email_from = $from; // Who the email is from
$subject = "New Attachment Message";
$email_subject = $subject; // The Subject of the email
$email_txt = $message; // Message that the email has in it
$email_to = $to; // Who the email is to
$headers = "From: ".$email_from;
$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
$msg_txt="\n\n You have recieved a new attachment message from $from";
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . "
boundary=\"{$mime_boundary}\"";
$email_txt .= $msg_txt;
$email_message .= "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" . "Content-Type:text/html;
charset = \"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" .
$email_txt . "\n\n";
$data = chunk_split(base64_encode($data));
$email_message .= "--{$mime_boundary}\n" . "Content-Type: {$fileatt_type};\n" .
" name = \"{$fileatt_name}\"\n" . //"Content-Disposition: attachment;\n" .
//" filename = \"{$fileatt_name}\"\n" . "Content-Transfer-Encoding:
base64\n\n" . $data . "\n\n" . "--{$mime_boundary}--\n";
$ok = mail($email_to, $email_subject, $email_message, $headers);
if($ok) {
echo "File Sent Successfully.";
unlink($attachment); // delete a file after attachment sent.
}else {
die("Sorry but the email could not be sent. Please go back and try again!");
}
}
move_uploaded_file($_FILES["filea"]["tmp_name"],
'temp/'.basename($_FILES['filea']['name']));
mail_attachment("$from", "[email protected]",
"subject", "message", ("temp/".$_FILES["filea"]["name"]));
}
?>
<html>
<head>
<script language = "javascript" type = "text/javascript">
function CheckData45() {
with(document.filepost) {
if(filea.value ! = "") {
document.getElementById('one').innerText =
"Attaching File ... Please Wait";
}
}
}
</script>
</head>
<body>
<table width = "100%" height = "100%" border = "0"
cellpadding = "0" cellspacing = "0">
<tr>
<td align = "center">
<form name = "filepost" method = "post"
action = "file.php" enctype = "multipart/form-data" id = "file">
<table width = "300" border = "0" cellspacing = "0"
cellpadding = "0">
<tr valign = "bottom">
<td height = "20">Your Name:</td>
</tr>
<tr>
<td><input name = "from" type = "text"
id = "from" size = "30"></td>
</tr>
<tr valign = "bottom">
<td height = "20">Your Email Address:</td>
</tr>
<tr>
<td class = "frmtxt2"><input name = "emaila"
type = "text" id = "emaila" size = "30"></td>
</tr>
<tr>
<td height = "20" valign = "bottom">Attach File:</td>
</tr>
<tr valign = "bottom">
<td valign = "bottom"><input name = "filea"
type = "file" id = "filea" size = "16"></td>
</tr>
<tr>
<td height = "40" valign = "middle"><input
name = "Reset2" type = "reset" id = "Reset2" value = "Reset">
<input name = "Submit2" type = "submit"
value = "Submit" onClick = "return CheckData45()"></td>
</tr>
</table>
</form>
<center>
<table width = "400">
<tr>
<td id = "one">
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>