PHPMailer在浏览器中工作,但在命令提示符下不工作


PHPMailer working in browser but not working in command prompt

我使用PHPMailer 编写代码发送邮件

include 'class.phpmailer.php';
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->SMTPDebug  = 1;
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->Username = 'example1@gmail.com';
$mail->Password = 'password';
$mail->SetFrom('example2@gmail.com', 'Admin');
$mail->AddReplyTo('example@yahoo.com', 'Name');
$mail->AddAddress('xample3@gmail.com');
$mail->Subject = 'Active email';
$mail->MsgHTML('Click the link to active');
$mail->Send();

当我使用浏览器时,它可以发送邮件,但在命令提示符下,

php path_to_file

它不工作,错误是:

SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport ssl"....

我猜这是您的PHP配置。HTTP服务器和命令行没有使用同一个文件,命令行使用的文件缺少openssl扩展名。

使用命令行中的phpinfo()函数来找出它正在使用的文件:

php -r "phpinfo();"

然后查找"Loaded Configuration File"行以查看它正在使用的文件。如果这是一台Windows服务器,您只需要进入该文件,并通过将以下内容附加到文件中来添加openssl扩展名:

extension=php_openssl.dll

并确保extension_dir设置为正确的路径;这是PHP安装目录的"ext"目录。

也许您有两个不同的php.ini文件,一个用于http服务器,另一个用于命令行客户端。

执行<?php phpinfo(); ?>并在浏览器和命令行中检查php.ini的加载情况。

输出应该类似于"加载的配置文件c:''examplep''php''php.ini"

相关问题:如何找到命令行使用的php.ini文件?

我认为安东尼·斯特林是对的。你可以试试这个。找到用于cli的php.ini文件的位置。使用以下命令

php -i | grep php.ini

它将显示Php CLI 的ini文件的路径

在中添加以下行

extension=php_openssl.dll

它应该起作用。我还没有测试过。如果有什么问题,请随时更改。

Php命令行需要Php.ini来加载像openssl这样的扩展。我使用Wamp,Apache使用的php.ini文件与php命令行使用的文件不同。

Apache使用的php.ini文件位于:C:'wamp'bin'apache'apache2.X.X'bin

命令行使用的php.ini文件位于:C:'wamp'bin'php'phpX.X.XX