这是我第一次使用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
答案 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 ......我会在那里找到第二个答案