PHP發(fā)送郵件需要開(kāi)啟下面幾個(gè)服務(wù):
SMTP:簡(jiǎn)單郵件傳輸協(xié)議,用來(lái)發(fā)送郵件
POP3:簡(jiǎn)單的郵件訪問(wèn)協(xié)議,單向的,本地對(duì)郵件的操作不會(huì)同步到郵件服務(wù)器,用來(lái)接收郵件
IMAP:是一種比POP3更復(fù)雜的郵件訪問(wèn)協(xié)議,是雙向的,本地對(duì)郵箱的操作會(huì)同步到郵箱服務(wù)器,用來(lái)接收郵件
發(fā)送之前需要擁有自己的郵件服務(wù)器,測(cè)試的時(shí)候其實(shí)用自己申請(qǐng)的免費(fèi)郵箱就行,不需要自己搭建服務(wù)器了,可能要配置郵箱的SMTP服務(wù),大部分公共郵箱(163、qq等)為了安全默認(rèn)是關(guān)閉的,需要手動(dòng)開(kāi)啟。
網(wǎng)易郵箱配置
QQ郵箱配置
基本的介紹完之后,開(kāi)始說(shuō)怎么用(以QQ郵箱為例)。
一、開(kāi)啟服務(wù)
登陸QQ郵箱,頂部有設(shè)置按鈕,點(diǎn)擊賬戶,拉到最后,開(kāi)啟第一行的 POP3/SMTP 服務(wù),開(kāi)啟之后會(huì)有一串密碼,復(fù)制下來(lái)一會(huì)要用。
二、下載安裝PHPMailer
1、從 github 上下載: https://github.com/PHPMailer/PHPMailer/
2、使用 composer 安裝:
composer require phpmailer/phpmailer
如果只是發(fā)送郵件,只留phpmailer.php和smtp.php就行。在vendor文件夾下新建phpmailer文件夾,把下載的文件放到這個(gè)文件夾下,打開(kāi)composer.json文件,在autoload下加入一行代碼 phpmailer 是命名空間名,vendor/phpmailer是對(duì)應(yīng)的文件名
"autoload": { "psr-4": { "app\\": "application", "phpmailer\\": "vendor/phpmailer" } },
分別打開(kāi)PHPMailer.php和SMTP.php,修改其命名空間,為 “ namespace phpmailer; ”,兩個(gè)文件都要修改,要不然會(huì)找不到文件
打開(kāi)cmd,進(jìn)入到項(xiàng)目根目錄,使用composer命令加載第三方類(lèi)庫(kù),執(zhí)行composer dump-autoload
三、控制器代碼
<?phpnamespace app\index\controller;use think\Controller;use phpmailer\PHPMailer;use phpmailer\Exception;class Sendmail extends Controller{ // public function index() { $toemail = '*****@126.com'; //這里寫(xiě)的是收件人的郵箱 $mail=new Phpmailer(); $mail->isSMTP(); // 使用SMTP服務(wù)(發(fā)送郵件的服務(wù)) $mail->CharSet = "utf8"; // 編碼格式為utf8,不設(shè)置編碼的話,中文會(huì)出現(xiàn)亂碼 $mail->Host = "smtp.qq.com"; // 發(fā)送方的SMTP服務(wù)器地址 $mail->SMTPAuth = true; // 是否使用身份驗(yàn)證 $mail->Username = "12*****186@qq.com"; // 申請(qǐng)了smtp服務(wù)的郵箱名(自己的郵箱名) $mail->Password = "hcstaffeplbcjgii"; // 發(fā)送方的郵箱密碼,不是登錄密碼,是qq的第三方授權(quán)登錄碼,要自己去開(kāi)啟(之前叫你保存的那個(gè)密碼) $mail->SMTPSecure = "ssl"; // 使用ssl協(xié)議方式, $mail->Port = 465; // QQ郵箱的ssl協(xié)議方式端口號(hào)是465/587 $mail->setFrom("12*****186@qq.com","測(cè)試發(fā)件人"); // 設(shè)置發(fā)件人信息,如郵件格式說(shuō)明中的發(fā)件人, $mail->addAddress($toemail,'測(cè)試收件人'); // 設(shè)置收件人信息,如郵件格式說(shuō)明中的收件人 $mail->addReplyTo("12*****186@qq.com","Reply"); // 設(shè)置回復(fù)人信息,指的是收件人收到郵件后,如果要回復(fù),回復(fù)郵件將發(fā)送到的郵箱地址 //$mail->addCC("xxx@163.com"); // 設(shè)置郵件抄送人,可以只寫(xiě)地址,上述的設(shè)置也可以只寫(xiě)地址(這個(gè)人也能收到郵件) //$mail->addBCC("xxx@163.com"); // 設(shè)置秘密抄送人(這個(gè)人也能收到郵件) //$mail->addAttachment("bug0.jpg"); // 添加附件 $mail->Subject = "這是一個(gè)測(cè)試郵件"; // 郵件標(biāo)題 $mail->Body = '<h1>這里是郵件內(nèi)容</h1>' . date('Y-m-d H:i:s');// 郵件正文 //$mail->AltBody = "This is the plain text純文本";// 這個(gè)是設(shè)置純文本方式顯示的正文內(nèi)容,如果不支持Html方式,就會(huì)用到這個(gè),基本無(wú)用** if(!$mail->send()){ // 發(fā)送郵件 echo "Message could not be sent."; echo "Mailer Error: ".$mail->ErrorInfo; // 輸出錯(cuò)誤信息 }else{ echo ''; return '發(fā)送成功'; } }}
四、運(yùn)行
sendmail.bat
@echo offstart http://網(wǎng)址/sendmail.phpexit
五、運(yùn)行結(jié)果
發(fā)件人郵箱
收件人郵箱
聯(lián)系客服