in , ,

cPanel PHP程式寄信教學!利用虛擬主機上的SMTP操作 PHPMailer 、聯絡我們或用WordPress 要寄信

程式寄信在網站上最常見用於:留言功能、會員註冊驗證、忘記密碼、系統通知、訂購帳單…等
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已經在外地無法拿來程式發信)。

<<介紹PHPMailer與其版本>>

①PHPMailer 為 SMTP發信中最經典也最常見的使用發信程式,常見程式設計師會將其與自己的網頁內容結合使用。

②目前PHPMailer有2大版本:
●5.×.×版本:主要用於PHP5.0~PHP7.4環境,各版本適用的PHP版本不同(且於2020.03.19已無在更新)。
●6.×.×版本:主要用於PHP5.6~PHP8.1環境(至2021.10.15 持續更新中)。

PHPMailer各版本下載連結,請點我

<<PHPMailer 5.x.x版-5.2.28(最終版本)範例教學>>

Step1-範例理解:該範例針對使用發信程式所在的Mail Server發信(即亦不使用外部的Mail Server發信,如Gmail…等),由於接觸的使用目前網頁程式蠻多仍是使用PHP 5.6以下的版本,故該次介紹針對5.×.×版的PHPMailer作說明。

Step2-新增Mail帳號:請先到cPanel控制台新增一個電子郵件帳號 (即使您的MX沒有指向Web主機空間,也一樣新增),新增後請記住Mail帳號與密碼。

Step3:
PHPMailer5.2.28下載連結,請點我
解開壓縮檔後,僅如下四個檔案,將這些檔案放在主機空間上
class.phpmailer.php
class.pop3.php
class.smtp.php
PHPMailerAutoload.php

Step4:新增發信的檔案,如:send.php,與上述4個檔案放在一塊,如下圖。

Step5:將如下的程式代碼放置send.php的檔案內。
代碼(紅色的部分與小編的私人設定實際訊息,方便確認使用):


<?php
include("PHPMailerAutoload.php");
// 產生 Mailer 實體
$mail = new PHPMailer();

// 設定為 SMTP 方式寄信
$mail->IsSMTP();

// SMTP 伺服器的設定,以及驗證資訊
$mail->SMTPAuth = true;
$mail->Host = "tang1.number1.info"; //設定有任何指向主機空間的網址名稱
$mail->Port = 25; //主機空間的郵件伺服器port為 25(SSL連線與上面的HOST是有關,在不熟悉時建議使用非SSL的方式測試)
$mail->SMTPSecure = false;

// 信件內容的編碼方式
$mail->CharSet = "utf-8";

// 信件處理的編碼方式
$mail->Encoding = "base64";

// SMTP 驗證的使用者資訊
$mail->Username ="tang@tang1.number1.info"; //在cPanel新增mail的帳號(需要完整的mail帳號,含@後都要填寫)
$mail->Password ="************" ; //在cpanel新增mail帳號時設定的密碼,請小心是否有空格,空格也算一碼。

// 信件內容設定
$mail->From = "tang@tang1.number1.info"; //需要與上述的使用者資訊相同mail
$mail->FromName = "Tang測試"; //此顯示寄件者名稱
$mail->Subject = "PHPMailer寄信測試標題"; //信件主旨
$mail->Body = "這是一封測試信件哦!"; //信件內容
$mail->IsHTML(true);

// 收件人
$mail->AddAddress("***@gmail.com", "XXX系統通知信"); //此為收件者的電子信箱及顯示名稱

// 顯示訊息
if(!$mail->Send()) {
echo "Mail error: " . $mail->ErrorInfo;
}else {
echo "Mail sent";
}
?>

<<測試結果>>在PHP 5.6~PHP7.4環境下,均可以成功的寄出信件(版本所適用的PHP版本與官方的維護狀況有關),若於PHP5.6 以下的版本,需要參考其他5.2.*的版本

<<常見問題>>
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版本,未來將會針對PHPMailer 6.x.x作教學說明。

文章來源: https://wpoki.com

Written by 婷Z

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

GIPHY App Key not set. Please check settings