수색…
IMAP 확장 프로그램 설치
PHP에서 IMAP 함수 를 사용하려면 IMAP 확장을 설치해야합니다.
데비안 / 우분투 PHP5
sudo apt-get install php5-imap
sudo php5enmod imap
데비안 / 우분투 PHP7
sudo apt-get install php7.0-imap
YUM 기반 배포판
sudo yum install php-imap
Mac OS X (php5.6 포함)
brew reinstall php56 --with-imap
사서함에 연결
IMAP 계정으로 무엇이든하려면 먼저 연결해야합니다. 이렇게하려면 몇 가지 필수 매개 변수를 지정해야합니다.
- 메일 서버의 서버 이름 또는 IP 주소
- 연결하려는 포트
- IMAP은 143 또는 993 (보안)입니다.
- POP는 110 또는 995 (보안)입니다.
- SMTP는 25 또는 465 (보안)입니다.
- NNTP는 119 또는 563 (보안)입니다.
- 연결 플래그 (아래 참조)
깃발 | 기술 | 옵션 | 태만 |
---|---|---|---|
/service=service | 사용할 서비스 | imap, pop3, nntp, smtp | 잠잠하다 |
/user=user | 서버 로그인을위한 원격 사용자 이름 | ||
/authuser=user | 원격 인증 사용자; 지정된 경우이 암호가 사용되는 사용자 이름 (예 : administrator) | ||
/anonymous | 익명 사용자로의 원격 액세스 | ||
/debug | 애플리케이션의 디버그 로그에 프로토콜 원격 측정 기록 | 장애인 | |
/secure | 네트워크를 통해 일반 텍스트 암호를 전송하지 않는다. | ||
/norsh | rsh 또는 ssh를 사용하여 사전 인증 된 IMAP 세션을 설정하지 마십시오. | ||
/ssl | Secure Socket Layer를 사용하여 세션을 암호화하십시오. | ||
/validate-cert | TLS / SSL 서버의 인증서 | 사용 가능 | |
/novalidate-cert | 서버가 자체 서명 된 인증서를 사용하는 경우 TLS / SSL 서버에서 인증서의 유효성을 검사하지 않습니다. 주의와 함께 사용하십시오 | 장애인 | |
/tls | 세션을 암호화하기 위해 start-TLS를 강제로 사용하고이를 지원하지 않는 서버에 대한 연결을 거부하십시오. | ||
/notls | 세션을 암호화하는 시작 TLS를 지원하지 않는 서버도 지원합니다. | ||
/readonly | 요청 읽기 전용 사서함 열기 (IMAP 전용, NNTP에서는 무시, SMTP 및 POP3에서는 오류) |
연결 문자열은 다음과 같습니다.
{imap.example.com:993/imap/tls/secure}
연결 문자열의 문자가 ASCII가 아닌 경우 utf7_encode ($ string) 로 인코딩해야합니다.
메일 박스에 연결하기 위해 우리는 스트림을 가리키는 자원 값을 반환하는 imap_open 명령을 사용합니다 :
<?php
$mailbox = imap_open("{imap.example.com:993/imap/tls/secure}", "username", "password");
if ($mailbox === false) {
echo "Failed to connect to server";
}
사서함의 모든 폴더 나열
사서함에 연결하면 내부를 살펴볼 수 있습니다. 첫 번째 유용한 명령은 imap_list 입니다. 첫 번째 매개 변수는 imap_open
에서 얻은 리소스이고 두 번째 매개 변수는 사서함 문자열이며 세 번째 매개 변수는 퍼지 검색 문자열입니다 ( *
는 모든 패턴과 일치시키는 데 사용됩니다).
$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*");
if ($folders === false) {
echo "Failed to list folders in mailbox";
} else {
print_r($folders);
}
출력은 다음과 유사해야합니다.
Array
(
[0] => {imap.example.com:993/imap/tls/secure}INBOX
[1] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
[2] => {imap.example.com:993/imap/tls/secure}INBOX.Drafts
[3] => {imap.example.com:993/imap/tls/secure}INBOX.Junk
[4] => {imap.example.com:993/imap/tls/secure}INBOX.Trash
)
세 번째 매개 변수를 사용하여 다음과 같은 결과를 필터링 할 수 있습니다.
$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*.Sent");
이제 결과에는 이름에 .Sent
가 포함 된 항목 만 포함됩니다.
Array
(
[0] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
)
참고 : *
를 퍼지 검색으로 사용하면 모든 일치가 반복적으로 반환됩니다. %
를 사용하면 지정한 현재 폴더의 일치 항목 만 반환됩니다.
사서함에서 메시지 찾기
imap_headers를 사용하여 메일함에있는 모든 메일 목록을 반환 할 수 있습니다.
<?php
$headers = imap_headers($mailbox);
결과는 다음과 같은 패턴의 문자열 배열입니다.
[FLAG] [MESSAGE-ID])[DD-MM-YYY] [FROM ADDRESS] [SUBJECT TRUNCATED TO 25 CHAR] ([SIZE] chars)
다음은 각 행의 모양을 보여주는 샘플입니다.
A 1)19-Aug-2016 [email protected] Message Subject (1728 chars)
D 2)19-Aug-2016 [email protected] RE: Message Subject (22840 chars)
U 3)19-Aug-2016 [email protected] RE: RE: Message Subject (1876 chars)
N 4)19-Aug-2016 [email protected] RE: RE: RE: Message Subje (1741 chars)
상징 | 깃발 | 의미 |
---|---|---|
에이 | 답변 됨 | 메시지에 답장을 보냈습니다. |
디 | 삭제됨 | 메시지가 삭제되었지만 삭제되지는 않았습니다. |
에프 | 신고 됨 | 주의를 끌기 위해 메시지에 플래그가 지정되거나 쳐다 보입니다. |
엔 | 새로운 | 메시지가 새롭고 보이지 않았습니다. |
아르 자형 | 충적세 | 메시지가 새롭고 보였습니다. |
유 | 읽히지 않는 | 메시지를 읽지 못했습니다. |
엑스 | 초안 | 메시지가 초안입니다. |
이 호출은 실행하는 데 상당한 시간이 걸릴 수 있으며 매우 큰 목록을 반환 할 수 있습니다.
또 다른 방법은 필요에 따라 개별 메시지를로드하는 것입니다. 귀하의 이메일에는 각각 1 (가장 오래된 것)에서 imap_num_msg($mailbox)
까지의 ID가 할당됩니다.
전자 메일에 직접 액세스하는 데는 여러 가지 기능이 있지만 가장 간단한 방법은 구조화 된 헤더 정보를 반환하는 imap_header
를 사용하는 것입니다.
<?php
$header = imap_headerinfo($mailbox , 1);
stdClass Object
(
[date] => Wed, 19 Oct 2011 17:34:52 +0000
[subject] => Message Subject
[message_id] => <04b80ceedac8e74$51a8d50dd$0206600a@user1687763490>
[references] => <[email protected]>
[toaddress] => Some One Else <[email protected]>
[to] => Array
(
[0] => stdClass Object
(
[personal] => Some One Else
[mailbox] => someonelse
[host] => example.com
)
)
[fromaddress] => Some One <[email protected]>
[from] => Array
(
[0] => stdClass Object
(
[personal] => Some One
[mailbox] => someone
[host] => example.com
)
)
[reply_toaddress] => Some One <[email protected]>
[reply_to] => Array
(
[0] => stdClass Object
(
[personal] => Some One
[mailbox] => someone
[host] => example.com
)
)
[senderaddress] => Some One <[email protected]>
[sender] => Array
(
[0] => stdClass Object
(
[personal] => Some One
[mailbox] => someone
[host] => example.com
)
)
[Recent] =>
[Unseen] =>
[Flagged] =>
[Answered] =>
[Deleted] =>
[Draft] =>
[Msgno] => 1
[MailDate] => 19-Oct-2011 17:34:48 +0000
[Size] => 1728
[udate] => 1319038488
)