使用PHPMailer編寫發送郵件
PHPMailer需PHP的socket擴展支持,而PHPMailer鏈接qq域名郵箱時需要ssl加密方式(qq郵箱最近做了限制,新開域名郵箱不再允許通過smtp協議的25端口的普通鏈接方式鏈接,只允許ssl的465或587端口[我的一個域名郵箱內測期開通的域名郵箱目前25端口還是可以鏈接的,可能是安全策略,限制了新開域名郵箱賬戶的25端口]),固php還得openssl的支持,可以查看phpinfo
准備工作:
1、PHPMailer類文件
2、有一個郵箱賬號,這里我使用的是QQ郵箱
【注】這里有一點尤其要引起注意啦,一定要保證該郵箱賬號的SMTP/POP3服務是開啟的,否則是沒有辦法連接到郵箱服務器,更不可能發送郵件的。
具體查看:
【設置】-->【郵箱設置】-->【賬戶】-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務

在進行此操作時,常會出現一下錯誤:
1、Function set_magic_quotes_runtime() is deprecated?
【問題緣由】PHP5.3和PHP6.0之后移除了set_magic_quotes_runtime()函數
【解決之道】就是用ini_set()辦法替代原有的set_magic_quotes_runtime語法,例如:

2、Password command failed: 535 Error: authentication failed?
【解決之道】將$mail->Password該配置項的值修改為SMTP服務器的授權碼即可,而不是登錄SMTP服務器的密碼。
<?php
$user_name = "李武明"; $content = <<<html <pre> 親愛的$user_name: 您好,您的小米帳號117314868於2016-12-17 12:03:30登錄小米雲服務。如果此登錄行為非您本人操作,請立即登錄https://account.xiaomi.com 修改密碼 如果您對此通知有任何疑問,請訪問<a href="https://www.baidu.com">http://www.mi.com/service/contact</a> 聯系我們的客服進行咨詢 此郵件由系統自動發出,請勿直接回復。 </pre> html; $addAddress = array('1459543371@qq.com','1169714343@qq.com','liwuming900913@163.com'); $config = array( 'fromName' => '李武明', 'userName' => '1459543371@qq.com', 'userPwd' => 'lxpuoxthkatdhjic', 'from' => '1459543371@qq.com', 'subject' => 'PHPMailer發送郵件的測試', 'content' => $content, 'addAttachment' => array("./zhuomian1.png","./zhuomian2.png","./zhuomian3.png","./zhuomian4.png") ); postmail($addAddress,$config); /** * @brief:發送email * @param $to 收件人 * @param $config SMTP服務器相關配置信息 * @param $content 郵件內容 */ function postmail($addAddress,$config){ require_once("./PHPMailer/class.phpmailer.php"); $mail = new PHPMailer(); //示例化PHPMailer核心類 //SMTP服務器的相關信息設置 $mail->SMTPDebug = 1; //是否啟用smtp的debug進行調試 開發環境建議開啟 生產環境注釋掉即可 默認關閉debug調試模式 $mail->isSMTP(); //使用smtp鑒權方式發送郵件 $mail->SMTPAuth=true; //smtp需要鑒權 這個必須是true $mail->Host = 'smtp.qq.com'; //鏈接qq域名郵箱的服務器地址 $mail->SMTPSecure = 'ssl'; //設置使用ssl加密方式登錄鑒權 $mail->Port = 465; //設置ssl連接smtp服務器的遠程服務器端口號 可選465或587 $mail->CharSet = 'UTF-8'; //設置發送的郵件的編碼 //發件人信息相關設置 $mail->FromName = $config['fromName']; //設置發件人姓名(昵稱) 任意內容,顯示在收件人郵件的發件人郵箱地址前的發件人姓名 $mail->Username = $config['userName']; //smtp登錄的賬號 這里填入字符串格式的qq號即可 $mail->Password = $config['userPwd']; //smtp登錄的密碼 $mail->From = $config['from']; //設置發件人郵箱地址 //郵件內容設置 $mail->isHTML(true); //郵件正文是否為html編碼 注意此處是一個方法 不再是屬性 true或false //設置收件人郵箱地址 該方法有兩個參數 第一個參數為收件人郵箱地址 if(empty($addAddress)){ return false; }else if(is_array($addAddress)){ foreach($addAddress as $value){ if(is_array($value)){ $mail->addAddress($value['email'],$value['text']); }else{ $mail->addAddress($value); } } }else{ $mail->addAddress($value['email']); } //為該郵件添加附件 該方法也有兩個參數 第一個參數為附件存放的目錄(相對目錄、或絕對目錄均可) 第二參數為在郵件附件中該附件的名稱 if(is_array($config['addAttachment'])){ foreach($config['addAttachment'] as $value){ $mail->addAttachment($value); } }else if(!empty($config['addAttachment'])){ $mail->addAttachment($config['addAttachment']); } $mail->Subject = $config['subject']; //添加該郵件的主題 $mail->Body = $config['content']; //添加郵件正文 上方將isHTML設置成了true,則可以是完整的html字符串 如:使用file_get_contents函數讀取本地的html文件 $status = $mail->send(); //簡單的判斷與提示信息 if($status) { echo '發送郵件成功'; }else{ echo '發送郵件失敗,錯誤信息未:'.$mail->ErrorInfo; } } ?>
