我正在尝试从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协议一起正常使用。
有一个用户提供的注释,其中提供了一个有趣的代码段。您可能想看看它。我不能说它的质量,但从表面上看,还不错。
下面是贡献的注释:
对于所有来这里祈祷的人们:
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
如果您具有支持IMAP的PHP版本,那将很容易,请参阅http://php.net/manual/zh/book.imap.php上的IMAP文档(尤其是此页面上的注释)。
更新:澄清我的答案-如您在注释和函数参考中所见,PHP imap_ *函数也可用于pop3。
文章标签:php , pop3
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!
评论已关闭!