下面以qq郵箱為例,按照這四個方面來介紹phpmaiiler的使用:
phpmailer的介紹步驟一:使qq郵箱能夠發送郵件步驟二:使php能夠使用qq郵箱發送郵件步驟三:編寫發送郵件代碼 thinkphp使用phpmailer 發送郵件
phpmailer的介紹
可運行在任何平臺之上;支持smtp驗證;發送郵時指定多個收件人,抄送地址,暗送地址和回復地址;注:添加抄送、暗送僅win平臺下smtp方式支持;支持多種郵件編碼包括:8bit,base64,binary和quoted-printable;自定義郵件頭信息,這跟php中通過header函數發送頭信息類似支持將郵件正文制作成html內容,那么就可以在郵件正文中插入圖片;經測試兼容的smtp服務器包括:sendmail,qmail,postfix,imail,exchange等。
步驟一:使qq郵箱能夠發送郵件
我們的郵箱本來可以發送郵件,但是要實現在我們的網站中發送郵件,那就要設置一下我們的qq郵箱了,因為此時我們的網站現在是作為一個第三方客戶端存在的,所以需要用到的是smtp服務器來發送,在這里建議把前面的兩項開啟了!
進入qq郵箱->點擊設置->點擊賬戶
當你點擊開啟的時候,它會提示:
當你完成以上步驟之后,就會得到一個授權碼,你可以先復制出來,待會我們會用到(開啟兩項的話會得到兩個授權碼,一定要最新的!)。
步驟二:使php能夠使用qq郵箱發送郵件
phpmailer需要php的socket擴展支持,而phpmailer鏈接qq域名郵箱時需要ssl加密方式,還得php的openssl擴展支持,可以使用phpinfo查看是否開啟擴展。
如未開啟,到php安裝目錄找到php.ini中開啟兩個擴展支持。
步驟三:編寫發送郵件代碼
index.html代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!doctype html> <html lang= "en" > <head> <meta charset= "utf-8" > <title>document</title> </head> <body> <form action= "./index.php" method= "post" > 郵箱:<input type= "text" id= "mail" name= "mail" /> 標題:<input type= "text" id= "title" name= "title" /> 內容<input type= "text" id= "content" name= "content" /> <input type= "submit" value= "發送" /> </form> </body> </html> |
封裝一個公共的方法(寫在 functions.php 文件中):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
/** *發送郵件方法 *@param $to:接收者 $title:標題 $content:郵件內容 *@return bool true:發送成功 false:發送失敗 */ function sendmail( $to , $title , $content ){ require_once ( "phpmailer/class.phpmailer.php" ); require_once ( "phpmailer/class.smtp.php" ); //實例化phpmailer核心類 $mail = new phpmailer(); //使用smtp鑒權方式發送郵件 $mail ->issmtp(); //smtp需要鑒權 這個必須是true $mail ->smtpauth=true; //鏈接qq域名郵箱的服務器地址 $mail ->host = 'smtp.qq.com' ; //設置使用ssl加密方式登錄鑒權 $mail ->smtpsecure = 'ssl' ; //設置ssl連接smtp服務器的遠程服務器端口號,以前的默認是25,但是現在新的好像已經不可用了 可選465或587 $mail ->port = 465; //設置發件人的主機域 可有可無 默認為localhost 內容任意,建議使用你的域名 $mail ->hostname = 'http://www.lsgogroup.com' ; //設置發送的郵件的編碼 可選gb2312 我喜歡utf-8 據說utf8在某些客戶端收信下會亂碼 $mail ->charset = 'utf-8' ; //設置發件人姓名(昵稱) 任意內容,顯示在收件人郵件的發件人郵箱地址前的發件人姓名 $mail ->fromname = '發件人姓名(昵稱)' ; //smtp登錄的賬號 這里填入字符串格式的qq號即可 //smtp登錄的密碼 使用生成的授權碼(就剛才保存的最新的授權碼) $mail ->password = '最新的授權碼' ; //設置發件人郵箱地址 這里填入上述提到的“發件人郵箱” //郵件正文是否為html編碼 注意此處是一個方法 不再是屬性 true或false $mail ->ishtml(true); //設置收件人郵箱地址 該方法有兩個參數 第一個參數為收件人郵箱地址 第二參數為給該地址設置的昵稱 不同的郵箱系統會自動進行處理變動 這里第二個參數的意義不大 $mail ->addaddress( $to , '尊敬的客戶' ); //添加多個收件人 則多次調用方法即可 // $mail->addaddress('[email protected]','尊敬的客戶'); //添加該郵件的主題 $mail ->subject = $title ; //添加郵件正文 上方將ishtml設置成了true,則可以是完整的html字符串 $mail ->body = $content ; $status = $mail ->send(); //判斷與提示信息 if ( $status ) { return true; } else { return false; } } |
index.php代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php require_once ( "./functions.php" ); $to = $_post [ 'mail' ]; $title = $_post [ 'title' ]; $content = $_post [ 'content' ]; $flag = sendmail( $to , $title , $content ); if ( $flag ){ echo "發送郵件成功!" ; } else { echo "發送郵件失敗!" ; } ?> |
如果你使用的是qq企業郵箱,那么鏈接qq域名郵箱的服務器地址和smtp登錄的密碼就不同了:
1
2
3
4
|
//鏈接qq域名郵箱的服務器地址 $mail ->host = 'smtp.exmail.qq.com' ; //smtp登錄的密碼 (qq企業郵箱的登錄密碼) $mail ->password = '登錄密碼' ; |
thinkphp使用phpmailer 發送郵件
phpmailer解壓到thinkphplibraryvendor
在common文件夾新建function.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/** * 郵件發送函數 * @param $to:接收者 $title:標題 $content:郵件內容 * @return bool true:發送成功 false:發送失敗 */ function sendmail( $to , $title , $content ) { vendor( 'phpmailer.phpmailerautoload' ); vendor( 'phpmailer.class.smtp' ); $mail = new phpmailer(); //實例化 $mail ->issmtp(); // 啟用smtp $mail ->host=c( 'mail_host' ); //smtp服務器的名稱 $mail ->smtpsecure = c( 'mail_secure' ); $mail ->port = c( 'mail_port' ); $mail ->smtpauth = c( 'mail_smtpauth' ); //啟用smtp認證 $mail ->username = c( 'mail_username' ); //你的郵箱名 $mail ->password = c( 'mail_password' ) ; //郵箱密碼 $mail ->from = c( 'mail_from' ); //發件人地址(也就是你的郵箱地址) $mail ->fromname = c( 'mail_fromname' ); //發件人姓名 $mail ->addaddress( $to , "尊敬的客戶" ); $mail ->wordwrap = 50; //設置每行字符長度 $mail ->ishtml(c( 'mail_ishtml' )); // 是否html格式郵件 $mail ->charset=c( 'mail_charset' ); //設置郵件編碼 $mail ->subject = $title ; //郵件主題 $mail ->body = $content ; //郵件內容 $mail ->altbody = "您好" ; //郵件正文不支持html的備用顯示 return ( $mail ->send()); } |
添加配置文件config.php
1
2
3
4
5
6
7
8
9
10
11
|
// 配置郵件發送服務器 'mail_host' => 'smtp.qq.com' , //smtp服務器的名稱 'mail_smtpauth' =>true, //啟用smtp認證 'mail_password' =>'xxxxxx, //郵箱密碼 'mail_charset' => 'utf-8' , //設置郵件編碼 'mail_ishtml' =>true, // 是否html格式郵件 'mail_port' => '465' , //設置ssl連接smtp服務器的遠程服務器端口號 'mail_secure' => 'ssl' , //設置使用ssl加密方式登錄鑒權 |
最后就是使用phpmailer發送郵件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!doctype html> <html lang= "en" > <head> <meta charset= "utf-8" > <title>document</title> </head> <body> <form action= "/index.php/admin/test/add" method= "post" enctype= "multipart/form-data" > 郵箱:<input type= "text" id= "mail" name= "mail" /> 標題:<input type= "text" id= "title" name= "title" /> 內容<input type= "text" id= "content" name= "content" /> <input type= "submit" value= "發送" /> </form> </body> </html> |
1
2
3
4
5
6
|
public function add(){ if (sendmail( $_post [ 'mail' ], $_post [ 'title' ], $_post [ 'content' ])) echo "發送成功" ; else echo "發送失敗" ; } |
原文鏈接:https://segmentfault.com/a/1190000012390279