Cấu hình gửi mail PHP

Trong một số điều kiện nhất định, chúng tôi có thể được yêu cầu gửi email bằng PHP từ hệ thống Windows mà không cần cài đặt máy chủ email. Chúng tôi có thể làm như vậy bằng cách cài đặt và định cấu hình Sendmail trên Windows. Hướng dẫn này cung cấp tất cả các bước cần thiết để cài đặt và định cấu hình Sendmail trên Windows để gửi email bằng PHP

Cài đặt và cấu hình Sendmail

Tải xuống Sendmail từ trang web chính thức

Bây giờ giải nén zip đã tải xuống vào vị trí thích hợp và mở sendmail. ini để cấu hình máy chủ email như hình bên dưới

;Configure Sendmail

[sendmail]
...
smtp_server=
...
smtp_port=
...
auth_username=
...
auth_password=

Một ví dụ để cấu hình Gmail như hình bên dưới

[sendmail]
...
smtp_server=ssl://smtp.gmail.com
...
smtp_port=465
...
[email protected]
...
auth_password=password

;OR

[sendmail]
...
smtp_server=tls://smtp.gmail.com
...
smtp_port=587
...
[email protected]
...
auth_password=password

Bây giờ hãy lưu tệp và đóng tệp để áp dụng các thay đổi. Các cài đặt có thể khác nhau dựa trên máy chủ email hoặc nhà cung cấp dịch vụ

Định cấu hình PHP

Trong trường hợp bạn đang sử dụng cổng bảo mật 587 hoặc 465, bạn có thể gặp lỗi trong trường hợp mô-đun OpenSSL không được bật cho PHP. Nó có thể được thực hiện trên Windows bằng cách làm theo Cách định cấu hình Mô-đun OpenSSL PHP trên Windows

Để định cấu hình PHP, hãy mở tệp php. ini và cập nhật nó như hình bên dưới

;SMTP = localhost;
;smtp_port = 25;

...
...

;auth_username = ;
;auth_password = ;

...
...

;sendmail_from = [email protected]

...
...

sendmail_path = C:\sendmail\sendmail.exe

Gửi email

Ở bước này chúng ta sẽ viết chương trình gửi email sử dụng các cấu hình đã thực hiện ở bước trước. Viết chương trình PHP để gửi email như hình bên dưới

$from = "[email protected]";
$to = "[email protected]";
$subject = "Hello Sendmail";
$message = "This is an test email to test Sendmail. Please do not block my account.";
$headers = [ "From: $from" ];

mail( $to, $subject, $message, implode( '\r\n', $headers ) );
// OR - PHP 7.2.0 or greater
//mail( $to, $subject, $message, $headers );

Ngoài ra, hãy kiểm tra lỗi. log trong thư mục Sendmail để kiểm tra lỗi. Nó cũng có thể tạo ra một vụ tai nạn. txt trong trường hợp có bất kỳ lỗi nào

Tóm lược

Trong hướng dẫn này, chúng tôi đã cài đặt Sendmail trên Windows và cấu hình nó để gửi email bằng chương trình PHP

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. ”

Cấu hình gửi mail PHP

Đ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[] = ‘Kiểu 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

________số 8

để đặ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 phân phối Mailtrap có thể được cho 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 với PHP, có lẽ bạn nên xem xét Mailtrap Email API. Đó là Email API/Chuyển tiếp 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.  

Cấu hình gửi mail PHP

Một ưu điểm khác của API email 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 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

Cấu hình gửi mail PHP

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

[sendmail]
...
smtp_server=ssl://smtp.gmail.com
...
smtp_port=465
...
[email protected]
...
auth_password=password

;OR

[sendmail]
...
smtp_server=tls://smtp.gmail.com
...
smtp_port=587
...
[email protected]
...
auth_password=password
0

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)

[sendmail]
...
smtp_server=ssl://smtp.gmail.com
...
smtp_port=465
...
[email protected]
...
auth_password=password

;OR

[sendmail]
...
smtp_server=tls://smtp.gmail.com
...
smtp_port=587
...
[email protected]
...
auth_password=password
1

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

[sendmail]
...
smtp_server=ssl://smtp.gmail.com
...
smtp_port=465
...
[email protected]
...
auth_password=password

;OR

[sendmail]
...
smtp_server=tls://smtp.gmail.com
...
smtp_port=587
...
[email protected]
...
auth_password=password
2

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

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

[sendmail]
...
smtp_server=ssl://smtp.gmail.com
...
smtp_port=465
...
[email protected]
...
auth_password=password

;OR

[sendmail]
...
smtp_server=tls://smtp.gmail.com
...
smtp_port=587
...
[email protected]
...
auth_password=password
3

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

Cấu hình SMTP trong PHP như thế nào?

Viết mã PHP để gửi email bằng Gmail SMTP .
Bước 1. Tải xuống thư viện PHPMailer từ liên kết github này. .
Bước 2. Viết mã PHP để tạo kết nối SMTP. .
Bước 3. Bao gồm các gói và tệp cho giao thức PHPMailer và SMTP. .
Bước 4. Khởi tạo PHP Mailer và đặt SMTP làm giao thức gửi thư

Làm cách nào để gửi email bằng tập lệnh PHP?

$mail = PHPMailer mới(true); . gmail. com'; . com';

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

PHPMailer là một thư viện mã và được sử dụng để gửi email một cách an toàn và dễ dàng thông qua mã PHP từ máy chủ web. .
isHTML(). Nếu được thông qua đúng, hãy đặt định dạng email thành HTML
Môn học. Đặt chủ đề của Thư
Cơ thể người. Đặt nội dung của Thư
AltBody. Nội dung thay thế trong trường hợp ứng dụng e-mail không hỗ trợ HTML

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

Gửi email HTML bằng PHP .
Sử dụng hàm PHP mail() và cung cấp các tham số cần thiết. to – Địa chỉ email người nhận. .
Tiêu đề kiểu nội dung là bắt buộc để gửi email có định dạng HTML
Các tiêu đề bổ sung được sử dụng để thêm Từ, Cc, Bcc, v.v.
Biến $htmlContent chứa nội dung HTML của email