3

私のgodaddy共有ホスティングサービスは、PHPのIMAP拡張機能を有効にしません. だから私はピクルスにいます:

PHP の IMAP 機能を置き換える PHP 関数はありますか?

エラーは次のとおりです。

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);
        }

    }

前もって感謝します!!

4

2 に答える 2

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>";
}
于 2013-06-23T17:30:24.330 に答える
3

imap 拡張機能に代わる PECL はありません。勇気があれば、PHP で書くこともできますが、それは非常に効果的ではありません。別のアプローチは (顧客の要求に影響されないと仮定して) "GoDaddy" を "GoAwayDaddy" に変え、ISP をこれをブロックしないものに変更することです。

于 2012-11-21T00:10:16.793 に答える