【问题标题】:PHP imap_headerinfo check if existsPHP imap_headerinfo 检查是否存在
【发布时间】:2014-01-07 17:34:44
【问题描述】:

我正在使用 PHP 函数 imap_open 来获取每封电子邮件的标题:

$header=imap_headerinfo($inbox,$email_number);

然后我在抄送的电子邮件地址上运行一个 foreach 循环:

foreach ($header->cc as $cc_extra) {

}

在运行 foreach 循环之前,如何检查 $header->cc 中是否有任何内容?

注意: - $inbox 是邮箱的连接字符串 - $email_number 是每封电子邮件的电子邮件号码

【问题讨论】:

标签: php


【解决方案1】:

您可以像这样使用issetis_array 的组合:

$header=imap_headerinfo($inbox,$email_number);
// ...
if(isset($header->cc) && is_array($header->cc)) {
  foreach ($header->cc as $cc_extra) {
  }
}

isset 将测试变量是否已设置为不是 null
is_array 将测试变量实际上是 array

编辑

或者,如 this SO answer 中所见,您可以将变量显式转换为 foreach 内的数组,例如,

foreach ((array)$header->cc as $cc_extra) {
}

【讨论】:

    【解决方案2】:

    我使用下一个代码:

    $connection = imap_open("{192.168.1.170:993/imap/ssl/novalidate-cert}INBOX", $send_from_our, $send_from_pass) or die('Cannot connect to your sever: ' . imap_last_error());
    $emails = imap_search($connection, 'UNSEEN');
    $unread = 0;
    $count = imap_num_msg($connection);
    
    for ($msgno = 1; $msgno <= $count; $msgno++) {
        $cc='';
        $to='';
        $headers = imap_headerinfo($connection, $msgno);           
        if ($headers->Unseen == 'U') {
            $unread++;
            if (isset($headers->cc) && is_array($headers->cc)) {
                foreach ($headers->cc as $cc_extra) {
                    $mailbox_cc=strtolower($cc_extra->mailbox);
                    $host_cc=strtolower($cc_extra->host);
                    $cc .= $mailbox_cc . "@" . $host_cc .',';
                }
                $cc= rtrim($cc, ',');
            }
            if (isset($headers->to) && is_array($headers->to)) {
                foreach ($headers->to as $to_extra) {
                    $mailbox_to=strtolower($to_extra->mailbox);
                    $host_to=strtolower($to_extra->host);
                    if ($mailbox_to=='$MY_EMAIL_NAME' and $host_to='$MY_HOST_NAME') {
                        continue;
                    }
                    $to .=$mailbox_to . "@" . $host_to.',';
                }
                $to=rtrim($to, ',');
            }
            $fromaddr = $headers->from[0]->mailbox . "@" . $headers->from[0]->host;
            $full_reply_to=rtrim($fromaddr.','.$cc.','.$to, ',');
    

    此代码接收来自 maibox 的所有未读电子邮件,并将每封电子邮件的 CC 和 TO(不包括我自己的地址)的所有地址放入 $full_reply_to

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多