Richard Kurth wrote:
Way does my for loop not complete the task if there are 4 emails it only
process 3 emails through the foreach loop if there is 3 it only process 2
# Connect up
$host ="domain.com";
$port ="110";
$mailtype = "pop3";
$mailbox ="INBOX";
$username ="bounce@xxxxxxxxxx";
$password ="boat1234";
$conn = @imap_open("{" . $host . ":" . $port . "/" . $mailtype .
"/notls}" . $mailbox, $username, $password);
$number=imap_num_msg($conn);
for($i = 1; $i <= $number; $i++) {
$file="C:\web\bouncehandler\eml\em$i";
imap_savebody($conn,$file,$i);
$file=file_get_contents("C:\web\bouncehandler\eml\em$i");
$multiArray = Bouncehandler::get_the_facts($file);
$EMAIL = $the['recipient'];
foreach($multiArray as $the){
switch($the['action']){
case 'failed':
$sql="UPDATE contacts SET emailstatus = 'Fatal-Bounced' WHERE
emailaddress = '$EMAIL'";
mysql_query($sql) or die("Invalid query: " . mysql_error());
break;
case 'transient':
$sql="UPDATE contacts SET emailstatus = 'Bounced' WHERE
emailaddress = '$EMAIL'";
mysql_query($sql) or die("Invalid query: " . mysql_error());
break;
case 'autoreply':
$sql="UPDATE contacts SET emailstatus = 'Bounced' WHERE
emailaddress = '$EMAIL'";
mysql_query($sql) or die("Invalid query: " . mysql_error());
break;
default:
//don't do anything
break;
}
}
}
I think you need to check the boundary conditions on your loop.
As you write it,
for($i = 1; $i <= $number; $i++)
if $number is 4 then $i will have the values 1,2,3,4.
Perhaps message list is zero-based, and you actually need to count from zero:
for($i = 0; $i < $number; $i++)
so you would get $i to read 0,1,2,3
The manual page doesn't explicitly say the the message number is one-based, and
most real programming languages these days use zero-based arrays...
--
Peter Ford phone: 01580 893333
Developer fax: 01580 893399
Justcroft International Ltd., Staplehurst, Kent
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php