簡體   English   中英

使用SMTP身份驗證時通過PEAR發送HTML郵件會返回錯誤

[英]Sending HTML message through PEAR while using SMTP authentication returns an error

我正在嘗試在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->headers()的轉儲:

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

請參閱以下網址我認為對您來說非常有幫助。

如何使用PHP在PHP中發送HTML電子郵件

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/

嘗試用雙引號括起名字,如下所示:

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

嘗試並告訴我們。

更新
好吧,上面沒有用,所以我只是告訴你在我的php頁面中通過smtp gmail發送電子郵件對我有用。

所以基於此,您可以嘗試將配置更改為:

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

你可以在這里看到如何使用phpmailer通過Gmail發送郵件。

終於弄清楚了自己。

感謝Abid Hussain提供此示例的鏈接: http//tonyvirelli.com/slider/php-html-email-using-smtp/

解:

  1. 從headers數組中刪除'Return-Path' => $from
  2. 添加To => $to到headers數組(沒有這個,收到的電子郵件的to標頭是未公開的收件人

我有這個問題,並通過調試設法得到各種不同的錯誤(下面)。 最奇怪的是它在2017年2月2日左右完全停止了工作。 我沒有做任何更新。 以前它會隨機工作所以我進行了重試,它總是成功<5次嘗試,直到第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的證書:

  • 下載CA捆綁包https://curl.haxx.se/docs/caextract.html並解壓縮到C:\\ Program Files \\ PHP \\ ssl \\ cacert.pem
  • 在php.ini中指定位置:openssl.cafile = C:\\ Program Files \\ PHP \\ ssl \\ cacert.pem

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM