使用 PHP 和 IMAP 连接到 Gmail

Connect to Gmail with PHP & IMAP

我已经从我的 php.ini 文件中启用了 OpenSSLIMAP 功能,并且 phpinfo() 确认了它。

通过使用下面的代码,我可以连接到 Hotmail 帐户,但不能连接到 Gmail 帐户。(当然,我将 $connect_to 更改为指向 Hotmail。)

$connect_to = '{imap.gmail.com:993/imap/ssl}INBOX';
$connection = imap_open($connect_to, $user, $password)
  or die("Can't connect to '$connect_to': " . imap_last_error());
imap_close($connection);

返回的错误是

Warning: imap_open(): Couldn't open stream {imap.gmail.com:993/imap/ssl}INBOX in /opt/lampp/htdocs/webmail_client_practise/index.php on line 6
Can't connect to '{imap.gmail.com:993/imap/ssl}INBOX': Certificate failure for imap.gmail.com: unable to get local issuer certificate: /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
Notice: Unknown: Certificate failure for imap.gmail.com: unable to get local issuer certificate: /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA (errflg=2) in Unknown on line 0

很遗憾,我找不到有关如何使用 IMAP 功能的完整教程。

任何想法、解决方案或建议都会有所帮助。

首先检查您服务器上的日期和时间设置是否正确。

或者试试:

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

这将阻止它尝试验证证书。

我可能会收到人们的反对票,他们告诉我这是不好的做法,因为这会让您容易受到中间人攻击。这是真的。

更新:

在互联网上搜索我的问题后,我没有找到完全解决我的问题的解决方案。虽然如果

1) 我用的是不安全的 $connect_to = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX';

2) 并允许 less secured apps

访问 gmail

暂时解决了我的问题。

请检查这个https://support.google.com/accounts/answer/6010255?hl=en

如果您被阻止,这可能是因为 google 看到来自新设备的登录。

转到您的 google 帐户并检查 https://myaccount.google.com/device-activity 并让他们知道 'Unknown device is ok to use'.