hi there,
still having difficulties with this one:
What I want to accomplish is:
1. Create a CRON job that checks an email address for messages every minute
2. Take each message, extract the attachments, then send a new email to a
different address and add the attachments to it.
Have been able to successfully do this with a PHP script, however when I try
and run through a CRON job have issues with the file_put_content line
Code is below...
function extract_attachments($connection, $message_number) {
$attachments = array();
$structure = imap_fetchstructure($connection, $message_number);
if(isset($structure->parts) && count($structure->parts)) {
for($i = 0; $i < count($structure->parts); $i++) {
$attachments[$i] = array(
'is_attachment' => false,
'filename' => '',
'name' => '',
'attachment' => ''
);
if($structure->parts[$i]->ifdparameters) {
foreach($structure->parts[$i]->dparameters as $object) {
if(strtolower($object->attribute) == 'filename') {
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['filename'] = $object->value;
}
}
}
if($structure->parts[$i]->ifparameters) {
foreach($structure->parts[$i]->parameters as $object) {
if(strtolower($object->attribute) == 'name') {
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['name'] = $object->value;
}
}
}
if($attachments[$i]['is_attachment']) {
$attachments[$i]['attachment'] = imap_fetchbody($connection,
$message_number, $i+1);
if($structure->parts[$i]->encoding == 3) { // 3 = BASE64
$attachments[$i]['attachment'] =
base64_decode($attachments[$i]['attachment']);
}
elseif($structure->parts[$i]->encoding == 4) { // 4 =
QUOTED-PRINTABLE
$attachments[$i]['attachment'] =
quoted_printable_decode($attachments[$i]['attachment']);
}
}
}
}
return $attachments;
}
$server = "pop3.####.co.nz";
$login = "#...@#####.co.nz";
$password = "#####";
$connection = imap_open('{pop3.webhost.co.nz:110/pop3}', $login, $password);
$count = imap_num_msg($connection);
echo "MESSAGES TO PROCESS: ".$count;
for($a = 1; $a <= $count; $a++) {
$structure = imap_fetchstructure($connection, $a);
//print_r($structure);
$header = imap_headerinfo($connection, $a);
//print_r($header);
//$raw_body = imap_body($connection, $i);
//print_r($raw_body);
$attachments = extract_attachments($connection, $a);
$thesubject = $header->subject;
$blanksubject = $header->Subject;
$numberofattachments = 0;
foreach ($attachments as $attachment) {
if ($attachment['is_attachment']) {
$numberofattachments++;
echo $attachment['filename'];
str_replace(" ","_",$attachment['filename']);
$testfilename = "file_uploads/INVOICE_".$attachment['filename'];
$bytes = file_put_contents($testfilename,
$attachment['attachment']);
//WHEN GETS TO THIS NO BYTES ARE RETURNED:
and get this message from the CRON JOB:
Warning: file_put_contents(file_uploads/INVOICE_Order 41344.pdf): failed to
open stream: No such file or directory in
/import/home/folder1/folder2/folder3/folder4/folder5/process_inbox.php on
line 97
I am thinking maybe a path issue? but has anyone any advice /
recommendations?
The file_uploads is within the folder5 directory.
Works fine when running the script without CRON job.
--
NZ PHP Users Group: http://groups.google.com/group/nzphpug
To post, send email to [email protected]
To unsubscribe, send email to
[email protected]