Showing posts with label Download gmail attachment in PHP. Show all posts
Showing posts with label Download gmail attachment in PHP. Show all posts

Wednesday, July 21, 2010

Download gmail attachment in PHP

Download gmail attachment in PHP

If you want to download gmail attachment by PHP code?,  then here is the code that will do it.
just copy and paste the entire code and run it.



<?php
class ImapMail
{
    var $dirPath,$deleteEmails=false;
    var $imapInBox;
    function __construct($mailHost,$emailLogin,$pass) {
        $this->imapInBox=imap_open($mailHost,$emailLogin,$pass) or die("Unable to connect:".imap_last_error());
    }
    function getdecodevalue($msg,$bodyType) {
        if($bodyType==0 || $bodyType==1) {
            $msg = imap_base64($msg);
        }
        if($bodyType==2) {
            $msg = imap_binary($msg);
        }
        if($bodyType==3 || $bodyType==5) {
            $msg = imap_base64($msg);
        }
        if($bodyType==4) {
            $msg = imap_qprint($msg);
        }
        return $msg;
    }

    function downLoadAttachment($dirPath,$deleteEmails=false) {
        $nAttachment = 0;
        $dirPath = str_replace('\\', '/', $dirPath);
        if (substr($dirPath, strlen($dirPath) - 1) != '/') {
            $dirPath .= '/';
        }
        $message = array();
        $message["attachment"]["type"][0] = "text";
        $message["attachment"]["type"][1] = "multipart";
        $message["attachment"]["type"][2] = "message";
        $message["attachment"]["type"][3] = "application";
        $message["attachment"]["type"][4] = "audio";
        $message["attachment"]["type"][5] = "image";
        $message["attachment"]["type"][6] = "video";
        $message["attachment"]["type"][7] = "other";
       
        $nEmails = imap_search($this->imapInBox, 'ALL', SE_UID);
        $j=-1;
        for ($j = 0; $j < count($nEmails); $j++) {
            $j++;
            $messStructure = imap_fetchstructure($this->imapInBox, $nEmails[$j] , FT_UID);
            $overview = imap_fetch_overview($this->imapInBox,$j ,0);
        echo '<span>Read/Unread'.($overview[0]->seen ? 'read' : 'unread').'</span>';
        echo  '<span>Subject:: '.$overview[0]->subject.'</span> ';
        echo  '<span>From:: '.$overview[0]->from.'</span>';
        echo '<span>On:: '.$overview[0]->date.'</span>';
            $body = imap_fetchbody($this->imapInBox,$j ,2);
            echo $body;
            if(isset($messStructure->parts)) {
                $parts = $messStructure->parts;
                $fpos=2;
                for($i = 1; $i < count($parts); $i++) {
                $message["pid"][$i] = ($i);
                $part = $parts[$i];
                if(isset($part->disposition) && $part->disposition == "ATTACHMENT") {
                    $message["type"][$i] = $message["attachment"]["type"][$part->type] . "/" . strtolower($part->subtype);
                    $message["subtype"][$i] = strtolower($part->subtype);
                    $fileName=$part->dparameters[0]->value;
                    $mess = imap_fetchbody($this->imapInBox,$j+1,$fpos); 
                    $fp=fopen($dirPath.$fileName, 'w');
                    $data=$this->getdecodevalue($mess,$part->type);   
                    fwrite($fp,$data);
                    fclose($fp);
                    $nAttachment++;
                    $fpos+=1;
                }
            }
                if ($this->deleteEmails) {
                    //imap_delete($this->imapInBox,$j+1);
                }
            }
        }
        if ($this->deleteEmails) {
            //imap_expunge($this->imapInBox);
        }
        imap_close($this->imapInBox);
        return ("Completed ($nAttachment attachment(s) downloaded into $dirPath)");
    }
}

$mailHost="{imap.gmail.com:993/imap/ssl}INBOX";
$emailLogin="FULL-GMAIL-ID-HERE";
$pass="PASSWORD-HERE";
$dirPath=$_SERVER['DOCUMENT_ROOT']."test/gmail/";
$deleteEmails=false;
$mailObj=new ImapMail($mailHost,$emailLogin,$pass);
echo $mailObj->downLoadAttachment($dirPath,$deleteEmails=false);
?>