使用php
來進行郵件的發送,有很多種方法。 可以通過php
內置的函數mail()
,但是使用mail()
函數發送郵件就必須要有一臺無需SMTP驗證就可以發信的郵件服務器。而現在的SMTP郵件服務器基本上都是需要驗證的,所以要想使用它發郵件就只能自己在本地搭一個不需要驗證的SMTP服務器,這就比較麻煩了,不過優點在于,配置好了之后,使用起來比較簡單。 如果不想麻煩,或是沒有SMTP服務器,那么可以借助第三方的郵件服務器,例如 163、QQ等,QQ郵箱想必絕大多數人都有,所以介紹使用QQ郵箱來發送郵件的具體過程,親測有效。
PHPMailer的介紹:
優點:
可運行在任何平臺之上 支持SMTP驗證 發送郵時指定多個收件人,抄送地址,暗送地址和回復地址;注:添加抄送、暗送僅win平臺下smtp方式支持 支持多種郵件編碼包括:8bit,base64,binary和quoted-PRintable 支持冗余SMTP服務器,即可以指定主smtp服務器地址也只可以指定備份smtp服務器 支持帶附件的郵件,可以為郵件添加任意格式的附件—當然得你的服務器有足夠大的帶寬支撐 自定義郵件頭信息,這跟php中通過header函數發送頭信息類似 支持將郵件正文制作成HTMl內容,那么就可以在郵件正文中插入圖 片 靈活的debug支持 經測試兼容的SMTP服務器包括:Sendmail,qmail,Postfix,Imail,Exchange
等
PHPMailer
的獲?。篽ttps://github.com/PHPMailer/PHPMailer,直接使用Git
將整個項目克隆下來,如果沒有Git
,選擇Download Zip
,下載下來一個 ZIP
壓縮包,然后解壓就行,當前的版本號是5.2.22
。

1. 確保php
環境具有php_openssl.dll
并且開啟
php
服務器開啟后,訪問phpinfo.php
這個文件,如果能找到如下一項,則表明已經存在并開啟了php_openssl.dll
擴展:

如果沒有,則必須手動開啟,首先檢查php.ini中;extension=php_openssl.dll
是否存在, 如果存在的話去掉前面的注釋符;
, 如果不存在這行,那么添加extension=php_openssl.dll
,然后檢查ext
目錄下是否存在php_openssl.dll
這個文件,如果有那就沒事了,如果沒有,則需要到網上或是其他地方下載下來,放到這個目錄里。 如果還有問題可以看下這里 http://www.haorooms.com/post/php_openssl
2. 開啟QQ郵箱的 SMTP
服務
進入 qq郵箱,點擊“設置”:

切換到“賬戶”標簽:

開啟 POP3/SMTP服務
,使用手機發送一條驗證短信就行了,我這里已經開啟好了

點擊“生成授權碼”,應該還會讓你發一條驗證短信,驗證完成之后頁面上就會出現一個 16
的位授權碼,這個才是最終想要得到的東西,可以先記下來:

3. 進入正題
前期準備工作做好之后,就可以著手將 QQ
郵箱和PHPMailer
配合起來了。 新建一個測試文件,例如就叫PHPMailer_test.php
,然后再其中加入下面的代碼:
<?php/*發送郵件方法 *@param $to:接收者 $title:標題 $content:郵件內容 *@return bool true:發送成功 false:發送失敗 */function sendMail($to,$title,$content) { // 這個PHPMailer 就是之前從 Github上下載下來的那個項目 require './PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; // 是否啟用smtp的debug進行調試 開發環境建議開啟 生產環境注釋掉即可 默認關閉debug調試模式, // 可選擇的值有 1 、 2 、 3 // $mail->SMTPDebug = 2; //使用smtp鑒權方式發送郵件 $mail->isSMTP(); //smtp需要鑒權 這個必須是true $mail->SMTPAuth = true; // qq 郵箱的 smtp服務器地址,這里當然也可以寫其他的 smtp服務器地址 $mail->Host = 'smtp.qq.com'; //smtp登錄的賬號 這里填入字符串格式的qq號即可 $mail->Username = '9019208392@qq.com'; // 這個就是之前得到的授權碼,一共16位 $mail->PassWord = 'smegbvpsssmddcfi'; //設置使用ssl加密方式登錄鑒權 $mail->SMTPSecure = 'ssl'; // //設置ssl連接smtp服務器的遠程服務器端口號,可選465或587 $mail->Port = 465; //設置smtp的helo消息頭 這個可有可無 內容任意 // $mail->Helo = 'Hello smtp.qq.com Server'; //設置發件人的主機域 可有可無 默認為localhost 內容任意,建議使用你的域名 // $mail->Hostname = 'http://www.lsgogroup.com'; //設置發送的郵件的編碼 也可選 GB2312 $mail->CharSet = 'UTF-8'; $mail->setFrom('9019208392@qq.com', 'send_user_name'); // $to 為收件人的郵箱地址,如果想一次性發送向多個郵箱地址,則只需要將下面這個方法多次調用即可 $mail->addAddress($to); //郵件正文是否為html編碼 注意此處是一個方法 不再是屬性 true或false $mail->isHTML(true); // 該郵件的主題 $mail->Subject = $title; // 該郵件的正文內容 $mail->Body = $content; //為該郵件添加附件 該方法也有兩個參數 第一個參數為附件存放的目錄(相對目錄、或絕對目錄均可) 第二參數為在郵件附件中該附件的名稱 // $mail->addAttachment('./d.jpg','mm.jpg'); //同樣該方法可以多次調用 上傳多個附件 // $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js'); // 使用 send() 方法發送郵件 if(!$mail->send()) { return 'Mailer Error: ' . $mail->ErrorInfo; } else { return "/nMessage has been sent"; }}// 調用發送方法,并在頁面上輸出發送郵件的狀態var_dump(sendMail('4819283873@qq.com','會議主題','今天下午開會'));測試項目已上傳,從這里下載