Làm cách nào tôi có thể nhận email bằng php?

Một số ứng dụng PHP cần xử lý e-mail đến được gửi đến một địa chỉ nhất định và xử lý thư theo cách phù hợp với nhu cầu của ứng dụng

Chẳng hạn, nếu bạn muốn phát triển một ứng dụng CRM (Quản lý quan hệ khách hàng) đơn giản, thông thường nó cần nhận các tin nhắn do khách hàng gửi đến một địa chỉ nhất định và xử lý chúng bằng cách nào đó.

Một tập lệnh xử lý e-mail điển hình lưu trữ chi tiết thư trong cơ sở dữ liệu, do đó, thư có thể được đại diện bộ phận hỗ trợ khách hàng xử lý sau này

PHP có thể trợ giúp trong tình huống này bằng cách tự động nhận và thực hiện xử lý ban đầu các thư đến

Một cách để xử lý các thư đến là định cấu hình máy chủ thư cục bộ để bắt đầu tập lệnh PHP khi thư đến trên một hộp thư nhất định

Để đạt được điều này, bạn cần tìm hiểu chi tiết cụ thể về cách định cấu hình máy chủ thư của mình vì mỗi máy chủ thư hoạt động theo một cách khác nhau

Chẳng hạn, nếu bạn sử dụng máy chủ thư qmail, bạn cần thiết lập một. tệp qmail được liên kết với địa chỉ e-mail mà bạn muốn xử lý. Các. tệp qmail phải chứa lệnh sẽ được thực thi để bắt đầu tập lệnh PHP sẽ xử lý các thư đến

Chẳng hạn, nếu đường dẫn phiên bản PHP CLI (Giao diện dòng lệnh) là /usr/bin/php và đường dẫn của tập lệnh PHP sẽ xử lý thư là /home/crm/bin/request. php, các. tệp qmail phải có dòng này

/usr/bin/php /home/crm/bin/request.php
Dữ liệu tin nhắn đến được chuyển đến PHP thông qua đầu vào tiêu chuẩn. Do đó, bạn có thể đọc tin nhắn như thể đó là một tệp có tên php. //stdin , ví dụ như thế này.
$message = file_get_contents( 'php://stdin' );

Một giải pháp thay thế để xử lý các thông báo e-mail đã nhận bằng PHP là liên kết các địa chỉ đến với các hộp thư có thể truy cập bằng tập lệnh máy khách POP3 hoặc IMAP

Trong trường hợp này, các thư được nhận và lưu trữ bởi máy chủ thư, vì vậy chúng có thể được xử lý sau bởi các ứng dụng

Các tập lệnh PHP có thể sử dụng các lớp máy khách POP3 hoặc IMAP hiện có hoặc các tiện ích mở rộng để thường xuyên thăm dò máy chủ thư và truy xuất thư để thực hiện các tác vụ xử lý cần thiết

Để thực hiện cuộc thăm dò định kỳ này, bạn có thể sử dụng lệnh PHP CLI version để bắt đầu tập lệnh PHP bằng cách thêm tác vụ vào cron trên Linux và các hệ thống tương tự Unix khác hoặc bộ lập lịch tác vụ trên Windows

Tùy thuộc vào mức độ quan trọng của các thư đến, bạn có thể điều chỉnh tần suất thực hiện tập lệnh bỏ phiếu hộp thư

Chẳng hạn, nếu đường dẫn lệnh của phiên bản PHP CLI là /usr/bin/php và đường dẫn của tập lệnh sẽ xử lý thư cứ sau 5 phút là /home/crm/bin/request. php, bạn cần thêm một tác vụ cron bằng cách thêm một dòng như thế này vào crontab

5 * * * * /usr/bin/php /home/crm/bin/request.php
PHP có tiện ích mở rộng IMAP có thể truy cập hộp thư qua giao thức POP3 hoặc IMAP. Tuy nhiên, tiện ích mở rộng này không phải lúc nào cũng có sẵn trong tất cả các bản cài đặt PHP

Ngoài ra, lớp POP3 này luôn có thể được sử dụng bất kể tiện ích mở rộng IMAP có sẵn hay không

Lớp POP3 đi kèm với trình xử lý luồng cho phép bạn truy xuất tệp từ hộp thư, như thể thư là tệp thực. Chẳng hạn, bạn có thể lấy lại tin nhắn đầu tiên từ hộp thư như thế này

stream_wrapper_register( 'pop3', 'pop3_stream');
$message = file_get_contents(  'pop3://user:[email protected]/1'  );
"người dùng" là tên người dùng của tài khoản hộp thư và "mật khẩu" là mật khẩu tương ứng. "nhạc pop. máy chủ thư. com" là địa chỉ máy chủ thư

Nếu bạn muốn xử lý tin nhắn và xóa nó sau, điều mà bạn thường phải làm, thì bạn cần thực hiện một quy trình phức tạp hơn một chút được minh họa bằng mẫu mã sau. Điều này đảm bảo rằng các tin nhắn được liệt kê, truy xuất và xóa an toàn trong cùng một kết nối POP3

/* Set connection options */
$pop3 = new pop3_class;
$pop3->hostname = "pop.mailserver.com";
$pop3->port = 110;
$user = "mailbox_account";
$password = "mailbox_password";
$apop = 0;
/* Connect to the server */
if(($error = $pop3->Open())=="")
{
/* Authenticate */
if(($error = $pop3->Login($user, $password, $apop))=="")
{
/* Setup a file name of a message to be retrieved
* on an already opened POP3 connection */
$pop3->GetConnectionName($connection_name);
$message=1;
$message_file='pop3://'. $connection_name. '/'. $message;
/* Do your message processing here */
$message = file_get_contents($message_file);
/* If all goes well, delete the processed message */
$pop3->DeleteMessage($message);
}
/* Close the connection before you exit */
$pop3->Close();
}

Thông điệp email có thể có cấu trúc phức tạp không dễ phân tích cú pháp. Điều này đặc biệt đúng khi bạn cần trích xuất các chi tiết phức tạp từ thư như chủ đề được mã hóa hoặc tên và địa chỉ người gửi, trích xuất tệp đính kèm, xử lý thư có văn bản thay thế hoặc các phần HTML, hình ảnh hoặc CSS được nhúng, v.v.

Giải pháp tốt nhất để xử lý sự phức tạp của các vấn đề phân tích cú pháp e-mail là sử dụng các thành phần phân tích cú pháp e-mail hiện có, ví dụ như lớp trình phân tích cú pháp MIME. Nó sẵn sàng phân tích các tin nhắn bằng cách chuyển tên tệp tin nhắn

Lớp trình phân tích cú pháp MIME Email PHP có rất nhiều ví dụ và tài liệu mà bạn có thể đọc để dễ dàng tìm hiểu cách sử dụng nó để phân tích cú pháp các thư mà ứng dụng của bạn cần xử lý

Một trong những cách sử dụng phổ biến nhất của trình phân tích cú pháp MIME PHP với lớp ứng dụng khách e-mail POP3 là trích xuất phần HTML của thư, để chúng có thể được hiển thị cho người dùng trên các trang Web

Giả sử rằng bạn đã đưa toàn bộ nội dung của tin nhắn vào biến $message, bạn có thể trích xuất HTML từ một tin nhắn bằng cách sử dụng mã tương tự như sau

Hãy nhớ rằng HTML được gửi trong thư có thể chứa mã JavaScript độc hại có thể được sử dụng để đánh cắp cookie và các vấn đề bảo mật khác

Sẽ an toàn hơn khi cùng với mã này, bạn cũng sử dụng một gói khác để phân tích cú pháp và lọc mã HTML không an toàn một cách an toàn trước khi bạn hiển thị mã đó cho người dùng trang web của mình. Đọc bài viết khác này để tìm hiểu cách xử lý và hiển thị HTML một cách an toàn khi nó đến từ các nguồn không an toàn, chẳng hạn như thư email

  // Parse message data
  $mime=new mime_parser_class;
  $parameters=array(
    'Data'=>$message,
  );
  if(!$mime->Decode($parameters, $decoded))
  {
    // Process parsing error
  }
  else
  {
    // Analyse the parser results to determine what kind of message is this
    if($mime->Analyze($decoded[0], $results))
    {
      // Is this a message of HTML type?
      if($results["Type"] === "html")
      {
        // Output message HTML body
        echo $results["Data"];
      }
    }
    else
      echo 'MIME message analyse error: '.$mime->error."\n";
  }

Trước khi bạn quyết định phương pháp nào là tốt nhất, bạn cần hiểu rằng mỗi phương pháp đều có ưu điểm và nhược điểm. Hãy để tôi đưa ra một cái nhìn tổng quan về các chi tiết quan trọng nhất

Xử lý ngay lập tức các tin nhắn được chuyển bởi máy chủ thư

a) Các tin nhắn được xử lý ngay lập tức khi chúng được nhận bởi máy chủ thư

b) Nếu tập lệnh xử lý tin nhắn của bạn bị lỗi vì lý do nào đó, bạn sẽ mất tin nhắn. Do đó, nó không được khuyến nghị cho các ứng dụng mà thông báo nhận được là quan trọng

c) Tập lệnh xử lý thư phải chạy trên cùng một máy với máy chủ thư

d) Lập kịch bản xử lý thư là công việc phụ thuộc vào loại máy chủ thư

Xử lý thư thăm dò máy chủ POP3 hoặc IMAP

a) Máy chủ thư phải được thăm dò thường xuyên, do đó có thể có sự chậm trễ trong việc xử lý thư nếu việc thăm dò không đủ thường xuyên

b) Nếu quá trình xử lý tin nhắn mất nhiều thời gian, bạn cần lưu ý để không bắt đầu xử lý một tin nhắn trước khi tin nhắn trước đó được xử lý. Máy chủ POP3 khóa hộp thư trong khi kết nối với máy chủ không bị đóng

c) Tập lệnh xử lý thư có thể thăm dò một máy chủ đang chạy trên một máy khác

d) Truy cập thư trong hộp thư qua POP3 hoặc IMAP không phụ thuộc vào nền tảng PHP đang chạy trên đó

Bạn có thể tìm thêm thông tin về cách truy cập và xử lý thư được gửi trong hộp thư POP3 bằng cách xem tập lệnh mẫu và tài liệu có sẵn với các lớp được mô tả

Bạn có thể tải xuống kho lưu trữ ZIP lớp PHP POP3 hoặc cài đặt nó bằng công cụ soạn thảo với hướng dẫn từ trang cài đặt

Tại sao tôi không nhận được thư PHP?

Nếu thư php không đến được hộp thư đến của người nhận, cuộc điều tra có thể bắt đầu bằng cách kiểm tra thư mục thư rác . Nếu thư php chuyển thành thư rác, có thể cần phải cập nhật bộ lọc thư rác của người nhận, chẳng hạn như đưa địa chỉ người gửi vào danh sách trắng.

Làm cách nào để đọc nội dung email trong PHP?

Giống như nhiều tính năng trong PHP, bạn bắt đầu bằng cách mở kết nối và lấy một tay cầm. $mail = imap_open('{mail. người phục vụ. com. 143}', 'tên người dùng', 'mật khẩu'); . người phục vụ. com trên cổng 143. Nó cũng chuyển tên người dùng và mật khẩu làm đối số thứ hai và thứ ba

Có thể sử dụng PHP để gửi email không?

Sử dụng hàm PHP mail(). Hàm mail() tích hợp sẵn của PHP là một trong những cách đơn giản nhất để gửi email trực tiếp từ chính máy chủ web . Nó chỉ cần ba tham số bắt buộc. địa chỉ email, chủ đề email và nội dung thư—và gửi nó đến người nhận.

Làm cách nào để kết nối Gmail trong PHP?

Do đó, để kết nối với Gmail IMAP bằng các hàm PHP IMAP, bạn sẽ làm điều này. $server = '{imap. gmail. com. 993/ssl}'; . IMAP hỗ trợ khái niệm nhiều hộp thư. Note that your login name for Gmail includes the domain name as well. IMAP supports the concept of multiple mailboxes.