程式寄信在網站上最常見用於:留言功能、會員註冊驗證、忘記密碼、系統通知、訂購帳單…等
PHP Mail()、SMTP 都是程式寄信功能的一種,每間主機廠商的現制不太一樣,現在PHP Mail()已逐漸不在開放使用,故**以下僅針對程式/表單的SMTP說明,一般的outlook的SMTP是不受影響的。以下範例,僅供參考**
如果您有表單功能,很多虛擬主機空間是不支援PHP Mail(),也不支援用外部SMTP發信 (例如ServerZoo 與 Godaddy主機空間均不能用外部的Mail server, 如:Gmail的SMTP發信);僅支援該主機本地端SMTP驗證發信,這樣的話,您一定需要使用虛擬主機空間上提供的SMTP帳密,對即使你網址的MX在外地也一樣,故此時您便需要放程式的那台虛擬主機空間下去新增一組EMAIL帳號來用。
最新更新: 如果您真的不想用網站主機上的SMTP,然後還是很想用外部EMAIL主機來做虛擬主機程式寄信? 例如把網站空間的程式串GMAIL 來發信,您可以參考此篇 [新手攻略31]WordPress的WP Mail SMTP好用外掛如何透過API串聯,避開虛擬主機商禁止使用外部信箱發信限制?
以下繼續的內容是依然使用虛擬主機商提供的SMTP 來做程式寄信,如果您忘了如何在CPANEL主機空間上新增EMAIL帳號,您可以參考 如何在cPanel控制台裡新增一個EMAIL帳號?詳細圖文教你做!
於虛擬主機上架設CMS,使用程式寄信
若是使用Wordpress、Joomla..等免費程式寄信,這會需要到他們後台,找到發信設定的地方(若沒有需要額外安裝寄信的外掛),在PHPMail(寄信功能裡)選用SMTP,然後輸入你在我們主機空間上新增的EMail帳號密碼,這樣便可以了。如果你MX在外地,一樣使用”主機空間上新增好EMail帳號,然後在WordPress後臺那設定,此時SMTP主機可以輸入localhost 即可 (因為是使用本地端的主機發信,有關MX無指向Web主機也可以發信,請參詳說明)。
介紹於虛擬主機使用發信程式:PHPMailer(含版本說明)
①PHPMailer 為 SMTP發信中最經典也最常見的使用發信程式,常見程式設計師會將其與自己的網頁內容結合使用。
②目前PHPMailer有2大版本:
●5.×.×版本:主要用於PHP5.0~PHP7.4環境,各版本適用的PHP版本不同(且於2020.03.19已無在更新)。
●6.×.×版本:主要用於PHP5.6~PHP8.2環境(至2023.6.16 持續更新中)。
於虛擬主機上操作:PHPMailer 6.x.x版-6.8.0(2023.6.17的最新版)程式寄信範例教學
Step1-範例理解:該範例針對使用發信程式所在的Mail Server發信(即亦不使用外部的Mail Server發信,如Gmail…等),由於PHPMailer 5.x.x 已沒有再作更新,故該次介紹針對6.8.0版的PHPMailer作說明。
Step2-新增Mail帳號:請先到cPanel控制台新增一個電子郵件帳號 (即使您的MX沒有指向Web主機空間,也一樣新增),新增後請記住Mail帳號與密碼。
Step3:
●PHPMailer6.8.0下載連結,請點我
解開壓縮檔後,進到src資料夾,僅如下三個檔案,將這些檔案放在主機空間上
Exception.php
PHPMailer.php
SMTP.php
Step4:新增發信的檔案,如:send.php,與上述3個檔案放在一塊,如下圖。
Step5:將如下的程式代碼放置send.php的檔案內。
代碼(紅色的部分與小編的私人設定實際訊息,方便確認使用):
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require "Exception.php"; require "PHPMailer.php"; require "SMTP.php"; $mail = new PHPMailer(); // Passing `true` enables exceptions try { $mail->SMTPDebug = 0; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = "tang1.number1.info"; //設定有任何指向主機空間的網址名稱 $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = "tang@tang1.number1.info"; // 在cPanel新增mail的帳號(需要完整的mail帳號,含@後都要填寫) $mail->Password = "************"; //在cPanel新增mail帳號時設定的密碼,請小心是否有空格,空格也算一碼。 $mail->SMTPSecure = "TLS"; // 寄信時使用TLS/SSL加密,若不需要請改寫:false。 $mail->Port = 587; // TLS加密的port為587;SSL加密的port為465;若不用TLS/SSL,請改用25 $mail->setFrom("tang@tang1.number1.info", "Tang"); // 顯示寄件人Mail帳號,需要與上述設定Mail帳號相同,後面'Tang'是填寫顯示寄件人的名稱。 $mail->addAddress("sw*******@gm***.com", "mailto");//收件者的Email $mail->isHTML(true); // Set email format to HTML $mail->Subject = "PHPMailer寄信測試標題";//信件主旨 $mail->Body = "這是一封測試信件哦!";//信件內容 $mail->send(); echo "Message has been sent"; } catch (Exception $e) { echo "Message could not be sent."; echo "Mailer Error: " . $mail->ErrorInfo; } ?>
於虛擬主機上測試PHPMailer (6.8.0)發信結果
在PHP 5.6~PHP8.2環境下,均可以成功的寄出信件(版本所適用的PHP版本與官方的維護狀況有關),且於Gmail上均有收到信件。若於PHP5.6 以下的版本,需要參考其他5.2.*的版本或6.8.0以前的版本,(再次提醒,已無再更新程式,將會使網站曝露在被駭的風險下)
虛擬主機使用PHPMailer程式發信常見問題
Q1.如果MAIL的MX不是指向我web的主機怎麼辦?
A:其實這個沒有影響,請您一樣到web主機的cPanel下去新增一個EMAIL帳號,然後發信主機那邊打入www.YOURdomain.com ,如果您連WWW都還未指向到web的主機,請MAIL主機那邊改打成localhost,然後一樣用你web主機上產生的EMail帳密驗證寄出即可
Q2.承Q1,我的Mail Server在外部,想要寄到外部自己的Mail Server信箱,可以嗎?
A:可以的,請至:cPanel→電子郵件路由(Email Routing)→勾選”遠端郵件交換器”(Remote Mail Exchanger ),則信件會寄至DNS 指向MX record的主機空間去。
Q3.以上不是很清楚該如何使用,請問該問誰?
A: 因為這也只是其中一種的方式,不見得要使用此,可以請詢問下你的程式人員即可
Q4.如遇到標題亂碼怎麼辦?
引用:
$mail->Subject=”某某标题”;
那么,像这样的,你要改成这样:
$mail->Subject = “=?utf-8?B?”.base64_encode(“某某标题”).”?=”;
設定的方式其實蠻多樣化(如下面),但此篇若你想看更多細節可以看下PHPmailer 官方網站
https://github.com/PHPMailer/PHPMailer
Q5.若是使用程式的免費外掛,如WP Mail SMTP ?
可以試試看將SMTP改成您的主網址,port改用25試試;但該程式就不是github了,細節會需要詢問提供該程式的廠商
結論
上述範例分享,主要用來驗證主機SMTP功能正常,教學僅供參考,一般PHPMailer會結合網頁程式的欄位,如連絡我們,透過瀏覽者在網頁空格裡留的資料,同時寄信到自己的信箱,而查看修改用戶端的任何程式或程式架構還是需要由程式人員幫忙查看與處理。
不同的PHPMailer 版本適用的PHP環境不同,建議使用前可以於上述”PHPMailer各版本下載連結,請點我“裡查看適用的PHP版本再作測試,也建議應定期關注官方的說明與更新,使其可以更加掌握所在使用的網頁程式。
由於官方已無對於5.x.x版本的程式作升級與維護,故有程式安全上疑慮故在使用時還請留意處理,故本次教學(也建議)以6.x.x版本為主。
文章來源: https://wpoki.com
GIPHY App Key not set. Please check settings
One Comment