使用PHPMailer編寫發送郵件php
PHPMailer需PHP的socket擴展支持,而PHPMailer連接qq域名郵箱時須要ssl加密方式(qq郵箱最近作了限制,新開域名郵箱再也不容許經過smtp協議的25端口的普通連接方式連接,只容許ssl的465或587端口[個人一個域名郵箱內測期開通的域名郵箱目前25端口仍是能夠連接的,多是安全策略,限制了新開域名郵箱帳戶的25端口]),固php還得openssl的支持,能夠查看phpinfohtml
準備工做:安全
一、PHPMailer類文件服務器
二、有一個郵箱帳號,這裏我使用的是QQ郵箱socket
【注】這裏有一點尤爲要引發注意啦,必定要保證該郵箱帳號的SMTP/POP3服務是開啓的,不然是沒有辦法鏈接到郵箱服務器,更不可能發送郵件的。函數
具體查看:post
【設置】-->【郵箱設置】-->【帳戶】-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務測試
在進行此操做時,常會出現一下錯誤:ui
一、Function set_magic_quotes_runtime() is deprecated?編碼
【問題原因】PHP5.3和PHP6.0以後移除了set_magic_quotes_runtime()函數
【解決之道】就是用ini_set()辦法替代原有的set_magic_quotes_runtime語法,例如:
二、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; } } ?>