【问题标题】:Sending HTML message through PEAR while using SMTP authentication returns an error在使用 SMTP 身份验证时通过 PEAR 发送 HTML 消息会返回错误
【发布时间】:2012-08-23 09:16:35
【问题描述】:

我正在尝试在 PHP 中使用 SMTP 身份验证向 Gmail 发送 HTML 邮件。这是我正在使用的脚本:

require_once "Mail.php";
require_once 'Mail/mime.php';

$from = "Some Name <myemail@gmail.com>";
$to = "Other Name <otheremail@gmail.com>";
$subject = "This is a test";
$crlf = "\n";

$host = "ssl://smtp.gmail.com";
$port = "465";
$username = "myemail@gmail.com";
$password = "mypass";

$headers = array ('From' => $from,
                  'Return-Path' => $from,
                  'Subject' => $subject);

$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'port' => $port,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mime = new Mail_mime($crlf);
$mime->setTXTBody("This is a test email message");
$mime->setHTMLBody($body);
$body = $mime->get();
$headers = $mime->headers($headers);

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
} else {
  echo("<p>Message successfully sent!</p>");
}

注意:$body 是一个包含图像和其他信息的 HTML 表格。

当我执行脚本失败并出现以下错误:

未能设置发件人:某些名称 [SMTP:无效的响应代码 从服务器收到(代码:555,响应:5.5.2 语法错误。 c6sm20541406obd.22)]

这是我尝试查看的问题所在: 1. 使用“Mail”而不是“smtp”使用相同的脚本,即

$smtp = Mail::factory('Mail');

这很好用。 2. 使用没有 mime.php 的相同脚本,这也可以,但不允许发送 HTML 电子邮件。

有人知道如何将两者结合起来,以便我仍然使用 SMTP 身份验证发送 HTML 消息吗?

编辑: 这是$mime-&gt;headers()的转储:

[MIME-Version] => 1.0
[From] => Some Name
[Return-Path] => Some Name
[Subject] => This is a test
[Content-Type] => multipart/alternative;
boundary="=_8662996a1f586248545d9f01f48e916d"

【问题讨论】:

  • 你能转储$mime-&gt;headers()吗?
  • 我将转储添加到帖子中。谢谢。

标签: php smtp gmail pear


【解决方案1】:

请看下面的网址,我认为这对您很有帮助。

How to send an HTML email using SMTP in PHP

Gmail 的 SMTP 服务器地址是 SMTP.GOOGLEMAIL.COM 而不是 SMTP.GMAIL.COM

因此您的设置应该是:

// ...
$smtp=array();
$smtp['host']='ssl://smtp.googlemail.com';

再看一个例子:-

使用带有 PHP 和 PEAR 的 SMTP 服务器发送 HTML 和纯文本电子邮件

http://tonyvirelli.com/slider/php-html-email-using-smtp/

【讨论】:

  • googlemail.com 是 gmail.com 的别名,这两个域可以互换使用。你最后提供的链接非常有用,所以我给了你赏金。谢谢!
  • Google 搜索建议信息框建议使用 gmail.com 而不是 googlemail.com:谷歌搜索“gmail smtp 设置”显示在顶部的框中“如果您使用 SMTP 连接,您只能将邮件发送到Gmail 或 Google Apps 用户;如果您使用 SSL/TLS 连接,您可以向任何人发送邮件。如果您的设备或应用程序支持 SSL - 连接到端口 465 上的 smtp.gmail.com。要使用 SSL 连接,您需要提供用于身份验证的 Google 用户名和密码。”
【解决方案2】:

尝试将名称用双引号括起来,如下所示:

$from = '"Some Name" <myemail@gmail.com>';
$to = '"Other Name" <otheremail@gmail.com>';

试一试并告诉我们。

更新
好的,上面没有用,所以我只想告诉你它在我的 php 页面中通过 smtp gmail 发送电子邮件对我有用。

因此,您可以尝试将配置更改为:

$host = "tls://smtp.gmail.com";
$port = "587";

你可以看到here如何使用phpmailer通过gmail发送邮件。

【讨论】:

  • 感谢您的回复,但这会返回另一个错误:无法设置发件人:“Some Name”——这次它有双引号:/
  • 感谢您的更新,我已经找到了解决方案。(见下文)
【解决方案3】:

我自己终于想通了。

感谢 Abid Hussain 在此处提供示例链接:http://tonyvirelli.com/slider/php-html-email-using-smtp/

解决方案:

  1. 从 headers 数组中删除 'Return-Path' =&gt; $from
  2. To =&gt; $to 添加到 headers 数组(没有这个,收到的电子邮件的 to 标头是未公开的收件人

【讨论】:

    【解决方案4】:

    我遇到了这个问题,并通过调试设法得到了各种不同的错误(如下)。最奇怪的是,它在 2017 年 11 月 2 日左右完全停止工作。我没有做任何更新。以前它会随机工作,所以我重试了一次,它总是成功

    Failed to connect to ssl://smtp.gmail.com:465 [SMTP: Invalid response code received from server (code: -1, response: )]
    fsockopen(): Failed to enable crypto
    fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error)
    SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
    

    (等等)

    另一位用户发布了此故障排除步骤,帮助我发现了更多错误,因此我可以谷歌更多可能是什么原因:

    $result = fsockopen('ssl://smtp.gmail.com', 465, $error_no,
    $error_message, 5);     
    if($result === false) {         
        echo "error no:
    $error_no error message: $error_message";       echo print_r($result,true);     
    }else{      
        echo 'success\n\n';
    }
    

    我的解决方法是添加 CA 捆绑文件,因为显然 PHP 无法验证 Google 的证书:

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2017-09-26
      • 2019-01-03
      • 2011-06-18
      • 1970-01-01
      相关资源
      最近更新 更多