PHP - Gửi email bằng PHP
PHP phải được định cấu hình chính xác trong php.inigửi thông tin chi tiết về cách hệ thống của bạn gửi email. Mở tệp php.ini có sẵn trong/etc/ thư mục và tìm phần đứng đầu [mail function].
Người dùng Windows nên đảm bảo rằng hai lệnh được cung cấp. Đầu tiên được gọi là SMTP xác định địa chỉ máy chủ email của bạn. Thứ hai được gọi là sendmail_from xác định địa chỉ email của riêng bạn.
Cấu hình cho Windows sẽ trông giống như thế này -
[mail function]
; For Win32 only.
SMTP = smtp.secureserver.net
; For win32 only
sendmail_from = [email protected]
Người dùng Linux chỉ cần cho PHP biết vị trí của sendmailứng dụng. Đường dẫn và bất kỳ công tắc mong muốn nào phải được chỉ định cho chỉ thị sendmail_path.
Cấu hình cho Linux sẽ giống như thế này -
[mail function]
; For Win32 only.
SMTP =
; For win32 only
sendmail_from =
; For Unix only
sendmail_path = /usr/sbin/sendmail -t -i
Bây giờ bạn đã sẵn sàng -
Gửi email văn bản thuần túy
PHP sử dụng mail()chức năng gửi email. Hàm này yêu cầu ba đối số bắt buộc chỉ định địa chỉ email của người nhận, chủ đề của thư và thư thực tế, ngoài ra còn có hai tham số tùy chọn khác.
mail( to, subject, message, headers, parameters );
Đây là mô tả cho từng tham số.
Sr.No | Mô tả về Thông Số |
---|---|
1 | to Cần thiết. Chỉ định người nhận / người nhận email |
2 | subject Cần thiết. Chỉ định chủ đề của email. Tham số này không được chứa bất kỳ ký tự dòng mới nào |
3 | message Cần thiết. Xác định tin nhắn sẽ được gửi đi. Mỗi dòng phải được phân tách bằng LF (\ n). Các dòng không được vượt quá 70 ký tự |
4 | headers Không bắt buộc. Chỉ định các tiêu đề bổ sung, như Từ, Cc và Bcc. Các tiêu đề bổ sung phải được phân tách bằng CRLF (\ r \ n) |
5 | parameters Không bắt buộc. Chỉ định một tham số bổ sung cho chương trình gửi thư |
Ngay sau khi hàm mail được gọi, PHP sẽ cố gắng gửi email sau đó nó sẽ trả về true nếu thành công hoặc false nếu không thành công.
Nhiều người nhận có thể được chỉ định làm đối số đầu tiên cho hàm mail () trong danh sách được phân tách bằng dấu phẩy.
Gửi email HTML
Khi bạn gửi một tin nhắn văn bản bằng PHP thì tất cả nội dung sẽ được coi là văn bản đơn giản. Ngay cả khi bạn bao gồm các thẻ HTML trong một tin nhắn văn bản, nó sẽ được hiển thị dưới dạng văn bản đơn giản và các thẻ HTML sẽ không được định dạng theo cú pháp HTML. Nhưng PHP cung cấp tùy chọn để gửi một tin nhắn HTML dưới dạng tin nhắn HTML thực tế.
Trong khi gửi email, bạn có thể chỉ định phiên bản Mime, loại nội dung và bộ ký tự để gửi email HTML.
Thí dụ
Ví dụ sau sẽ gửi một email HTML tới [email protected], sao chép nó vào [email protected]. Bạn có thể viết mã chương trình này theo cách mà nó sẽ nhận được tất cả nội dung từ người dùng và sau đó nó sẽ gửi một email.
<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>
Gửi tệp đính kèm bằng email
Để gửi một email có nội dung hỗn hợp, yêu cầu đặt Content-type tiêu đề tới multipart/mixed. Sau đó, các phần văn bản và phần đính kèm có thể được chỉ định trongboundaries.
Một ranh giới được bắt đầu bằng hai dấu gạch nối theo sau là một số duy nhất không thể xuất hiện trong phần thư của email. Một hàm PHPmd5()được sử dụng để tạo một số thập lục phân gồm 32 chữ số để tạo số duy nhất. Ranh giới cuối cùng biểu thị phần cuối cùng của email cũng phải kết thúc bằng hai dấu gạch nối.
<?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>