将电子邮件插入多维数组

时间:2015-07-28 17:58:15

标签: 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';
$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.

2 个答案:

答案 0 :(得分:3)

你的循环工作一次。

试试这个:

$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;
            }

        }

答案 1 :(得分:2)

检查$ t - 它被初始化为1然后在它读取的第一封电子邮件上增加到2,这意味着当它读取第二封电子邮件$ t = 3并且它突然出现循环时。

尝试将$ t = 1更改为$ t = 0,看看是否能解决问题。