Hàm mail() trong PHP là gì?

Bạn có thể chuyển các tham số bổ sung dưới dạng tùy chọn dòng lệnh cho chương trình được định cấu hình để sử dụng trong khi gửi thư. Những cấu hình đã nói được xác định bởi cấu hình sendmail_path. Một ví dụ về việc sử dụng tham số bổ sung là đặt địa chỉ người gửi phong bì với tùy chọn -f

[email protected]', 'Demo mail', 'Testing mail communication', null,
   '-f [email protected]');
?> 

Chúng tôi khuyến khích bạn thay thế giá trị của các tham số được sử dụng trong ví dụ trên bằng giá trị của bạn và kiểm tra nó

Công nghệ tiến bộ – thế giới cũng vậy mỗi ngày. Nhưng có những thứ tồn tại mãi mãi. Giống như gửi email bằng PHP. Bạn có thể hoài nghi và suy nghĩ ngay cả trong năm 2022? . W3Techs báo cáo rằng, kể từ tháng 1 năm 2022, “PHP được sử dụng bởi 78. 1% trong số tất cả các trang web có ngôn ngữ lập trình phía máy chủ mà chúng tôi biết. ”

Hàm mail() trong PHP là gì?

Điều đó nói rằng, hãy xem hướng dẫn này sẽ giúp bạn gửi email từ PHP ngay hôm nay

Gửi thư từ PHP. ba điều quan trọng mà bạn cần phải biết ngay lập tức

Một, có một hàm PHP mail() tích hợp sẵn và nó khá đơn giản

Thứ hai, mặc dù hàm mail tích hợp sẵn của PHP () rất đơn giản, nhưng nó cung cấp chức năng gửi email hạn chế. Bạn sẽ không thể thêm tệp đính kèm vào email của mình và việc xây dựng một mẫu HTML đẹp với hình ảnh được nhúng cũng sẽ là một nhiệm vụ khó khăn.  

Thứ ba, chức năng thư PHP () gửi email từ trang web của bạn, điều này có thể gây ra sự cố về khả năng gửi do lo ngại về bảo mật như nghi ngờ thư rác và danh sách đen. PHP mail() cũng thường không cho phép bạn gửi thư bằng máy chủ SMTP bên ngoài và nó không hỗ trợ xác thực SMTP

Bạn có những tùy chọn nào để gửi email bằng PHP?

Có bốn cái phổ biến

  1. Hàm PHP mail() tích hợp sẵn;
  2. PHPMailer;
  3. Người gửi thư Symfony;
  4. Các dịch vụ gửi email của bên thứ ba như Mailtrap, Sendgrid, Mailgun, v.v.

Chúng ta sẽ đi từng bước qua tất cả chúng

Hàm thư tích hợp PHP ()

Mail() là một trình bao bọc bên trên tiện ích sendmail, vì vậy, trước tiên, sendmail phải được cài đặt trong hệ thống

Đây là những gì bạn có thể làm với chức năng thư tích hợp PHP().  

  • tạo tin nhắn văn bản/HTML đơn giản mà không cần tệp đính kèm và hình ảnh
  • gửi chúng cho một hoặc một số người nhận
  • bao gồm các tiêu đề bổ sung cho tin nhắn
  • thêm các tham số bổ sung vào lệnh `sendmail`

Hãy nhớ rằng khi bạn gửi email bằng mail(), bạn có thể gặp phải một số vấn đề nghiêm trọng về khả năng gửi. Các thư được gửi đi sẽ không được hưởng lợi từ việc thiết lập SPF và DKIM trên miền của bạn, do đó, các thư này có thể sẽ bị MTA nhận (Tác nhân chuyển thư) coi là thư rác. Do đó, khả năng gửi tổng thể của thư email được gửi qua thư PHP () không được đảm bảo. Hơn nữa, bạn sẽ không nhận được tin nhắn trả lại nếu có lỗi gửi

Nếu bạn vẫn cam kết sử dụng hàm mail tích hợp sẵn trong PHP() và sẵn sàng chấp nhận thử thách, hãy xem qua cú pháp tập lệnh PHP cơ bản và các tham số chính của nó.  

Cú pháp và tham số

Cú pháp thư PHP khá đơn giản

Nó sử dụng các tham số sau.  

  • “$to” = your message recipient(s). The email address format may be [email protected] or User . In general, it needs to comply with RFC 2822. It is mandatory.
  • “$subject” = chủ đề tin nhắn của bạn.  
  • “$message” = nội dung thư của bạn. Các dòng phải được phân tách bằng LF (\n). Mỗi dòng không được vượt quá 70 ký tự
  • “[$headers]” = tiêu đề bắt buộc là tiêu đề “từ”. nó phải được chỉ định, nếu không, bạn sẽ nhận được thông báo lỗi như Cảnh báo. thư(). “sendmail_from” không được đặt trong php. ini hoặc tùy chỉnh “Từ. ” thiếu tiêu đề

Các tiêu đề bổ sung cho biết những người nhận khác hoặc bản sao thư của bạn như CC hoặc BCC. Chúng có thể là một mảng trong đó khóa là tên tiêu đề và giá trị là giá trị tiêu đề. Hoặc chúng có thể là một chuỗi. Trong trường hợp này, các tiêu đề phải được phân tách bằng CRLF (\r\n)

  • [$parameters] = để chỉ định các tham số bổ sung được xác định trong cài đặt cấu hình sendmail_path

Để biết thêm chi tiết và tham số bổ sung, hãy tham khảo tài liệu PHP.  

Gửi email HTML bằng hàm PHP mail()

Phần thân của thư có thể được viết bằng HTML. Tuy nhiên, như chúng tôi đã đề cập ở trên, nó phải đơn giản.  

Trong hàm mail PHP(), phần tin nhắn HTML sẽ như thế này

// Message
$message = '


  Review Request Reminder


  

Here are the cases requiring your review in December:

Case titleCategoryStatusDue date
Case 1DevelopmentpendingDec-20
Case 1DevOpspendingDec-21
';

Điều quan trọng cần nhớ là để gửi thư HTML, bạn cần đặt tiêu đề Kiểu nội dung
$headers[] = 'Phiên bản MIME. 1. 0’;
$headers[] = 'Loại nội dung. văn bản/html;

Giao thức truyền dẫn đơn giản (SMTP)

Tôi chỉ định cài đặt SMTP ở đâu? . Chuyển đến thư mục cài đặt tệp PHP và định cấu hình chúng trong tệp php. tập tin ini. Nhưng điều này sẽ chỉ hoạt động đối với các giải pháp tương tự như localhost hoặc XAMPP vì như chúng tôi đã đề cập, hàm PHP mail() không hỗ trợ xác thực SMTP và không cho phép gửi thư qua máy chủ bên ngoài.  

Để gửi thư mà không cần SMTP, bạn cũng có thể tham khảo dịch vụ của bên thứ ba như Mailtrap, SendGrid hoặc Mailgun.  

Gửi nhiều email

Để gửi thư của bạn cho nhiều người nhận, hãy chỉ định địa chỉ email của họ trong tham số “$to” =  phân tách họ bằng dấu phẩy (-s).   

Đó là phương thức phù hợp duy nhất với hàm mail() gốc. Nếu bạn cần gửi một lượng lớn thư trong một vòng lặp, hãy thử gói gửi thư bên ngoài như Symfony Mailer. Hoặc giải pháp của bên thứ ba

Làm cách nào để gửi email bằng PHP qua biểu mẫu liên hệ?

Ngoài ra còn có một vài cách để làm điều này. Và chủ đề này cần một hướng dẫn đặc biệt. Hoặc bạn chạy một trang web WordPress hoặc cần một biểu mẫu liên hệ đơn giản, hãy xem mã hóa này để biết biểu mẫu liên hệ PHP với Google reCaptcha.  

Chúng tôi giải thích cách thức hoạt động của nó một cách chi tiết, ngoài ra chúng tôi còn thực hiện nhiều cách khác để tạo biểu mẫu liên hệ bằng PHP trong hướng dẫn đặc biệt của chúng tôi về mã PHP để gửi email từ biểu mẫu liên hệ. Điều chỉnh

success) {
    $errors[] = 'Recaptcha failed';
  }
  if (empty($name)) {
    $errors[] = 'Name is empty';
  }
  if (empty($email)) {
    $errors[] = 'Email is empty';
  }
  else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'Email is invalid';
  }
  if (empty($message)) {
    $errors[] = 'Message is empty';
  }

  if (!empty($errors)) {
    $allErrors = join('
', $errors); $errorMessage = "

{$allErrors}

"; } else { $toEmail = '[email protected]'; $emailSubject = 'New email from your contant form'; $headers = ['From' => $email, 'Reply-To' => $email, 'Content-type' => 'text/html; charset=iso-8859-1']; $bodyParagraphs = ["Name: {$name}", "Email: {$email}", "Message:", $message]; $body = join(PHP_EOL, $bodyParagraphs); if (mail($toEmail, $emailSubject, $body, $headers)) { $successMessage = "

Thank you for contacting us :)

"; } else { $errorMessage = "

Oops, something went wrong. Please try again later

"; } } } ?>

Contact us

Làm cách nào để gửi email bằng PHPMailer?

PHPMailer là thư viện gửi email cổ điển và phổ biến nhất cho PHP. Nó xứng đáng có một bài viết riêng và một hướng dẫn. Để có cái nhìn tổng quan chi tiết về mã php trong PHPMailer, hãy đọc hướng dẫn của chúng tôi về cách gửi email bằng PHPMailer

Bạn có thể làm gì với PHPMailer

  • tạo các mẫu HTML/nhiều phần phức tạp
  • thêm tệp đính kèm và hình ảnh nhúng
  • gửi email từ SMTP đã xác thực.  

PHPMailer được bảo vệ chống lại các cuộc tấn công chèn tiêu đề và tự động xác thực email.  

Bây giờ, hãy gửi một xác nhận đặt phòng khách sạn bằng PHPMailer

isSMTP();
$mail->Host = 'smtp.mailtrap.io';
$mail->SMTPAuth = true;
$mail->Username = '1a2b3c4d5e6f7g';
$mail->Password = '1a2b3c4d5e6f7g';
$mail->SMTPSecure = 'tls';
$mail->Port = 528;

$mail->setFrom('[email protected]', 'Your Hotel');
$mail->addAddress('[email protected]', 'Me');
$mail->Subject = 'Thanks for choosing Our Hotel!';
// Set HTML 
$mail->isHTML(TRUE);
$mail->Body = 'Hi there, we are happy to 
confirm your booking.
Please check the document in the attachment.'; $mail->AltBody = 'Hi there, we are happy to confirm your booking. Please check the document in the attachment.'; // add attachment // just add the '/path/to/file.pdf', 'filename.pdf' $mail->addAttachment('//confirmations/yourbooking.pdf', 'yourbooking.pdf'); // send the message if(!$mail->send()){ echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; }

Chú ý. đối với thông báo email này, chúng tôi sử dụng đoạn mã sau

$mail->isSMTP();
$mail->Host = 'smtp.mailtrap.io';
$mail->SMTPAuth = true;
$mail->Username = '1a2b3c4d5e6f7g';
$mail->Password = '1a2b3c4d5e6f7g';
$mail->SMTPSecure = 'tls';
$mail->Port = 528;

để đặt máy chủ thư, cổng SMTP và bật xác thực email.  

Gói gửi thư PHP

Như chúng tôi đã đề cập, hàm PHP mail() gốc không được thiết kế để tạo các mẫu email và gửi một lượng lớn email. Hơn nữa, nó gây ra một số vấn đề nghiêm trọng về khả năng chuyển giao. Vì vậy, chúng tôi khuyên bạn nên sử dụng một số gói gửi thư bên ngoài để thay thế. Cho năm 2022, quả lê. Mail và Swift Mailer không còn là một thứ nữa (vì chúng đã lỗi thời), vì vậy sự lựa chọn rõ ràng sẽ là Symfony Mailer.  

Các thành phần Symfony Mailer & Mime thiết lập một hệ thống vững chắc để tạo và gửi email – hoàn chỉnh với sự hỗ trợ cho các thư nhiều phần, tích hợp Twig, nội tuyến CSS, tệp đính kèm, v.v. Chúng tôi đã tạo hướng dẫn từng bước để Gửi email trong Symphony. từ cài đặt đến thiết lập vận chuyển cũng như tạo và gửi tin nhắn. Hãy sử dụng nó để davantage của bạn. Đừng ngần ngại chuyển sang hiện tại 6. 1 tài liệu phiên bản để biết chi tiết cụ thể

Xin lưu ý rằng ở đây chúng tôi hiển thị cách sử dụng gói này độc lập và nó đã được tích hợp vào Symfony và vào khung Laravel. Vì vậy, việc sử dụng nó đơn giản hơn trong khi làm việc với các khung hoàn toàn

setUsername('155d3ee688e2b6')
                ->setPassword('1ca3b8a278cf32');

$mailer = new Mailer($transport); 

$email = (new Email())
            ->from('[email protected]')
            ->to('[email protected]')
            ->subject('Time for Symfony Mailer!')
            ->text('Sending emails is fun again!')
            ->html('

See Twig integration for better HTML integration!

'); $mailer->send($email);

Gửi email bằng PHP với các dịch vụ email của bên thứ ba

Trong trường hợp ứng dụng của bạn yêu cầu gửi email tự động và phân tích email, tốt hơn hết bạn nên sử dụng các dịch vụ email của bên thứ ba. Tại sao? . nó cho phép bạn kiểm soát nhiều hơn đối với cơ sở hạ tầng email

Có nhiều dịch vụ email của bên thứ ba mà bạn có thể tích hợp ứng dụng của mình, chẳng hạn như Sendgrid, Mailgun, v.v. Tuy nhiên, Nền tảng gửi email Mailtrap có thể là nền tảng bạn thực sự cần

Sử dụng Mailtrap để gửi email bằng PHP

Nếu bạn đang tìm kiếm một dịch vụ gửi email đáng tin cậy và không rắc rối bằng PHP, có lẽ bạn nên xem xét Gửi email qua Mailtrap. Đó là dịch vụ Email API/SMTP cho phép lưu nhật ký email trong tối đa 60 ngày để khắc phục sự cố được cải thiện (tiết kiệm dữ liệu cứng của bạn trong khoảng thời gian này).  

Trang tổng quan với ảnh chụp nhanh rõ ràng về trạng thái cơ sở hạ tầng email của bạn luôn sẵn sàng để phân tích.  

Hàm mail() trong PHP là gì?

Một ưu điểm khác của Gửi email qua Mailtrap là các cảnh báo về khả năng gửi email kịp thời của chúng tôi giúp bạn kiểm soát tốt hơn cơ sở hạ tầng email và quyền miền của mình. Điều này có nghĩa là nếu có vấn đề xảy ra với khả năng gửi của bạn, bạn sẽ nhận được cảnh báo bằng bảng mã màu cùng với thông tin chi tiết về nơi cần kiểm tra vấn đề về khả năng gửi. Tuy nhiên, Mailtrap gửi cho bạn các báo cáo định kỳ hàng tuần về hiệu suất khả năng gửi của bạn để giúp bạn cập nhật về hiệu suất gửi và khả năng gửi email của mình

Hàm mail() trong PHP là gì?

Tích hợp API Mailtrap cho PHPChuyển đến tab Miền gửi, chọn Tích hợp API/SMTP, tìm API một và chọn PHP từ thư viện
Bạn sẽ tìm thấy thông tin đăng nhập cần thiết ngay tại đó, chỉ cần sao chép và dán chúng

 'https://send.api.mailtrap.io/api/send',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS =>'{"from":{"email":"[email protected]","name":"Mailtrap Test"},"to":[{"email":"[email protected]"}],"subject":"You are awesome!","text":"Congrats for sending test email with Mailtrap!","category":"Integration Test"}',
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer ,
        'Content-Type: application/json'
    ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Bây giờ bạn có thể bắt đầu gửi

Thử gửi email bằng PHP với Mailtrap miễn phí

Cấu hình máy chủ

Đây là cách cấu hình máy chủ SMTP của bạn để bắt đầu gửi bằng PHP sẽ như thế nào trong Mailtrap dành cho PHPMailer (đi tới thông tin đăng nhập SMTP tại giao diện Mailtrap, sau đó chỉ cần sao chép và dán chúng)

________số 8_______

Dùng thử Mailtrap miễn phí

Ba vấn đề phổ biến với thư PHP

Chúng tôi sẽ chỉ đề cập đến những vấn đề cơ bản ở đây. Trong trường hợp bạn gặp sự cố cụ thể không được đề cập ở đây, hãy tham khảo tài liệu PHP hoặc hỗ trợ của nhà cung cấp dịch vụ gửi

Ký tự hiển thị sai

Giả sử email không hiển thị đúng các ký tự tiếng Đức (âm sắc)

Sau đó, bạn cần đặt Loại nội dung và Bộ ký tự trong tiêu đề của email

Chủ yếu, UTF-8 là lựa chọn tốt nhất của bạn

Sau đó, thêm tiêu đề sau


Giờ đây, bạn có thể sử dụng cả UTF-8 và Base64 để mã hóa chính xác dòng chủ đề hoặc tên người nhận nếu chúng yêu cầu các ký tự cụ thể

// Message
$message = '


  Review Request Reminder


  

Here are the cases requiring your review in December:

Case titleCategoryStatusDue date
Case 1DevelopmentpendingDec-20
Case 1DevOpspendingDec-21
';
0

Và đừng quên mã hóa Base64 cho thông điệp email

// Message
$message = '


  Review Request Reminder


  

Here are the cases requiring your review in December:

Case titleCategoryStatusDue date
Case 1DevelopmentpendingDec-20
Case 1DevOpspendingDec-21
';
1

Cấu hình Windows và Linux

Rắc rối có thể xảy ra nếu PHP của bạn không được cấu hình đúng trong php. tập tin ini.  

Đối với người dùng Windows, nó sẽ giống như thế này

// Message
$message = '


  Review Request Reminder


  

Here are the cases requiring your review in December:

Case titleCategoryStatusDue date
Case 1DevelopmentpendingDec-20
Case 1DevOpspendingDec-21
';
2

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ẽ giống như thế này

// Message
$message = '


  Review Request Reminder


  

Here are the cases requiring your review in December:

Case titleCategoryStatusDue date
Case 1DevelopmentpendingDec-20
Case 1DevOpspendingDec-21
';
3

Chức năng thư PHP không gửi email

Điều này có thể khá phức tạp. Tuy nhiên, đây là một vài điều bạn có thể làm để xử lý nó

  • Đảm bảo chức năng mail() của bạn được gọi đúng cách. (Nếu không đúng 1 trong 3 thông số sẽ gửi không thành công);
  • Kiểm tra cổng kết nối (Nếu bạn dùng chung máy chủ lưu trữ, cổng 25 và 587 vẫn bị chặn theo mặc định. Sau đó, bạn cần sử dụng cổng 2525);
  • Đảm bảo tất cả các tiêu đề được cung cấp và có cú pháp chính xác;
  • Kiểm tra xem thiết lập MTA/máy chủ web của bạn có đúng không. Bạn có thể sử dụng Mailtrap cho mục đích này

Dù sao, khắc phục sự cố và kiểm tra cần một số chú ý đặc biệt và phân tích chuyên sâu. Tại đây, bạn có thể tìm hiểu thêm về cách kiểm tra email gửi từ PHP

cân nhắc cuối cùng

Trong bài viết này, chúng tôi đã mô tả các nguyên tắc, cú pháp và tham số gửi email PHP cơ bản. Chúng tôi cũng đã xem xét các cách chính để gửi email bằng PHP. chức năng thư tích hợp của nó và các gói thư bên ngoài phổ biến nhất.  

Tuy nhiên, trong nhiều trường hợp, bạn có thể cân nhắc sử dụng tích hợp dịch vụ thư của bên thứ ba như Mailtrap để tiết kiệm thời gian, tiền bạc và công sức

Thư () trong PHP là gì?

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. thư (đến, chủ đề, tin nhắn, tiêu đề, tham số);

Công dụng của hàm mail() là gì?

Hàm mail() cho phép bạn gửi email trực tiếp từ tập lệnh .

Thư PHP () có an toàn không?

Có vẻ như bạn đang gửi E-mail khi một biểu mẫu được gửi. Đây là an toàn tuyệt đối ; . Do đó, $email_to = "email@email. com"; không thể thao tác từ chính biểu mẫu vì nó được mã hóa cứng vào PHP của bạn.

Hàm PHP nào được gọi để gửi thư?

Đây là những gì bạn có thể làm với hàm mail tích hợp trong PHP(). tạo tin nhắn văn bản/HTML đơn giản mà không cần tệp đính kèm và hình ảnh. gửi chúng cho một hoặc một số người nhận. bao gồm các tiêu đề bổ sung cho tin nhắn