2017-09-05 37 views
0

我嘗試使用Gmail的的SMTP服務器與發送失敗。有包含在PHPMailer的這個確切的情況相當明顯的例子,但下面這之後我指定它後得到一個錯誤,因爲(它看起來對我來說,)主機已經改變了我的本地主機名?PHPMailer的是改變了我的SMTP主機到我的hostname,使其

錯誤:

Peer certificate CN=`myhostname' did not match expected CN=`smtp.gmail.com' 
[/app/versions/dev/vendor/phpmailer/phpmailer/src/SMTP.php line 389] 

代碼:

$mail = new PHPMailer(); 
$mail->isSMTP(); 
$mail->SMTPOptions = [ 
    'ssl' => [ 
    'verify_peer' => false, 
    // 'verify_peer_name' => false, 
    // 'allow_self_signed' => true 
    ] 
]; 
$mail->SMTPDebug = 3; 
$mail->Host = 'smtp.gmail.com'; 
$mail->Port = 587; 
$mail->SMTPSecure = 'tls'; 
$mail->SMTPAuth = true; 
$mail->Username = '[email protected]'; 
$mail->Password = 'mypass'; 
$mail->AddAddress('[email protected]', 'My Name'); 
$mail->Subject = 'subject'; 
$mail->MsgHTML($message); 
echo $mail->send(); 
exit; 

我可以在PHPMailer.php看到:1772,它回落到serverHostname()如果未指定$直升機的,但是當我看看$ Helo的docblock,它指的是不存在的$ Hostname。


myhostname,[email protected],mypass都是匿名方式。

+0

嘗試刪除你的'$ mail-> SMTPOptions' – cmorrissey

+0

@cmorrissey它失敗,沒有ssl-> verify_peer = false',並給我大量的破碎字符,甚至沒有真正的錯誤消息。我讀過它的證書錯誤,但它不是我可以修復的,因爲這是本地的,所以唯一的其他(未推薦的)解決方法就是添加它。 – tom

+0

ahhhh其實如果你看看gmail的例子https://github.com/PHPMailer/PHPMailer/blob/master/examples/gmail.phps我認爲你需要使用'$ mail-> Host = gethostbyname('smtp.gmail .com');'而不是你的主機線我不認爲你的網絡允許通過IPv6的SMTP – cmorrissey

回答

0

可能是你改變太多,如果SMTP郵件路由YOURDOMAIN,你需要通過改變php.ini中SMTP域設置過你的PHP應用程序。

//php.ini 
[mail function] 
; For Win32 only. 
; http://php.net/smtp 
SMTP = smtp.yourdomain.com 

在你的PHP程序,你需要添加這個小小的代碼程序啓動加載器構造頂部:

//php index contructor loader ... 
ini_set("SMTP","smtp.example.com"); 
ini_set('sendmail_from', '[email protected]'); 

問候

+0

我在Ubuntu上,所以我不認爲這些選項是相關的,並且它顯示了不同的主機名:P謝謝儘管 – tom

+0

我是從debian的mutch不同的。 https://www.smtp2go.com/setupguide/php_mailer/可能是你沒有看到第一個caracter;是一條評論 – 2017-09-05 16:14:34

+0

然後';僅適用於Win32.'在php.ini下似乎有點關掉 – RiggsFolly

0

這是不是一件PHPMailer的是做。讀什麼錯誤說:你問連接到smtp.gmail.com,但結束了連接到別的東西,所以證書名稱不符。這可能是因爲您的ISP攔截了您的SMTP流量,並將其重定向到自己的郵件服務器,它有一個不同的名字 - 這是很常見的。這與Hostname屬性無關。

這是究竟是爲什麼你檢查證書 - 他們在做什麼是中間人攻擊,是TLS保護你免受攻擊的事情之一,所以禁用檢查絕對是錯誤的事情這也意味着您已將您的gmail憑據移交給您的ISP,因此您可能需要更改您的gmail密碼。

正確的解決辦法是從您的ISP,他們希望你使用出站電子郵件什麼安排找出(可能使用他們的郵件服務器),並改變你的腳本中使用故意,而不是偶然,然後將證書名稱將匹配。

然後你會有一個不同的問題 - 大多數互聯網服務提供商,如谷歌,特別是雅虎,有SPF記錄設置,將標記郵件源自他們的網絡之外,說他們發送它們的無效,並可能最終被阻止收件人。

解決方案是使用ISP的發件人地址發送,而不是gmail。

最好的解決方案是使用不阻止您的流量的ISP。

+0

我認爲這可能是我的工作網絡阻止它而不是ISP,但對我來說這是一個好的開始 – tom

相關問題