• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 5755
  • Last Modified:

php save email attachments to server

I'm trying to write a script to achieve the following:
1> Cron the script daily
2> Script opens email account
3> Pulls csv attachment from email
4> Renames attachment YYYYMMDD.csv
5> Saves attachment in same directory as script
6> Deletes email

I'm using email classes from  http://cingusoft.mirrors.phpclasses.org/browse/file/13399.html with not much success as it's coming up with the ERROR "Zero Sized Reply".

Here is the basic script with all variables as default.


-- parse-email.php --

<?

require_once("attachmentread.class.php");
$host="{my.mailserver.net:110/pop3}"; // pop3host
$login="user1"; //pop3 login
$password="passwd1"; //pop3 password
$savedirpath="" ; // attachement will save in same directory where scripts run othrwise give abs path
$jk=new readattachment(); // Creating instance of class####
$jk->getdata($host,$login,$password,$savedirpath); // calling member function

?>

-- attachmentread.class.php --

<?

            ######################################
           
            #Coded By Jijo Last Update Date[Jan/19/06]
           
            #####################################

   

           
            ##########################################################            


            ###################### Class readattachment ###############
class readattachment
{
   
        function getdecodevalue($message,$coding)
        {
        if ($coding == 0)
        {
           $message = imap_8bit($message);
        }
        elseif ($coding == 1)
        {
          $message = imap_8bit($message);
        }
        elseif ($coding == 2)
        {
           $message = imap_binary($message);
        }
        elseif ($coding == 3)
        {
       $message=imap_base64($message);
       }
        elseif ($coding == 4)
        {
           $message = imap_qprint($message);
        }
        elseif ($coding == 5)
        {
         $message = imap_base64($message);
        }
        return $message;
        }

            function getdata($host,$login,$password,$savedirpath)
            {
            $mbox = imap_open ($host,  $login, $password) or die("can't connect: " . imap_last_error());
            $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";
           
            for ($jk = 1; $jk <= imap_num_msg($mbox); $jk++)
            {
            $structure = imap_fetchstructure($mbox, $jk , FT_UID);    
            $parts = $structure->parts;
            $fpos=2;
                    for($i = 1; $i < count($parts); $i++)
                       {
                        $message["pid"][$i] = ($i);
                        $part = $parts[$i];

                        if($part->disposition == "ATTACHMENT")
                            {
                           
                            $message["type"][$i] = $message["attachment"]["type"][$part->type] . "/" . strtolower($part->subtype);
                            $message["subtype"][$i] = strtolower($part->subtype);
                            $ext=$part->subtype;
                            $params = $part->dparameters;
                            $filename=$part->dparameters[0]->value;
                                                       
                                    $mege="";
                                    $data="";
                                      $mege = imap_fetchbody($mbox,$jk,$fpos);  
                                    $filename="$filename";
                                    $fp=fopen($filename,w);
                                    $data=$this->getdecodevalue($mege,$part->type);    
                                    fputs($fp,$data);
                                    fclose($fp);
                                    $fpos+=1;
                       
                               
               
                            }
           
                    }
//imap_delete tags a message for deletion
            //imap_delete($mbox,$jk);
       
            }
// imap_expunge deletes all tagged messages
            //imap_expunge($mbox);
            imap_close($mbox);
            }
}


?>
0
AtDev
Asked:
AtDev
  • 3
  • 3
1 Solution
 
MasonWolfCommented:
You're off to a good start for a self-styled beginner, AtDev!

Anyway, I looked over your code briefly, and I'm not clear on where the problem is. It would help if you could tell us what error you get when this script runs.
0
 
AtDevAuthor Commented:
Thanks :-D

The error I get is "Zero Sized Reply" when running parse-email.php
0
 
MasonWolfCommented:
I don't see any html or print or echo statements. Is "Zero Sized Reply" an error? All it means is that the browser didn't get anything back in the response when it called this script. Looking at it, unless there was an error thrown and error_reporting was turned on, I'm not seeing why it would.

Does the attachment not save then?
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
AtDevAuthor Commented:
yes "Zero Sized Reply" that the browser shows.

I have error_reporting on but there is no php errors outputed and the attachment does not save to the same folder either (permissions set to 777)
0
 
MasonWolfCommented:
Just set the filename where you want it saved. Configure this line here, and I think you'll be done:
$filename="$filename";
0
 
AtDevAuthor Commented:
Hmmm, if you run this script for yourself (on your server) does it work without error cause it doesn't work for me.

$filename comes fro the $params value so that part appears fine:

$params = $part->dparameters;
$filename=$part->dparameters[0]->value;
0
 
JuniorBeeCommented:
me either
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now