對于程序員來說,項目中郵件發送是常用的一個功能, 我在這不講源碼,只講如何能快速地實現。
phpMailer 是一個非常強大的 php發送郵件類,可以設定發送郵件地址、回復地址、郵件主題、html網頁,上傳附件,并且使用起來非常方便。
在郵件中包含多個 TO、CC、BCC 和 REPLY-TO。
平臺應用廣泛,支持的 SMTP 服務器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。
支持嵌入圖像,附件,HTML 郵件。
可靠的強大的調試功能。
支持 SMTP 認證。
自定義郵件頭。
支持 8bit、base64、binary 和 quoted-printable 編碼。
從 github 上下載: https://github.com/PHPMailer/PHPMailer/
就這三個文件。
php開啟socket和openssl擴展,這種錯誤到時候解決就行
到這一步,我們就可以把這個壓縮包解壓到我們的項目中了,對于php來講,如果我們用了框架,比如think PHP, 那我們把他放到extend目錄下,如下圖:
think PHP
調用時用如下:
如果沒用框架,那就放到公共的三方引用目錄里面或直接就放到你當前php文件的同級目錄下,沒什么關系,引用路徑寫對就行,如下圖:
調用時如下
到這一步相信大家都沒什么問題,下面重點談談代碼層面的問題:
發送之前需要擁有自己的郵件服務器,測試的時候其實用自己申請的免費郵箱最方便了,不需要自己再搭建服務器了,可能要配置郵箱的SMTP服務,大部分公共郵箱(163、qq等)為了安全默認是關閉的。
網易郵箱配置如下圖:
QQ 郵箱相關配置如下圖:
我們調試的時候一般都是用免費的郵件服務器,QQ或163, 用QQ 郵箱時,大家容易忽略一個問題,那就是QQ郵箱走465端口,ssl協議,所以我們如下配置:
注意一點, 密碼為單獨的授權碼,不是你的郵箱密碼,有人卡在這了,哈哈
如果用別的郵箱,可以走25端口,但這有一點特別坑,就是阿里云默認25端口是關的,所以沒辦法,要么不用25端口,要么就是向阿里云申請25端口,要么就是換服務器供應商,如IDC等等,
用25端口就不用ssl協議了,
具體代碼就是這一條寫不寫的區別。
還有就是同時發送多人和多張附件的問題:
發送多人,處理參數,循環
發送附件,處理參數,循環
實在是沒什么好說的,就是附件路徑要直接指向你的二進制文件,相對路徑和絕對路徑都行,但不是網圖鏈接或三方圖片服務器鏈接,比如七牛云和阿里云oss,這種只能先下載到本地或服務器才行,注意個別下載授權問題,你懂的
到這一步差不多了,直接放代碼:
/** * 發送郵件(重構/支持附件) */ //參數有接收郵箱,可單人,可多人, 字符串和數組都行,看你 //主題,這不用多說 //內容, 可html,自動識別 //附件,上面已經說過注意事項 //三方包里面不用做任何修改 public static function send_email($sendTo, $titleName, $content, $file_list = []) { $email = array( 'charset' => 'UTF-8', //字符編碼 'host' => 'smtp.leju.com', //企業郵局域名 'port' => 25, //端口 'username' => '', //郵件發送人 'password' => '', //密碼 ); require_once 'Phpmailer/phpmailer.php'; $mail = new PHPMailer(); //實例化 //附件 if (!empty($file_list)) { foreach ($file_list as $key => $value) { $mail->AddAttachment($value); // 添加附件 } } $titleName = $titleName; // 使用SMTP方式發送 $mail->IsSMTP(); // 設置郵件的字符編碼 $mail->CharSet = $email['charset']; // 企業郵局域名 $mail->Host = $email['host']; $mail->Port = $email['port']; // 啟用SMTP驗證功能 $mail->SMTPAuth = true; //郵件發送人的用戶名(請填寫完整的email地址) $mail->Username = $email['username']; // 郵件發送人的 密碼 (授權碼) $mail->Password = $email['password']; //修改為自己的授權碼 //郵件發送者email地址 $mail->From = $email['username']; //發送郵件人的標題 $mail->FromName = ''; //做一下處理, 可以多個收件人,也可以一個 //收件人地址,可以替換成任何想要接收郵件的email信箱,格式是AddAddress("收件人email","收件人姓名") if (!empty($sendTo)) { $sendTo = explode(",", $sendTo); foreach ($sendTo as $k => $v) { $mail->AddAddress($v, substr($v, 0, strpos($v, '@'))); } } //回復的地址 $mail->AddReplyTo($email['username'], ""); //set email format to HTML //是否使用HTML格式 $mail->IsHTML(true); //郵件標題 $mail->Subject = $titleName; //郵件內容 $mail->Body = $content; //附加信息,可以省略 $mail->AltBody = ''; if (!$mail->Send()) { $mail_return_arr['code'] = false; $str = "郵件發送失敗. "; $str .= "錯誤原因: " . $mail->ErrorInfo; $mail_return_arr['info'] = $str; } else { $mail_return_arr['code'] = true; $str = "郵件發送成功"; $mail_return_arr['info'] = $str; } return $mail_return_arr; }
到這一步,大家可以自己進行測試了。
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://www.wangchenghua.com/post/7385/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料