是否有php imap扩展的替代方案

时间:2012-11-20 22:13:59

标签: php imap

我的godaddy共享主管服务不会启用PHP的IMAP扩展。所以我在泡菜中:

是否有PHP函数替换PHP中的IMAP功能?

这是错误:

Fatal error: Call to undefined function imap_last_error()

以下是我遇到问题的示例代码:

$mbox = imap_open ('{'.$email_host.':'.$email_port.'/pop3/novalidate-cert}INBOX', $email_username, $email_password) or die(imap_last_error());



        if(!$mbox){
            // send email letting them know bounce checking failed?
            // meh. later.
            echo 'Failed to connect when checking bounces.';
        }else{
            $MC = imap_check($mbox);
            $result = imap_fetch_overview($mbox,"1:{$MC->Nmsgs}",0);
            foreach ($result as $overview) {
                $this_subject = (string)$overview->subject;
                //echo "#{$overview->msgno} ({$overview->date}) - From: {$overview->from} <br> {$this_subject} <br>\n";
                $tmp_file = tempnam('/tmp/','newsletter_bounce');
                // TODO - tmp files for windows hosting.
                imap_savebody  ($mbox, $tmp_file, $overview->msgno);
                $body = file_get_contents($tmp_file);
                if(preg_match('/Message-ID:\s*<?Newsletter-(\d+)-(\d+)-([A-Fa-f0-9]{32})/imsU',$body,$matches)){
                    // we have a newsletter message id, check the hash and mark a bounce.
                    //"message_id" => "Newsletter-$send_id-$member_id-".md5("bounce check for $member_id in send $send_id"),
                    $send_id = (int)$matches[1];
                    $member_id = (int)$matches[2];
                    $provided_hash = trim($matches[3]);
                    $real_hash = md5("bounce check for $member_id in send $send_id");
                    if($provided_hash == $real_hash){
                        $sql = "UPDATE "._DB_PREFIX."newsletter_member SET `status` = 4, bounce_time = '".time()."' WHERE `member_id` = '".$member_id."' AND send_id = '".$send_id."' AND `status` = 3 LIMIT 1";
                        query($sql);
                        imap_delete($mbox, $overview->msgno);
                    }else{
                        // bad hash, report.
                    }
                }
                unlink($tmp_file);
            }
            imap_expunge($mbox);
            imap_close($mbox);
        }

    }

提前致谢!!

2 个答案:

答案 0 :(得分:3)

没有PECL替代imap扩展。如果你敢,你可以用PHP编写一个,但这样做会非常无效。替代方法是(假设他们不受客户的要求)将“GoDaddy”变成“GoAwayDaddy”,并将ISP更改为不阻止这一点的人,相当基本的扩展。

答案 1 :(得分:3)

这个适用于godaddy共享主机:        http://www.phpclasses.org/package/4014-PHP-Retrieve-and-delete-messages-from-a-POP3-mailbox.html

这个也适用:http://framework.zend.com/manual/1.12/en/zend.mail.html

function __autoload($class_name) {
include $class_name . '.php';
}
 include_once 'Zend/Mail/Storage/AbstractStorage.php';
include_once 'Zend/Mail/Storage/Pop3.php';
$mail = new Zend\Mail\Storage\Pop3(array('host'     => '$host',
                                     'user'     => '$user',
                                     'password' => '$password'));

echo $mail->countMessages() . " messages found\n";
foreach ($mail as $message) {
   echo "Mail from '{$message->from}': {$message->subject}\n</br>";
   echo $message->getContent() . "</br>";
}