【发布时间】:2018-02-07 03:07:36
【问题描述】:
事实
我正在使用 PEAR Mail,我想使用 gmail SMTP 发送邮件。我有 Apache/2.4.27 (Win64) PHP/7.2.0beta3、PEAR 1.10.15、Mail 1.4.1、Net_SMTP 1.8.0、Net_Socket 1.2.2。
我去了php.ini并添加了extension = php_openssl.dll。 error.log 没有给出与 ssl 相关的错误。
这里是代码
require_once "Mail.php";
$from = '<slevin@gmail.com>';
$to = '<slevinkelevra@gmal.com>';
$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' => 'slevinmail@gmail.com',
'password' => 'mypassword'
));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo('<p>' . $mail->getMessage() . '</p>');
} else {
echo('<p>Message successfully sent!</p>');
}
问题
我收到这个错误
Failed to connect to ssl://smtp.gmail.com:465 [SMTP: Failed to connect socket: fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error) (code: -1, response: )]
我不知道该怎么做,我用谷歌搜索了但我更困惑了。
请就如何解决此问题提出建议。谢谢
更新
按照 symcbean 的说明,我得到了以下结果:
bool(true)
array(5) {
[0]=> string(31) "alt3.gmail-smtp-in.l.google.com"
[1]=> string(26) "gmail-smtp-in.l.google.com"
[2]=> string(31) "alt4.gmail-smtp-in.l.google.com"
[3]=> string(31) "alt1.gmail-smtp-in.l.google.com"
[4]=> string(31) "alt2.gmail-smtp-in.l.google.com" }
IPV4 address = 64.233.188.27
If you've got this far without errors then problem is with your SSL config
Check you've got your cacerts deployed in one of the following locations
default_cert_file = C:\Program Files\Common Files\SSL/cert.pem
default_cert_file_env = SSL_CERT_FILE
default_cert_dir = C:\Program Files\Common Files\SSL/certs
default_cert_dir_env = SSL_CERT_DIR
default_private_dir = C:\Program Files\Common Files\SSL/private
default_default_cert_area = C:\Program Files\Common Files\SSL
ini_cafile =
ini_capath =
If all good so far, then this bit should work....
fsockopen
Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in C:\Apache24\htdocs\phptest2.php on line 28
Warning: fsockopen(): Failed to enable crypto in C:\Apache24\htdocs\phptest2.php on line 28
Warning: fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error) in C:\Apache24\htdocs\phptest2.php on line 28
bool(false) int(0) string(0) ""
第28行就是这一行var_dump(fsockopen("ssl://smtp.gmail.com", 465, $errno, $errstr, 3.0));
再次感谢
更新 #2
我只搜索了“fsockopen(): SSL operation failed with code 1”。的第一个警告。
结束 here 。我改变了AVG的邮件端口,就像答案一样。 symcbean 的代码运行没有错误,但我的代码回复为
mail error : authentication failure [SMTP: Invalid response code received from server (code: 534, response: 5.7.14 Please log in via your web browser and 5.7.14 then try again. 5.7.14 Learn more at 5.7.14 https://support.google.com/mail/answer/78754 c1sm1243434wre.84 - gsmtp)]
所以我用谷歌搜索了code: 534, response: 5.7.14 并最终找到了here,按照 emgh3i 第一个答案的说明,启用了不太安全的连接并允许访问我的谷歌帐户
而且它现在工作得很好。
【问题讨论】:
-
您必须先涉足一些命令行工具。检查
openssl client如何建立测试连接。如果失败,则可能存在某些防火墙规则。如果它只是从 Apache/PHP 失败,则使用 SELinux/AppArmor 之类的东西。 -
phpinfo()显示了关于 openssl 的哪些内容? -
@mario 如何查看
openssl client关于如何建立测试连接? -
@Don'tPanic openssl 部分在那里,已启用,还有库版本、标头版本、默认配置,但没有
openssl.cafile和opensll.capath的值. -
会不会是防火墙,你有什么阻止互联网连接吗?
标签: php sockets email ssl pear