《Disney +》 迪士尼、Marvel、彼思、星球大戰…  《Five Nights at Freddy’s: Security Breach》首支實機遊玩影片公開   SIE與Discord締結合夥關係,期望在2022上半年讓用戶得以透過PlayStation使用Discord。   IKEA 與 ROG 聯手打造的電競家具,將在今年5月於日本上市!   寶可夢變成動作RPG?!官方發表系列新作「寶可夢傳說 阿爾宙斯」!這次將在很久以前的神奧地區展開冒險!   獨家預覽《Fall Guys》第6季新回合「Pipe Dream」   荒野行動 × 乃木坂46 聯名活動第二彈「乃木坂46 LIVE IN荒野〜情人節特別活動〜」!   《DC Universe Online》將於4月15日推出〈World of Flashpoint〉   日本LAWSON與寶可夢「波加曼」聯名於9月21日開跑!還有炸雞塊君「波加曼 檸檬口味」! 

PHP 使用 PHPMailer 遇到 SSL operation failed 的解法

商業

使用 PHP 寄信經常會使用 PHPMailer,但是要使用內部網路的 Mail
Server 來寄信,卻一直遇到如下述的錯誤:

Warning: stream_socket_enable_crypto(): SSL operation failed with code 1.
OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

要怎麼解決呢?

PHP 使用 PHPMailer 遇到 SSL operation failed 的解法

PHPMailer 常見的寫法如下:(註:設定 From、To、Subject、Body.. 在此就不寫了)

isSMTP();
$mail->Host = 'relay-hosting.secureserver.net';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->SMTPSecure = 'tls';
?>

現在已經很習慣使用 SMTPSecure 為 tls 或 ssl,但是臨時自己架設的 Mail Server,沒有設定憑證、帳號、密碼,修改範例如下:

SMTPDebug = 2; // Enable verbose debug output (print debug message)

$mail->isSMTP();
$mail->Host = 'relay-hosting.secureserver.net';
$mail->Port = 25;
$mail->SMTPAuth = false;
$mail->SMTPSecure = false;
?>

將 SMTPAuth、SMTPSecure 都設定 false,發信卻還是發生「SSL operation failed」、「certificate verify failed」的問題,要怎麼解決呢?

PHPMailer 遇到問題時,官方網頁有疑難排解可以參考:Troubleshooting · PHPMailer/PHPMailer Wiki

  • 文章找到這個參數:$mail->SMTPAutoTLS = false;

原來現在 PHPMailer 已經預設啟用 TLS,所以程式修改如下:

SMTPDebug = 2;

$mail->isSMTP();
$mail->Host = 'relay-hosting.secureserver.net';
$mail->Port = 25;
$mail->SMTPAuth = false;
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
?>

於是就可以使用自己架設的 Mail Server 正常寄信囉~

Tsung

隨機商業新聞

Addidas