php-imap을 사용하여 이메일 받은 편지함을 쿼리하고 작동하는 방법에 대한 자세한 설명

藏色散人
풀어 주다: 2023-04-10 08:36:02
앞으로
4946명이 탐색했습니다.

이 글에서는 php-imap을 사용하여 이메일 받은 편지함을 쿼리하고 조작하는 방법을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

최근 비즈니스 시나리오에서 사용자가 적극적으로 보낸 이메일을 수신하고 분석하여 이러한 요구 사항을 실현하고 기록했습니다.

구현 방법 결정

이메일 읽기에는 POP3IMAP의 두 가지 프로토콜이 있습니다. 차이점: POP3 프로토콜은 이메일을 허용합니다. 클라이언트 클라이언트는 서버에서 이메일을 다운로드하지만 클라이언트의 작업은 서버에 피드백되지 않습니다. IMAP는 웹메일과 이메일 클라이언트 간의 양방향 통신을 제공합니다. 클라이언트의 작업은 서버의 이메일에서도 해당 작업을 수행합니다. POP3IMAP两种,区别:POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作,不会反馈到服务器上。IMAP提供webmail与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

需求要求处理完用户的邮件以后,将邮件标记为已处理,因此选用IMAP协议。

安装依赖

本地、服务器php均需要安装imap扩展。在项目的composer.json

요구사항에 따르면 사용자의 이메일을 처리한 후 이메일이 처리된 것으로 표시되어야 하므로 IMAP 프로토콜이 선택됩니다.

설치 종속성

로컬 및 서버 PHP 모두 imap 확장을 설치해야 합니다. 다음과 같이 프로젝트의 composer.json에 php-imap(https://github.com/barbushin/php-imap) 확장을 추가합니다.

"require": {
  "php-imap/php-imap": "^3.1",
},
로그인 후 복사

Configure 관련 서비스

namespace app\library\service\mail;

use PhpImap\Exceptions\ConnectionException;
use PhpImap\Mailbox;

/**
 * 收邮件服务邮件API接口
 * Class PlayService
 * @package app\library\service
 */
class ImapService
{
    public $path = '{imap.263.net:993/imap/ssl}INBOX';   // IMAP server and mailbox folder
    public $login = 'user@263.cn';         // Username for the before configured mailbox
    public $password = 'pwd';                   // Password for the before configured username
    public $dir = null;        // Directory, where attachments will be saved (optional)
    public $encoding = 'UTF-8';   // Server encoding (optional)

    public $mailbox;

    public function __construct()
    {
        $this->mailbox = new Mailbox(
            $this->path,
            $this->login,
            $this->password,
            $this->dir,
            $this->encoding
        );
    }
로그인 후 복사

읽지 않은 모든 이메일 가져오기 List
public function unSeenList()
{
    try {
        $mail_ids = $this->mailbox->searchMailbox('UNSEEN');
    } catch (ConnectionException $ex) {
        die('IMAP connection failed: ' . $ex->getMessage());
    } catch (\Exception $ex) {
        die('An error occured: ' . $ex->getMessage());
    }

    // If $mailsIds is empty, no emails could be found
    if (!$mail_ids) {
        die('Mailbox is empty');
    }

    try {
        $info = $this->mailbox->getMailsInfo($mail_ids);
    } catch (ConnectionException $ex) {
        echo "IMAP connection failed: " . $ex;
        die();
    }
    return ['ids' => $mail_ids, 'list' => $info];
}
로그인 후 복사

특정 이메일을 읽음으로 표시

특정 주제의 이메일을 검색하여 읽음으로 표시

$imap = new ImapService();
$condition = 'UNSEEN  SUBJECT "' . $title . '" SINCE "' . date('Y-m-d', strtotime('-1 days')) . '" FROM ' . $mail;
$data['mail'] = $imap->mailbox->searchMailbox($condition);
if (!empty($data['mail'])) {
    $data['info'] = $imap->mailbox->getMailsInfo($data['mail']);
    if ($params['mark'] == 1) {
        $data['mark'] = $imap->markRead(array_column($data['info'], 'uid'));
    }
}
로그인 후 복사
🎜🎜권장 학습: "🎜PHP 비디오 튜토리얼🎜"🎜

위 내용은 php-imap을 사용하여 이메일 받은 편지함을 쿼리하고 작동하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿