Gửi thư trong PHP sử dụng mail (), SMTP với Phpmailer – Tri thức đời sống

Sendmail trong PHP có thể thực hiện được chỉ với một dòng mã. PHP chứa các chức năng mail tích hợp để gửi mail.

Có những lý do tại sao tôi cảm thấy thích thú với tính năng PHP này. Bởi vì tôi viết rất nhiều mã để gửi thư thường xuyên. PHP thực sự tiết kiệm thời gian của chúng tôi với các cài đặt sẵn của nó.

Trong hướng dẫn này, chúng ta sẽ xem cách thêm mã vào sendmail bằng PHP. Chúng tôi sẽ xem một số ví dụ trong này để làm phong phú thêm các tính năng với nhiều hỗ trợ hơn.

Dưới đây liệt kê các ví dụ mà chúng ta sẽ thấy dưới đây. Nó sẽ bao gồm hỗ trợ từ cơ bản đến đầy đủ cho sendmail bằng PHP.

  1. Thư văn bản đơn giản với thư PHP ().
  2. Gửi nội dung đa dạng thức qua thư.
  3. Sendmail bằng PHP với các tệp đính kèm.
  4. Gửi thư bằng PHPMailer với SMTP.

Thư PHP ()

PHP mail () là để gửi thư từ một ứng dụng. Hãy xem các cấu hình PHP cần thiết để làm cho hàm mail () hoạt động. Ngoài ra, chúng ta sẽ thấy cú pháp và tham số chung của hàm PHP này bên dưới.

Cú pháp


mail(
    string $recipient_email,
    string $subject,
    string $message,
    array|string $headers = [],
    string $additional_params = ""
)

Thông số

$ receiver_email
Một hoặc nhiều giá trị được phân tách bằng dấu phẩy là địa chỉ thư mục tiêu. Định dạng mẫu của các giá trị là,

$ chủ đề
Chủ đề thư. Nó sẽ làm hài lòng RFC 2047.

$ tin nhắn
Nội dung thư. Nó sử dụng \ r \ n để chuyển một văn bản nhiều dòng. Nó có giới hạn ký tự là 70 cho một dòng. Nó chấp nhận nhiều loại nội dung khác nhau tùy thuộc vào đặc điểm kỹ thuật trong tiêu đề phụ.

$ headers
Đây là một chuỗi hoặc mảng bổ sung nối vào tiêu đề thư. Sử dụng để chuyển mảng thông số kỹ thuật như loại nội dung, bộ ký tự và hơn thế nữa. Đây là một tham số tùy chọn. Nó sử dụng \ r \ n để nối nhiều tiêu đề. Mảng tiêu đề chứa cặp khóa-giá trị để chỉ định tên tiêu đề và thông số kỹ thuật tương ứng.

$ bổ sung_params
Đây cũng là tùy chọn. Nó là để vượt qua các cờ phụ như địa chỉ người gửi phong bì với một tùy chọn dòng lệnh.

Giá trị trả lại

Hàm này trả về boolean thật hoặc sai dựa trên trạng thái đã gửi của thư. Bằng cách nhận boolean thật điều đó không có nghĩa là thư đã được gửi thành công. Thay vào đó, nó chỉ thể hiện rằng yêu cầu gửi thư được gửi đến máy chủ.

Gửi thư trong PHP – cấu hình

Chúng tôi phải định cấu hình một số chỉ thị để làm cho tập lệnh thư hoạt động trong môi trường của bạn.

Định vị tệp php.ini của bạn và đặt các thuộc tính chức năng thư. Hình ảnh dưới đây cho thấy cấu hình PHP của hàm mail.

sendmail trong cấu hình php

Đặt cấu hình máy chủ thư và đường dẫn sendmail với phần php.ini này. Sau đó, khởi động lại máy chủ web và đảm bảo rằng cài đặt được bật qua phpinfo ().

Ví dụ về Sendmail trong PHP

Sendmail bằng PHP để gửi nội dung văn bản rõ ràng

Đây là một ví dụ ngắn về việc gửi nội dung văn bản thuần túy qua PHP Script. Nó đặt chủ đề thư, thông điệp và tham số email người nhận thành sendemail trong PHP.

Chương trình này in văn bản phản hồi dựa trên boolean được trả về bởi hàm mail ().

sendmail-with-pure-text.php


<?php
$to = '[email protected]';
$subject="Mail sent from sendmail PHP script";
$message="Text content from sendmail code.";
// Sendmail in PHP using mail()
if (mail($to, $subject, $message,)) {
    echo 'Mail sent successfully.';
} else {
    echo 'Unable to send mail. Please try again.';
}
?>

Mã PHP Sendmail để gửi nội dung HTML

Giống như ví dụ trên, chương trình này cũng sử dụng hàm mail () trong PHP để gửi email. Nó chuyển nội dung HTML đến chức năng thư.

Để gửi nội dung HTML, nó đặt loại nội dung và các giá trị tiêu đề khác với tiêu đề thư.

php-mail-with-html-content.php


<?php
$to = '[email protected]';

$subject="Mail sent from sendmail PHP script";

$from = '[email protected]';
$headers = "From: $from";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

$message="<p><strong>Sendmail in PHP with HTML content. </strong></p>";

if (mail($to, $subject, $message, $headers)) {
    echo 'Mail sent successfully.';
} else {
    echo 'Unable to send mail. Please try again.';
}
?>

Sendmail trong PHP để đính kèm tệp

Chương trình này đính kèm một tệp văn bản với nội dung email. Nó đọc một tệp nguồn bằng PHP file_get_contents (). Nó mã hóa nội dung tệp và chuẩn bị tiêu đề thư để đính kèm tệp.

Nó đặt kiểu nội dung, mã hóa với nội dung thư để làm cho nó hoạt động. Tập lệnh này sử dụng tùy chọn tiêu đề $ biến khi thực thi sendmail trong PHP.

sendmail-with-attachment.php


<?php
$file = "example.txt";

$to = '[email protected]';
$subject="Mail sent from sendmail PHP script";

$content = file_get_contents($file);
$encodedContent = chunk_split(base64_encode($content));

$divider = md5(time());

$headers = "From: TestSupport <[email protected]>\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $divider . "\"\r\n";
$headers .= "Content-Transfer-Encoding: 7bit\r\n";

// prepare mail body with attachment
$message = "--" . $divider. "\r\n";
$message .= "Content-Type: application/octet-stream; name=\"" . $file . "\"\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n";
$message .= "Content-Disposition: attachment\r\n";
$message .= $encodedContent. "\r\n";
$message .= "--" . $divider . "--";

//sendmail with attachment
if (mail($to, $subject, $message, $headers)) {
    echo 'Mail sent successfully.';
} else {
    echo 'Unable to send mail. Please try again.';
}
?>

sendmail trong php để đính kèm tệp

Sendmail khi gửi biểu mẫu

Thay vì các giá trị tĩnh, chúng tôi cũng có thể chuyển các giá trị do người dùng nhập vào thư gửi PHP. Biểu mẫu HTML có thể nhận các giá trị từ người dùng để gửi thư. Chúng ta đã biết cách gửi email liên hệ qua biểu mẫu.

Ví dụ này cho thấy một biểu mẫu thu thập tên, email và tin nhắn từ người dùng. Nó đăng dữ liệu biểu mẫu lên PHP trên hành động gửi.

PHP đọc dữ liệu biểu mẫu và sử dụng chúng để chuẩn bị các tham số yêu cầu gửi thư. Nó chuẩn bị tiêu đề với email ‘từ’. Nó đặt nội dung thư với thư được nhập bởi người dùng.

Tất cả các trường biểu mẫu là bắt buộc và việc xác thực được thực hiện bởi tính năng mặc định của trình duyệt.

sendmail-on-form-submit.php


<?php
if (isset($_POST["submit_btn"])) {

    $to = "[email protected]";
    $subject="Mail sent from sendmail PHP script";

    $from = $_POST["email"];
    $message = $_POST["msg"];
    $headers = "From: $from";

    // Sendmail in PHP using mail()
    if (mail($to, $subject, $message, $headers)) {
        $responseText="Mail sent successfully.";
    } else {
        $responseText="Unable to send mail. Please try again.";
    }
}
?>
<html>
<head>
<style>
body {
	font-family: Arial;
	width: 550px;
}

.response-ribbon {
	padding: 10px;
	background: #ccc;
	border: #bcbcbc 1px solid;
	margin-bottom: 15px;
	border-radius: 3px;
}

input, textarea {
	padding: 8px;
	border: 1px solid #ccc;
	border-radius: 5px;
}

#Submit-btn {
	background: #1363cc;
	color: #FFF;
	width: 150px;
}

#email-form {
	border: 1px solid #ccc;
	padding: 20px;
}

.response-ribbon {
	
}
</style>
</head>
<body>
	<?php 
	if(!empty($responseText)) {
	
	?>
	<div class="response-ribbon"><?php echo $responseText; ?></div>
	<?php 
	}
	?>
	<form id="email-form" name="email-form" method="post" action="">
		<table width="100%" border="0" align="center" cellpadding="4"
			cellspacing="1">
			<tr>
				<td>
					<div class="label">Name:</div>
					<div class="field">
						<input name="name" type="text" id="name" required>
					</div>
				</td>
			</tr>

			<tr>
				<td><div class="label">E-mail:</div>
					<div class="field">
						<input name="email" type="text" id="email" required>
					</div></td>
			</tr>

			<tr>
				<td><div class="label">Message:</div>
					<div class="field">
						<textarea name="msg" cols="45" rows="5" id="msg" required></textarea>
					</div></td>
			</tr>
			<tr>
				<td>
					<div class="field">
						<input name="submit_btn" type="submit" id="submit-btn"
							value="Send Mail">
					</div>
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

gửi mail dạng html

Gửi thư trong PHP qua SMTP

Hàm mail () trong PHP có một số hạn chế. Để có đầy đủ chức năng chính thức cho sendmail bằng PHP, tôi thích sử dụng thư viện PHPmailer hơn.

Thư viện này là một trong những thư viện tốt nhất cung cấp các tiện ích gửi thư nâng cao. Chúng tôi đã thấy các ví dụ về sendmail trong PHP bằng PHPMailer thông qua SMTP. Nếu bạn đang tìm kiếm mã để gửi thư bằng mã thông báo OAuth, bài viết được liên kết có một ví dụ.

Ví dụ này sử dụng một tập lệnh tối thiểu để gửi thư trong PHP với PHPMailer thông qua SMTP. Nó tải thư viện PHPMailer để tạo và đặt đối tượng thư.

Đối tượng thư được sử dụng để cấu hình các tham số thư. Sau đó, nó gọi gửi() phương thức của lớp PHPMailer để gửi thư.

Tải xuống PHPMailer từ Github và đưa nó vào nhà cung cấp của thư mục ví dụ này. Thay thế cấu hình SMTP trong tập lệnh bên dưới để làm cho tập lệnh thư này hoạt động.

sendmail-in-php-via-smtp.php


<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/Exception.php';
require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/PHPMailer.php';
require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/SMTP.php';

$mail = new PHPMailer(true);
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->Host="smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->Username = "";
$mail->Password = "";
$mail->SMTPSecure = "ssl";
$mail->Port = 465;

$mail->From = "[email protected]";
$mail->FromName = "Full Name";

$mail->addAddress("[email protected]", "recipient name");

$mail->isHTML(true);

$mail->Subject = "Mail sent from php send mail script.";
$mail->Body = "<i>Text content from send mail.</i>";
$mail->AltBody = "This is the plain text version of the email content";

try {
    $mail->send();
    echo "Message has been sent successfully";
} catch (Exception $e) {
    echo "Mailer Error: " . $mail->ErrorInfo;
}
?>

Hàm liên quan đến sendmail trong PHP

PHP cung cấp các chức năng thư thay thế cho sendmail. Những người được liệt kê dưới đây.

  • mb_send_mail () – Nó gửi thư được mã hóa dựa trên ngôn ngữ được định cấu hình với cài đặt mb_language ().
  • imap_mail () – Nó cho phép gửi thư bằng PHP với việc xử lý chính xác người nhận CC, BCC.

Phần kết luận

Ví dụ về gửi thư ở trên cung cấp mã cho sendemail bằng PHP. Nó hỗ trợ gửi nhiều loại nội dung, tệp tin đính kèm trong mail.

Việc xây dựng hàm mail () tích hợp sẵn trong PHP làm nổi bật sức mạnh của hàm này.

Hy vọng bài viết này sẽ hữu ích để tìm hiểu thêm về cách sendmail trong PHP.
Tải xuống

↑ Quay lại đầu trang