1.应用场景

框架中邮件功能.

2.学习/操作

环境:

Windows10 64位 专业版

laravel 5.8

QQ的SMTP服务. //163的SMTP实践总是报错, 于是转向QQ

补充: 163邮箱可以使用.

测试结果如下:

163邮箱在.env配置文件

MAIL_HOST=smtp.163.com
MAIL_PORT=465  //使用ssl或者tls时加密传输,否则25
MAIL_USERNAME=17727866624@163.com
MAIL_PASSWORD=sdfsadfx114  //随便写的授权码
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=17727866624@163.com
MAIL_FROM_NAME=William_Ning

qq邮箱测试如下:

.env配置文件内容:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=25
MAIL_USERNAME=1158885641@qq.com
MAIL_PASSWORD=sdfssdfsadf  //随便写的授权码
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=1158885641@qq.com
MAIL_FROM_NAME=blog57.test

Gmail配置 //待验证 TBD

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=myusername@gmail.com
MAIL_PASSWORD="mypass"
MAIL_ENCRYPTION=tls

github仓库:  https://github.com/ningxiaofa/laravel58.test/tree/master

备注: 这里只是做测试, 于生产环境中, 邮件服务如何实现 ? TBD

操作:

方式一: 推荐

参见: https://xueyuanjun.com/post/19513#bkmrk-%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6

方式二:  //面向过程开发 不推荐

https://www.jianshu.com/p/8ccb2820df23/

方式一步骤:

1.首先查看config/mail.php 的配置项

重点关注下:

此外,你可以在配置文件 config/mail.php 中定义全局的「回复」地址://一般业务逻辑不是如此  TBD

'reply_to' => ['address' => 'example@example.com', 'name' => 'App Name'],

2.配置.env文件

MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=25
MAIL_USERNAME=1158885641@qq.com
MAIL_PASSWORD=tjsbahbfveivjsad //QQ邮箱开启POP/SMTP服务时生成的授权码, 可手机短信验证重新生成. 这里是乱写的
MAIL_ENCRYPTION=null //不加密, 可以使用ssl tls
MAIL_FROM_ADDRESS=1158885641@qq.com
MAIL_FROM_NAME=Laravel58.test

3.新建邮件类

php artisan make:mail OrderShipped

生成如下:

4.编写邮件类代码

主要代码都是写在build方法中.

___constrcu()构造函数只是用来初始化赋值[传递参数作用]

代码见: https://github.com/ningxiaofa/laravel58.test/blob/master/app/Mail/OrderShipped.php

核心代码

public function build()
{
    //return $this->view('view.name');

//成功发送!!  纯文本与附件[多个]  详情见: https://xueyuanjun.com/post/19513#bkmrk-%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6
    return $this->from(env('MAIL_FROM_ADDRESS'))//example@example.com
        ->view('emails.orders.shipped')
        ->with([
            'orderName' => $this->order->name,
            'orderPrice' => $this->order->price,
            ])
        ->attach($this->filePath, [
            'as' => 'file_name.txt',
            'mime' => 'text/plain',//pdf是图片格式: application/pdf  普通文本: text/plain  html: text/html
        ])->attach('G:\phpstudy_pro\WWW\test.png', [
            'as' => 'file_name.png',
            'mime' => 'image/png',//pdf是图片格式: application/pdf  普通文本: text/plain  html: text/html
        ]);
}

5.生成数据表迁移文件, 控制器和模型类[调用邮件类]

可以单独分别执行命令:

php artisan make:controller Web/Ordercontroller

php artisan make:model Order

php artisan make:table create_orders_table

或者

php artisan make:model Order -m -c //同时生成迁移文件,  模型 ,  控制器

6.业务代码编写

控制器/方法:

public function ship(Request $request, $orderId)
{
    $filePath = 'G:\phpstudy_pro\WWW\test.txt';
    $order = Order::findOrFail($orderId);
    Mail::to($request->user)->send(new OrderShipped($order, $filePath));
}

模型: 无额外代码编写

7.编辑邮件模板视图

resources/views/emails/orders/shipped.blade.php

8.添加路由,测试

Route::get('/ship/{orderId}', 'Web\OrderController@ship');

浏览器: http://laravel58.test/ship/1?user=15237181025@163.com

邮箱接收到邮件:

邮件服务成功

方式二:

不用生成邮件类, 直接调用代码即可

/*$name = 'William_ning';
// Mail::send() 需要传三个参数,第一个为引用的模板,第二个为给模板传递的变量,第三个为一个闭包,参数绑定Mail类的一个实例,返回值为空,所以可以其他方法进行判断
Mail::send('emails.test', ['name' => $name], function($message){
    $to = '15237181025@163.com';
    $message ->to($to)->subject('邮件测试');
});
// 返回的一个错误数组,利用此可以判断是否发送成功

if(count(Mail::failures()) < 1){
    echo '发送邮件成功,请查收!'; //会在命令中输出,如下所示[这里时使用基于数据库的队列服务]
}else{
    echo '发送邮件失败,请重试!';
}

dd(Mail::failures());*/

后续整理

...

3.问题

1.国内网站[生产环境]邮件服务, 是如何实现的?

解决方案一:  //配置简单, 待实践

https://sendcloud.sohu.com/

https://github.com/NauxLiu/Laravel-SendCloud

2. 执行邮件服务,一直报错'  //laravel 5.7

Swift_TransportException (530)

Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required "

'

可以结合情景: https://xueyuanjun.com/post/9743?page=2#comments

最终找到原因是: 是缓存导致的问题,清理缓存

php artisan config:cache
php artisan cache:clear
php artisan config:clear

详见: https://stackoverflow.com/questions/45428535/laravel-forgot-password-1-1-swift-transportexception?r=SearchResults

方式一:浏览器

http://blog57.test/blog/test  回车,浏览器没响应, 但邮箱收到邮件。

方式二: 终端[Terminal]下,  使用php artisan tinker 测试, 返回null

备注:

可以使用

use Mail;

也可以使用

use Illuminate\Support\Facades\Mail;

后续补充

...

4.参考

https://xueyuanjun.com/post/19513  //学院君-队列

https://laravel.com/docs/5.8/mail  //官网文档之邮件

https://www.zhihu.com/question/20329385  //在国内用什么邮件服务发送邮件最好

https://www.jianshu.com/p/8ccb2820df23/  //利用Laravel自带SMTP邮件组件实现发送邮件

https://stackoverflow.com/questions/45428535/laravel-forgot-password-1-1-swift-transportexception?r=SearchResults //Laravel forgot Password 1/1) Swift_TransportException

https://xueyuanjun.com/post/9743?page=2#comments //基于 Laravel 5.7 开发博客应用系列

后续补充

...

Laravel 邮件相关推荐

  1. laravel 邮件SwiftMailer

    邮件SwiftMailer Laravel的邮件功能基于热门的SwiftMailer函数库之上,提供了一个简洁的API Laravel 为SMTP,Mailgun,Mandrill,AmazonSes ...

  2. php mail laravel,邮件 - Laravel - 为 WEB 艺术家创造的 PHP 框架。

    邮件 配置 Laravel的邮件功能构建于流行的SwiftMailer库之上,并提供了简介.高效的API.邮件配置信息在app/config/mail.php文件中,并提供了包含SMTP主机.端口和证 ...

  3. Laravel 邮件发送

    Laravel的邮件功能基于热门的SwiftMailer函数库之上,提供了一个简洁的api Laravel为SMTP,Mailgun,Mandrill,Amazon SES,PHP的mail函数,以及 ...

  4. laravel 邮件发送

    配置 Laravel 的邮件服务可以通过 config/mail.php 配置文件进行配置. 邮件中的每一项都在配置文件中有单独的配置项,甚至是独有的「传输方式」,允许你的应用使用不同的邮件服务发送邮 ...

  5. laravel 邮件配置

    .env的配置 MAIL_DRIVER=smtp MAIL_HOST=smtp.163.com MAIL_PORT=465 MAIL_USERNAME=你的163邮箱地址 MAIL_PASSWORD= ...

  6. laravel邮件服务

    1,设置邮件服务配置 你可以在.env中配置如下: 1 MAIL_DRIVER=mailgun 2 MAIL_HOST=smtp.126.com //邮件服务器地址 3 MAIL_PORT=25 // ...

  7. Lumen / Laravel 使用网易邮箱 SMTP 发送邮件

    Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件发送服务基于 Symfony 组件 Swift Mailer. 本文记录了 ...

  8. Lumen / Laravel 5.5 使用网易邮箱 SMTP 发送邮件

    2019独角兽企业重金招聘Python工程师标准>>> Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件 ...

  9. Laravel 开发环境搭建

    本人使用的是Laravel5.5版本,需要PHP7支持,所以安装的环境是Apache2.php7.0.mysql5.7,系统为ubuntu14.04LTS(14以下的版本对php7支持不够),主要参考 ...

  10. laravel入门教程

    laravel 入门教程 laravel 简介 laravel['lærəvel] : 读作 拉瑞涡. laravel 教程 laravel 简介及资料 laravel 安装,配置,以及部署 lara ...

最新文章

  1. YUV图像实时去雾算法的优化与改进
  2. SSM框架下实现导入功能
  3. 2018.10.17考试
  4. Spring Boot 整合 Swagger
  5. ASP.NET MVC的生命周期与网址路由
  6. android九宫格密码源码,Android九宫格解锁的实现
  7. java文件替换一行数据_用Golang替换文件中的一行
  8. 财务一体化项目,进度与计划8
  9. Python 变量赋值
  10. Hdoj 1064 Financial Management
  11. Linux 删除用户时报错:userdel: user zhoulijiang is currently used by process 1
  12. 容器技术Docker K8s 32 容器服务ACK基础与进阶-弹性伸缩
  13. 小米note3如何打开usb调试
  14. 2的17次方java中表示什么_2的17次方是多少
  15. 手工焊接SSOP贴片元件步骤总结
  16. C++学习第十课--构造函数详解、explicit与初始化列表笔记
  17. 苹果10.13.6,开机的时候经常会显示 禁止符号
  18. 镜像电流源特点_镜像电流源原理及其应用电路.pdf
  19. 刀片服务器的机箱显示器,刀片服务器机箱如何配置网络交换器端口
  20. 大青云不显示服务器,37大青云1月4日合服公告

热门文章

  1. MQTT介绍,服务器(EMQ X)搭建,客户端(mqtt-spy,安卓)使用,java编程示例
  2. MySQL系列:java个人简历模板word
  3. 软考软件设计师下午题目java设计模式(自用)
  4. 什么软件可以测试手机硬件6,手机硬件检测的方法
  5. Windows版变色龙
  6. (2.3)【遥控型木马-网络神偷】
  7. rpg人物制作软件_RPG游戏制作教程
  8. Android实现百度离线地图+gps定位
  9. windows 8 下五笔98版和新世纪版的解决方案
  10. 飞信2009_AfterShip CTO 洪小军—我的移动互联网十年造梦记:飞信时代