Cách gửi mail sử dụng PHP - Tìm hiểu ngay
17/01/2024 01:28
PHP phải được cấu hình chính xác trong tệp php.ini kèm theo 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 thư mục /etc/ và tìm phần có tiêu đề [mail function] .
PHP phải được cấu hình chính xác trong tệp php.ini kèm theo 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 thư mục /etc/ và tìm phần có tiêu đề [mail function] .
Người dùng Windows phải đảm bảo rằng có 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 = webmaster@tutorialspoint.com
Người dùng Linux chỉ cần cho PHP biết vị trí ứng dụng sendmail của họ . Đường dẫn và bất kỳ công tắc mong muốn nào phải được chỉ định cho lệnh sendmail_path.
Cấu hình cho Linux sẽ trông 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 để đi -
Gửi email văn bản đơn giản
PHP sử dụng hàm mail() để 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 );
Dưới đây là mô tả cho từng thông số.
Sr.Không | Mô tả về Thông Số |
---|---|
1 |
to Yêu cầu. Chỉ định người nhận/người nhận email |
2 |
subject Yêu cầu. Chỉ định chủ đề của email. Tham số này không thể chứa bất kỳ ký tự dòng mới nào |
3 |
message Yêu cầu. Xác định tin nhắn sẽ được gửi. Mỗi dòng phải được phân tách bằng LF (\n). 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 chức năng thư được gọi, PHP sẽ cố gắng gửi email và nó sẽ trả về true nếu thành công hoặc sai nếu thất bại.
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 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 đưa các thẻ HTML vào 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 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.
Ví dụ
Ví dụ sau sẽ gửi một thông báo email HTML tới xyz@somedomain.com, sao chép nó tới afgh@somedomain.com. Bạn có thể mã hóa chương trình này theo cách nó sẽ nhận tất cả nội dung từ người dùng và sau đó nó sẽ gửi email.
<html> <head> <title>Sending HTML email using PHP</title> </head> <body> <?php $to = "xyz@somedomain.com"; $subject = "This is subject"; $message = "<b>This is HTML message.</b>"; $message .= "<h1>This is headline.</h1>"; $header = "From:abc@somedomain.com \r\n"; $header .= "Cc:afgh@somedomain.com \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 qua email
Để gửi email có nội dung hỗn hợp, cần đặt tiêu đề Content-type thành multipart/mixed . Sau đó, phần văn bản và phần đính kèm có thể được chỉ định trong ranh giới .
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 tin nhắn của email. Hàm PHP md5() được sử dụng để tạo số thập lục phân gồm 32 chữ số nhằm 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", "youremailaddress@gmail.com", "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>
Source: https://www.tutorialspoint.com/php/php_sending_emails.htm