POP3からメールを取得しようとしています(POP3メールサーバーを使用しており、メールコンテンツを取得してプロジェクトのデータベーステーブルに保存しようとしています)。ただし、PHPスクリプト、すべてIMAP専用です。
POP3サーバーからメールを取得する方法を知っていますか?
ありがとう。
意外なことに、 PHPのimapライブラリ はPOP3メールボックスの操作にも使用できます。もちろん、高度なIMAP機能(フォルダーやメッセージパーツの取得など)のほとんどは機能しませんが、基本的なPOP3機能は実装されています。
主な違いは、そのページを引用するために imap_open -に渡すオプション文字列です。
// To connect to a POP3 server on port 110 on the local server, use:
$mbox = imap_open ("{localhost:110/pop3}INBOX", "user_id", "password");
それ以外は、フェアセーリングです-基本的なPOP3アクセスには、imap_open、imap_num_msg、imap_body、imap_delete、imap_close以外は必要ありません。
PHPのIMAP関数 は、IMAPボックスとPOP3ボックスの両方を処理できます。
これらの機能により、IMAPプロトコル、およびNNTP、POP3、ローカルメールボックスのアクセス方法を操作できます。
ただし、一部のIMAP機能はPOPプロトコルでは正しく機能しないことに注意してください。
興味深いスニペットを提供する ser Contributed Note があります。あなたはそれを見てみたいかもしれません。その品質については何も言えませんが、表面的には大丈夫です。
以下、寄稿者注:
ここに来るすべての人々のために:
1)MIME添付ファイルを非常に簡単に読み取る方法、または
2)POP3フォルダーにアクセスする非常に簡単な方法
これ以上探さない。
function pop3_login($Host,$port,$user,$pass,$folder="INBOX",$ssl=false)
{
$ssl=($ssl==false)?"/novalidate-cert":"";
return (imap_open("{"."$Host:$port/pop3$ssl"."}$folder",$user,$pass));
}
function pop3_stat($connection)
{
$check = imap_mailboxmsginfo($connection);
return ((array)$check);
}
function pop3_list($connection,$message="")
{
if ($message)
{
$range=$message;
} else {
$MC = imap_check($connection);
$range = "1:".$MC->Nmsgs;
}
$response = imap_fetch_overview($connection,$range);
foreach ($response as $msg) $result[$msg->msgno]=(array)$msg;
return $result;
}
function pop3_retr($connection,$message)
{
return(imap_fetchheader($connection,$message,FT_PREFETCHTEXT));
}
function pop3_dele($connection,$message)
{
return(imap_delete($connection,$message));
}
function mail_parse_headers($headers)
{
$headers=preg_replace('/\r\n\s+/m', '',$headers);
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)?\r\n/m', $headers, $matches);
foreach ($matches[1] as $key =>$value) $result[$value]=$matches[2][$key];
return($result);
}
function mail_mime_to_array($imap,$mid,$parse_headers=false)
{
$mail = imap_fetchstructure($imap,$mid);
$mail = mail_get_parts($imap,$mid,$mail,0);
if ($parse_headers) $mail[0]["parsed"]=mail_parse_headers($mail[0]["data"]);
return($mail);
}
function mail_get_parts($imap,$mid,$part,$prefix)
{
$attachments=array();
$attachments[$prefix]=mail_decode_part($imap,$mid,$part,$prefix);
if (isset($part->parts)) // multipart
{
$prefix = ($prefix == "0")?"":"$prefix.";
foreach ($part->parts as $number=>$subpart)
$attachments=array_merge($attachments, mail_get_parts($imap,$mid,$subpart,$prefix.($number+1)));
}
return $attachments;
}
function mail_decode_part($connection,$message_number,$part,$prefix)
{
$attachment = array();
if($part->ifdparameters) {
foreach($part->dparameters as $object) {
$attachment[strtolower($object->attribute)]=$object->value;
if(strtolower($object->attribute) == 'filename') {
$attachment['is_attachment'] = true;
$attachment['filename'] = $object->value;
}
}
}
if($part->ifparameters) {
foreach($part->parameters as $object) {
$attachment[strtolower($object->attribute)]=$object->value;
if(strtolower($object->attribute) == 'name') {
$attachment['is_attachment'] = true;
$attachment['name'] = $object->value;
}
}
}
$attachment['data'] = imap_fetchbody($connection, $message_number, $prefix);
if($part->encoding == 3) { // 3 = BASE64
$attachment['data'] = base64_decode($attachment['data']);
}
elseif($part->encoding == 4) { // 4 = QUOTED-PRINTABLE
$attachment['data'] = quoted_printable_decode($attachment['data']);
}
return($attachment);
}
pOP3プロトコルを使用して電子メールメールボックスにアクセスできるpop3電子メールクライアントクラスを使用できます。各電子メール本文部分を取得し、データベースに保存できます。受信ボックス内の元のメールを削除せずに添付ファイルを取得することもできます。詳細については http://www.phpclasses.org/package/2-PHP-Access-to-e-mail-mailboxes-using-the-POP3-protocol.html
PHP IMAPサポート付きでビルドする場合は、簡単です。IMAPのドキュメント(特にこのページのコメント)を参照してください http://php.net/manual/en/ book.imap.php
更新:私の答えを明確にするために-あなたがコメントと関数リファレンスで見るように、PHP imap_ *関数はpop3にも使用できます。