Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there an alternative to php imap extension

Tags:

php

imap

My godaddy shared hosing service will not enable the IMAP extension for PHP. So I am in a pickle:

Is there a PHP function to replace the IMAP feature in PHP ?

Here is the error:

Fatal error: Call to undefined function imap_last_error()

Here is the sample code that I am having problems with:

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

    }

Thanks in advance!!

like image 495
eberswine Avatar asked Oct 20 '25 12:10

eberswine


1 Answers

There's no PECL replacement for imap extension. If you dare, you can write one in PHP but that would be quite ineffective though. Alternative approach would be (assuming they are immune to customer's requests) to turn "GoDaddy" into "GoAwayDaddy" and change ISP to one who do not block this, quite elementary extension.

like image 118
Marcin Orlowski Avatar answered Oct 22 '25 01:10

Marcin Orlowski