我正在尝试通过在 wampserver 2.4 下运行的 php 访问 gmail。为简单起见,这是来自本地主机(实际应用程序要复杂得多)。
遵循一些标准示例,我可以通过 gmail 接收(通过 pop 或 imap)和发送(通过 smtp)电子邮件——但前提是启用了 gmail 的“不太安全的应用程序”功能(https://www.google .com/settings/security/lesssecureapps)。当然,必须首先在 gmail 设置页面上启用 pop 和/或 imap ( https://mail.google.com/mail/u/0/#settings/fwdandpop )
虽然这可行,但我希望 php 使用“更安全的技术”——即 SSL 和 TLS。有任何想法吗?
使用以下代码:
用于检索电子邮件。
$ato="{pop.gmail.com:995/pop3/ssl/novalidate-cert}INBOX";
$auser="myaddress@gmail.com";
$apwd="mypwd";
$mbox = imap_open($ato,$auser,$apwd,NULL,1) or die("can't connect: " . print_r(imap_errors())); // just do one login
$stuff=imap_check($mbox); // get and print basic information (such as # of emails)
var_dump($stuff);
和发送电子邮件(使用 PEAR 包) 请注意,为了使以下工作,我必须首先启用 php_openssl php 设置(使用 wampserver 弹出菜单下的 php - phpSettings 选项)。
require_once "Mail.php";
$from = 'myemail@gmail.com';
$to = 'someone@foo.org ';
$subject = 'Hi!';
$body = "Hi,\n\nHow are you?";
$headers = array(
'From' => $from,
'To' => $to,
'Subject' => $subject
);
$smtp = Mail::factory('smtp', array(
'host' => 'ssl://smtp.gmail.com',
'port' => '465',
'auth' => true,
'username' => 'myemail@gmail.com',
'password' => 'mypwd'
));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo('<p>' . $mail->getMessage() . '</p>');
} else {
echo('<p>Message successfully sent!</p>');
}
根据各种帖子,我尝试在 apache 扩展下启用 ssl_module 和 imagemap_module;和 php 设置下的 php_sockets。他们没有任何区别。我已经读过使用 imap-ssl 配置 php 很重要,但我不知道该怎么做。
这是我在使用上面的 pop 示例(使用我的用户名和密码)时得到的正确响应——启用 gmail 的“访问不太安全的应用程序”时:
object(stdClass)[1]
public 'Date' => string 'Thu, 22 Jan 2015 01:06:37 -0500 (Eastern Standard Time)' (length=55)
public 'Driver' => string 'pop3' (length=4)
public 'Mailbox' => string '{gmail-pop.l.google.com:995/pop3/notls/ssl/novalidate-cert/user="myemial@gmail.com"}INBOX' (length=99)
public 'Nmsgs' => int 153
public 'Recent' => int 1
当我禁用“不太安全的应用程序”时
Array ( [0] => [AUTH] Web login required: https://support.google.com/mail/bin/answer.py?answer=78754 [1] => Too many login failures ) can't connect: 1
顺便说一句:使用 IMAP $ato="{imap.gmail.com:993/imap/imap/ssl}INBOX"; 产量:
Array ( [0] => Can't open mailbox {imap.gmail.com:993/imap/imap/ssl}INBOX: invalid remote specification ) can't connect: 1