将电子邮件插入多维数组
Insert emails into multidimensional array
老板给我分配了一项任务,让我从 Gmail 收件箱中读取电子邮件,然后使用 php 将它们放入自己的 div 中。接收电子邮件很容易,但是我正在努力解决将每条消息详细信息放入数组中的简单问题。
我需要这个数组来保存每封电子邮件的:
从
学科
信息
用于获取电子邮件的代码是:
/* connect to gmail */
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'redacted';
$password = 'redacted';
/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
/* grab emails */
$emails = imap_search($inbox,'ALL');
/* if emails are returned, cycle through each... */
if($emails)
{
/* begin output var */
$output = '';
/* put the newest emails on top */
rsort($emails);
$emailArray = array();
/* for every email... */
$t = 1;
foreach($emails as $email_number)
{
$temp = array();
$t++;
if($t == 3)
{
break;
}
/* get information specific to this email */
$overview = imap_headerinfo($inbox,$email_number);
if(substr($overview->subject, 0, 1) == '#')
{
$from = $overview->from[0]->personal;
$subject = $overview->subject;
$message = imap_fetchbody($inbox,$email_number, 2);
$formattedMessage = imap_qprint($message);
$temp = array('from'=>$from, 'subject'=>$subject, 'message'=>$formattedMessage);
foreach($temp as $i => $i_val)
{
$emailArray[$i][] = $i_val;
}
}
}
}
/* close the connection */
imap_close($inbox);
现在,当我尝试从数组中提取电子邮件时:
$emailArray['from'][0]
它会起作用,但使用
$emailArray['from'][1]
不会。
我知道事实上有两封电子邮件被提取,因为我 运行 脚本在不同的页面上,并且只输出它们出现时的值,它显示 2.
你的循环工作一次。
试试这个:
$t = 0;
因为:
foreach ($emails as $email_number) {
$temp = array();
$t++;
//now $t = 2 and it's the first loop.
if ($t == 3) {
break;
}
}
或者你可以试试这个:
foreach ($emails as $email_number) {
$temp = array();
if ($t == 3) {
break;
}
$t++;
}
或者这个:
foreach ($emails as $email_number) {
$temp = array();
$t++;
if ($t == 4) {
break;
}
}
检查 $t - 它被初始化为 1,然后在它读取的第一封电子邮件中递增到 2,这意味着当它读取第二封电子邮件时 $t=3 并跳出循环。
尝试将 $t=1 更改为 $t=0,看看是否能解决问题。
老板给我分配了一项任务,让我从 Gmail 收件箱中读取电子邮件,然后使用 php 将它们放入自己的 div 中。接收电子邮件很容易,但是我正在努力解决将每条消息详细信息放入数组中的简单问题。
我需要这个数组来保存每封电子邮件的: 从 学科 信息 用于获取电子邮件的代码是:
/* connect to gmail */
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'redacted';
$password = 'redacted';
/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
/* grab emails */
$emails = imap_search($inbox,'ALL');
/* if emails are returned, cycle through each... */
if($emails)
{
/* begin output var */
$output = '';
/* put the newest emails on top */
rsort($emails);
$emailArray = array();
/* for every email... */
$t = 1;
foreach($emails as $email_number)
{
$temp = array();
$t++;
if($t == 3)
{
break;
}
/* get information specific to this email */
$overview = imap_headerinfo($inbox,$email_number);
if(substr($overview->subject, 0, 1) == '#')
{
$from = $overview->from[0]->personal;
$subject = $overview->subject;
$message = imap_fetchbody($inbox,$email_number, 2);
$formattedMessage = imap_qprint($message);
$temp = array('from'=>$from, 'subject'=>$subject, 'message'=>$formattedMessage);
foreach($temp as $i => $i_val)
{
$emailArray[$i][] = $i_val;
}
}
}
}
/* close the connection */
imap_close($inbox);
现在,当我尝试从数组中提取电子邮件时:
$emailArray['from'][0]
它会起作用,但使用
$emailArray['from'][1]
不会。 我知道事实上有两封电子邮件被提取,因为我 运行 脚本在不同的页面上,并且只输出它们出现时的值,它显示 2.
你的循环工作一次。
试试这个:
$t = 0;
因为:
foreach ($emails as $email_number) {
$temp = array();
$t++;
//now $t = 2 and it's the first loop.
if ($t == 3) {
break;
}
}
或者你可以试试这个:
foreach ($emails as $email_number) {
$temp = array();
if ($t == 3) {
break;
}
$t++;
}
或者这个:
foreach ($emails as $email_number) {
$temp = array();
$t++;
if ($t == 4) {
break;
}
}
检查 $t - 它被初始化为 1,然后在它读取的第一封电子邮件中递增到 2,这意味着当它读取第二封电子邮件时 $t=3 并跳出循环。
尝试将 $t=1 更改为 $t=0,看看是否能解决问题。