天天看點

php sll郵箱注冊_使用php發送電子郵件(phpmailer)

在項目開發過程中,經常會用到通過程式發送電子郵件,例如:注冊使用者通過郵件激活,通過郵件找回密碼,發送報表等。這裡介紹幾種通過PHP發送電子郵件的 方式(1)通過mail()函數發送郵件(2)使用fsockopen方式連接配接smtp伺服器發送(3)使用phpmailer郵件類發送。個人推薦使用 phpmailer郵件類發送,phpmailer比較友善使用且功能強大,接下來對這幾種方式分别做一下介紹。

(1)通過mail()函數發送郵件

PHP中的mail() 函數允許從腳本中直接發送電子郵件,格式:

mail($to,$subject,$message,$headers,$parameters);

to 必需。規定郵件的接收者。

subject 必需。規定郵件的主題。該參數不能包含任何換行字元。

message 必需。規定要發送的消息。

headers 可選。規定額外的報頭,比如 From(發件人), Cc(抄送) 以及 Bcc(密送)。

parameters 可選。規定 sendmail 程式的額外參數。

需要特别mail()函數用法相當簡單,但并不我們使用mail()函數就可以直接發送郵件了,需要我們做一些配置,在Windows與Linux系統上的配置方式有些不同。我們發送郵件需郵件伺服器,如果是Linux伺服器需要在php.ini中的sendmail_path設定為伺服器的路徑,如果Linux在安裝時安裝了sendmail,可以這樣設定:

sendmail_path = /usr/sbin/sendmail

如果安裝的是Qmail等其他Mail伺服器則填寫對應的路徑即可。

如果是Windwos作業系統則需要配置SMTP和smtp_port着兩個參數,例如:

SMTP = localhost

smtp_port = 25

如果将SMTP設定為localhost則本機必須安裝郵件伺服器才能正常發信,當然也可以設定其他郵件伺服器的域名或IP位址,還有一個可選參數是sendmail_from可以設定預設的發件人郵箱。看一下php.ini的配置項:

php sll郵箱注冊_使用php發送電子郵件(phpmailer)

(2)使用fsockopen方式連接配接smtp伺服器發送

首先需要有一個smtp郵件伺服器,可以自己搭建也可以使用網易,新浪等免費的郵件伺服器,發送的過程大緻如下:

1.建立TCP連接配接

2.用戶端發送HELO指令以辨別發件人自己的身份,然後用戶端發送MAIL指令,伺服器端正希望以OK作為響應,表明準備接收

3.用戶端發送RCPT指令,以辨別該電子郵件的計劃接收人,可以有多個RCPT行,伺服器端則表示是否願意為收件人接受郵件

4.協商結束,發送郵件,用指令DATA發送

目前絕大多數的服務商都提供SMTP服務,如果我們要使用的MTA需要使用者認證(絕大多數的郵件服務商都需要認證)那就需要我們使用有效的使用者名密碼登

陸。以網易的163郵箱為例,首先注冊一個郵箱賬号比如:[email protected],這裡我們使用一個寫好的email.class.php來實作與

SMTP伺服器實作通信并發送郵件的功能,使用前需要在配置檔案config.php中配置一下各項參數,詳細說明可以參考附件中的示例代碼。

(3)使用phpMailer郵件類發送電子郵件(特别推薦)

先來幾句廢話:

phpMailer是一個非常強大的php發送郵件類,可以設定發送郵件位址、回複位址、郵件主題、html網頁,上傳附件,并且使用起來非常友善。

phpMailer的特點:

1、在郵件中包含多個 TO、CC、BCC 和 REPLY-TO。

2、平台應用廣泛,支援的 SMTP 伺服器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。

3、支援嵌入圖像,附件,HTML 郵件。

4、可靠的強大的調試功能。

5、支援 SMTP 認證。

6、自定義郵件頭。

7、支援 8bit、base64、binary 和 quoted-printable 編碼。

使用phpMailer發送郵件需要class.phpmailer.php和class.smtp.php兩個檔案,比較簡單的代碼片段:

require_once('./class.phpmailer.php');

include_once("class.smtp.php");

$mail = new PHPMailer(true); //執行個體化PHPMailer類,true表示出現錯誤時抛出異常

$mail->IsSMTP(); // 使用SMTP

try {

$mail->CharSet ="UTF-8";//設定郵件編碼

$mail->Host       = "smtp.163.com"; // SMTP server

$mail->SMTPDebug  = 1;// 啟用SMTP調試 1 = errors  2 =  messages

$mail->SMTPAuth   = true;// 伺服器需要驗證

$mail->Port       = 25;//預設端口

$mail->Username   = "testuser"; //SMTP伺服器的使用者帳号

$mail->Password   = "testpwd";//SMTP伺服器的使用者密碼

$mail->AddReplyTo('****@com133.com', '回複'); //收件人回複時回複到此郵箱

$mail->AddAddress('****@test.com', '李明'); //收件人如果多人發送循環執行AddAddress()方法即可 還有一個方法時清除收件人郵箱ClearAddresses()

$mail->SetFrom('[email protected]', '發件人');//發件人的郵箱

$mail->Subject = '這裡是郵件的标題';

$mail->Body = '郵件内容';

$mail->IsHTML(true);

$mail->Send();

echo "Message Sent OK";

} catch (phpmailerException $e) {

echo $e->errorMessage();//從PHPMailer捕獲異常

} catch (Exception $e) {

echo $e->getMessage();

}

?>

如果使用phpMailer發送html網頁隻需添加代碼:

$body = file_get_contents('tpl.html'); //擷取html網頁内容

$mail->MsgHTML(eregi_replace("[\]",'',$body));

注:使用MsgHTML()方法時發送的郵件内容不僅僅是html代碼,而且可以将html代碼中的圖檔等内容作為附件嵌入到頁面中一起發送,這在發送圖

文并茂的資訊時比較常用。并且使用該方法時無需對Body屬性指派也無需使用IsHTML()方法(即使使用也沒有效果)。

通過SSL安全連接配接發送郵件

目前很多郵箱使用SLL加密方式連接配接發信,例如谷歌的GMAIL目前隻支援加密連接配接,網易、騰訊等服務商目前也支援SLL加密方式連接配接。SSL協定端口号通常是465(具體視服務商而定),如果通過SSL方式發送郵件隻需增加一個屬性即可:

$mail->SMTPSecure = "ssl";

同時端口号更改為SSL的端口号,例如:

$mail->Port       = 465;

這樣就可以通過SSL協定發送郵件了。