imap_fetchbody不受支持

时间:2017-03-11 22:58:02

标签: php imap

这是我第一次使用imap。 。 所以我试图使用imap从gmail检索电子邮件作为纯文本,一切正常,但当我尝试检索直接电子邮件时遇到问题,

假设我有first@gmail.com和second@gmail.com,并且都收到来自noreply@site.com的同一封电子邮件

如果我直接从first@gmail.com使用imap检索,则imap_fetchbody返回"不支持您的电子邮件客户端="用我的母语 但是,如果我将同一封电子邮件从second@gmail.com转发到first@gmail.com,然后在第一封电子邮件中进行检索,则可以正常工作

这是我的简化代码     

$imapPath = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX';

$username = 'first@gmail.com';

$password = 'mypassword';

$inbox = imap_open($imapPath,$username,$password) or die('Cannot connect : ' . imap_last_error());

$emails = imap_search($inbox,'UNSEEN');

if($emails) 
{

   $output = '';

   rsort($emails);

   foreach($emails as $email_number) 
   {
      $message = imap_fetchbody($inbox,$email_number,1);

      echo $message."<br><hr>";
   }

}

else

{

echo "No unseen mail";

}

imap_close($inbox);

?>

我已经尝试将imap_fetchbody从1更改为0并且它可以工作,但它不是我需要的结果。 。 1.1和1.2返回空内容 有没有办法让我可以直接找回它? 谢谢提前,对不起,如果我没有清楚地描述它/可怜的英语lol

2 个答案:

答案 0 :(得分:1)

我通过改变

解决了这个问题
$message = imap_fetchbody($inbox,$email_number,1);

$message = strip_tags(quoted_printable_decode(imap_fetchbody($inbox,$email_number,2)));
有点脏哈哈。 。 不确定为什么有些电子邮件不支持以明文形式获取,但如果电子邮件被转发则有效。 。我注意到当我试图回显imap_fetchbody明文结果时出现“你的电子邮件客户端不支持=”

通过将其作为html获取解决,然后剥离html标签,也许它不是合适的方法,但我得到了我想要的结果

答案 1 :(得分:0)

好的,允许使用“不太安全的应用”https://support.google.com/accounts/answer/6010255?hl=en

您是否尝试过评估身体结构http://php.net/manual/de/function.imap-fetchstructure.php ......我会在那里找到第二个答案