Php 将电子邮件插入多维数组
我的老板分配给我一项任务,让我阅读gmail收件箱中的电子邮件,并使用php将它们放入自己的div中。接收电子邮件很容易,但是我很难把每封邮件的详细信息放到一个数组中 我需要此阵列来保存每封电子邮件的: 从…起 主题 消息 用于获取电子邮件的代码是:Php 将电子邮件插入多维数组,php,email,multidimensional-array,imap,Php,Email,Multidimensional Array,Imap,我的老板分配给我一项任务,让我阅读gmail收件箱中的电子邮件,并使用php将它们放入自己的div中。接收电子邮件很容易,但是我很难把每封邮件的详细信息放到一个数组中 我需要此阵列来保存每封电子邮件的: 从…起 主题 消息 用于获取电子邮件的代码是: /* connect to gmail */ $hostname = '{imap.gmail.com:993/imap/ssl}INBOX'; $imapPath = '{imap.gmail.com:993/imap/ssl}INBOX'; $
/* 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 = 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,看看这是否解决了问题。检查$t-它被初始化为1,然后在它读取的第一封电子邮件上递增为2,这意味着当它读取第二封电子邮件时$t=3,它会中断循环
尝试将$t=1更改为$t=0,看看这是否解决了问题。say
var\u dump($emailArray)
确定阵列基本调试的大小:var\u dump($emailArray)
。看看里面到底是什么,这就是奇怪的地方。只有第二封邮件在那里,所以它就像是在覆盖第一封邮件。这与接收两封电子邮件的页面的代码相同,$t变量也跟踪循环中的时间,并点击2sayvar\u dump($emailArray)
确定阵列基本调试的大小:var\u dump($emailArray)
。看看里面到底是什么,这就是奇怪的地方。只有第二封邮件在那里,所以它就像是在覆盖第一封邮件。这与收到两封电子邮件的页面的代码相同,$t变量也跟踪循环中的时间,点击2将$t更改为0可获得两封电子邮件,但我也收到以下通知:通知:未知:无效引用的可打印序列:=“ltr”>这是一条测试消息(errflg=3)在第0行的“未知”中,这是一条测试消息,是电子邮件的正文。您可以编辑您的帖子并在“这是一条测试消息”所在的位置添加代码吗?将$t更改为0可以获得两封电子邮件,但我也收到以下通知:通知:未知:无效的引用可打印序列:=“ltr”>这是一条测试消息
(errflg=3)在第0行的“未知”中,这是一封测试邮件,这是一封电子邮件的正文。您可以编辑您的帖子并在“这是一封测试邮件”的位置添加代码吗?请查看上面的我的评论请查看上面的我的评论