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

时间:2013-07-01 09:41:07

标签: php phpmailer

我使用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"....

4 个答案:

答案 0 :(得分:0)

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

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

输出应该是“加载配置文件c:\ xampp \ php \ php.ini”

相关问题:How to find the php.ini file used by the command line?

答案 1 :(得分:0)

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

php -i | grep php.ini

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

在那里添加以下行

extension=php_openssl.dll

它应该工作。我还没有测试过。如果有任何问题,请随时更改。

答案 2 :(得分:0)

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

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

php -r "phpinfo();"

然后查找“已加载的配置文件”行以查看它正在使用的文件。如果这是一个Windows服务器,您只需要进入该文件并添加openssl扩展,方法是将其附加到它:

extension=php_openssl.dll

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

答案 3 :(得分:0)

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