日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

腾讯企业邮箱发送邮件php,Laravel5.* 使用Smtp发送邮件以及常见报错解决(腾讯企业邮箱、163、QQ、Gmail 等) - Laravel学习网...

發布時間:2023/12/16 php 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 腾讯企业邮箱发送邮件php,Laravel5.* 使用Smtp发送邮件以及常见报错解决(腾讯企业邮箱、163、QQ、Gmail 等) - Laravel学习网... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、快速解決郵件發送

Laravel 提供了非常簡單的郵件發送 API,但是文檔卻不是太清晰,再加上它采用傳遞閉包(回調函數)的方式調用,導致郵件發送的使用門檻偏高。看文檔也是云里霧里,那我們來簡單的來講一下發送郵件,只需要3步即可,

1、有一個發送郵箱賬號和密碼:

無論是什么郵箱,要發送郵件,必須要開啟IMAP/SMTP服務和POP/SMTP服務,企業郵箱是默認開啟的,直接使用即可

2、修改.env文件的配置,我們這里以騰訊企業郵箱為例:

MAIL_DRIVER=smtp

MAIL_HOST=smtp.exmail.qq.com

MAIL_PORT=465

MAIL_USERNAME=user@company.com

MAIL_PASSWORD=password

MAIL_ENCRYPTION=ssl

driver用于配置默認的郵件發送驅動,MAIL_HOST是郵箱所在主機,MAIL_PORT為發送端口,MAIL_USERNAME為發送郵箱,MAIL_PASSWORD為郵箱密碼

3、發送測試郵件

Mail::raw('test mail', function ($m) {

$m->from('1@earnp.com', 'User');

$m->to('71@qq.com')->subject('test email');

});

好的,到這里郵件就發送成功了,注意使用前要use Mail一下,接下來深入解讀

二、深入解讀

1、配置文件

Laravel集成了SwiftMailer庫進行郵件發送,郵件配置文件位于config/mail.php:

return [

// port用于配置郵箱發送服務端口號,比如一般默認值是25,但如果設置SMTP使用SSL加密,該值為465。

'driver' => env('MAIL_DRIVER', 'smtp'),

// host是郵箱所在主機,比如我們使用163郵箱,對應值是smtp.163.com,使用QQ郵箱的話,對應值是smtp.qq.com。

'host' => env('MAIL_HOST', 'smtp.mailgun.org'),

// port用于配置郵箱發送服務端口號,比如一般默認值是25,但如果設置SMTP使用SSL加密,該值為465。

'port' => env('MAIL_PORT', 587),

// from配置項包含address和name,前者表示發送郵箱,后者表示發送郵件使用的用戶名。

'from' => ['address' => null, 'name' => null],

// encryption表示加密類型,可以設置為null表示不使用任何加密,也可以設置為tls/ssl。

'encryption' => env('MAIL_ENCRYPTION', 'tls'),

// username表示郵箱賬號,比如yaojinbu@163.com

'username' => env('MAIL_USERNAME'),

// password表示上述郵箱登錄對應登錄密碼。

'password' => env('MAIL_PASSWORD'),

// sendmail是在設置driver為sendmail時使用,用于指定sendmail命令路徑。

'sendmail' => '/usr/sbin/sendmail -bs',

// pretend用于配置是否將郵件發送記錄到日志中,默認為false則發送郵件不記錄日志,如果為true的話只記錄日志不發送郵件,這一配置在本地開發中調試時很有用。

'pretend' => false,

]

2、簡單郵件發送實現

在該控制器中添加郵件發送動作send(),我們使用Mail門面的send方法發送郵件,我們先發送一個最簡單的郵件:

namespace App\Http\Controllers;

use Mail;

class MailController extends Controller

{

public function send()

{

$flag = Mail::send('emails.test',['name'=>'Laravel學習網'],function($message){

$to = '123@qq.com';

$message ->to($to)->subject('測試郵件');

});

if($flag){

echo '發送郵件成功,請查收!';

}else{

echo '發送郵件失敗,請重試!';

}

}

}

Mail::send需要傳遞三個參數,第一個是郵件視圖,第二個是傳入視圖的數據,第三個是一個閉包,該閉包中定義了收件人、抄送人(如果有的話)、郵件主題、附件等信息。郵件的主體內容位于局部視圖中,下面我們就來定義這個局部視圖,在resources/views/emails目錄下新建test.blade.php,編輯其內容如下:

{{$name}},這是一封測試郵件

運用上面的路由調用控制器即可收到郵件了

3、更簡單的純文本郵件發送

上面的示例僅僅是發送一個字符串,對于純文本字符串郵件發送,還有更簡單的方法:

Mail::raw('這是一封測試郵件', function ($message) {

$to = '123@qq.com';

$message ->to($to)->subject('測試郵件');

});

這樣的話無需創建視圖即可完成郵件發送。

4、發送帶附件的郵件(中文亂碼解決)

當然,郵件內容往往不僅僅是純文本這么簡單,有時候我們會在郵件中加上附件,那么這該如何實現呢?

$flag = Mail::send('emails.test',['name'=>$name],function($message){

$to = '123@qq.com';

$message->to($to)->subject('測試郵件');

$attachment = storage_path('app/files/test.doc');

//在郵件中上傳附件

$message->attach($attachment,['as'=>'測試文檔.doc']);

});

從代碼可知我們使用閉包中$message實例上的attach方法上傳附件,該方法第一個參數是附件地址,第二個參數是一些額外參數,這里我們通過as指定附件在郵件中的顯示名稱。

注:需要注意的是$message實際上是Illuminate\Mail\Message的實例,我們可以在$message上調用Message類的所有方法。

運行陸游,這樣在收件箱中可以看到附件,但附件名稱出現中文亂碼,解決辦法如下:

$message->attach($attachment,['as'=>"=?UTF-8?B?".base64_encode('測試文檔')."?=.doc"]);

5、發送帶圖片的郵件

除了附件之外,有時候為了讓郵件內容更豐富,還會在郵件內容中插入圖片,我們固然可以在郵件視圖中硬編碼寫入圖片路徑,但是這顯然很笨重,靈活性很差,Laravel為我們提供了便捷方法——在視圖中使用$message上的embed方法:

{{$name}},這是一封測試郵件

這里的$message就是上述郵件發送閉包中的$message,Laravel內部自動將該變量傳遞到郵件視圖。當然我們還需要在控制器動作中傳入$imgPath變量;同時,我們也可以直接使用這種類型發送郵件哦:

$name = 'Laravel學習網';

$imgPath = 'http://host.com/1.jpg';

$flag = Mail::send('emails.test',['name'=>$name,'imgPath'=>$imgPath],function($message){

$to = '123@qq.com';

$message->to($to)->subject('測試郵件');

$attachment = storage_path('app/files/test.doc');

//在郵件中上傳附件

$message->attach($attachment,['as'=>"=?UTF-8?B?".base64_encode('測試文檔')."?=.doc"]);

});

在瀏覽器中訪問http://laravel.app:8000/mail/send發送郵件,郵件發送成功后去收件箱查看,圖片已經插入到郵件內容中。

embedData

此外還支持發送原生的圖片數據到郵件中,即將本地圖片讀取到內存然后渲染到郵件視圖,這可以通過$message上的embedData實現。

首先我們修改控制器動作如下:

$name = 'Laravel學習網';

//$imgPath = 'http://host.com/1.jpg';

$image = Storage::get('images/test.jpg');

$flag = Mail::send('emails.test',['name'=>$name,'image'=>$image],function($message){

$to = '123@qq.com';

$message->to($to)->subject('測試郵件');

$attachment = storage_path('app/files/test.doc');

//在郵件中上傳附件

$message->attach($attachment,['as'=>"=?UTF-8?B?".base64_encode('測試文檔')."?=.doc"]);

});

記得在MailController頂部加上use Storage,然后修改郵件視圖test.blade.php如下:

{{$name}},這是一封測試郵件

最后去瀏覽器中訪問http://laravel.app:8000/mail/send發送郵件,郵件發送成功去收件箱查看郵件內容

如果你是Laravel 6.*+可以參考:laravel 6.7.發送郵件

原創文章,轉載請注明 :Laravel5.* 使用Smtp發送郵件以及常見報錯解決(騰訊企業郵箱、163、QQ、Gmail 等) - Laravel學習網

原文出處: https://phpartisan.cn/news/5.html

問題交流群 :168117787

總結

以上是生活随笔為你收集整理的腾讯企业邮箱发送邮件php,Laravel5.* 使用Smtp发送邮件以及常见报错解决(腾讯企业邮箱、163、QQ、Gmail 等) - Laravel学习网...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。