文档章节

基于Laravel Task-Scheduler定时发送邮件小程序

botkenni
 botkenni
发布于 2016/10/21 17:17
字数 809
阅读 126
收藏 3

说明:本文主要学习Laravel的Artisan Command、Task Scheduler和Mail相关知识。做一个简单的小demo,用来定时发邮件。。走完整个流程最多只需一小时。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。

开发环境是本机的MAMP集成软件,PHP7.0,Laravel5.2.*。

Laravel中Artisan Command内容可以参看:服务 —— Artisan Console,Mail邮件服务内容可以参看:服务 —— 邮件,以及Task-Scheduler任务定时器可以参看:服务 —— 任务调度。

Artisan Command

新建一个artisan command:

php artisan make:console SendEmails --command=emails:send

并在AppConsoleCommandsSendEmails.php文件中添加代码:

class SendEmails extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'emails:send';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'This is a demo about sending emails to myself';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->info('I am handsome');
        $this->error('I am not ugly');
    }
}

写上$description和handle()方法,$description变量用来显示命令的说明,handle()用来处理命令,然后在AppConsoleCommandsKernel.php中注册命令:

protected $commands = [
        // Commands\Inspire::class,
        Commands\SendEmails::class,
    ];

好,这下可以在终端输入php artisan查看并执行命令了:

Mail

邮件服务API驱动需要安装guzzlehttp/guzzle这个包,在项目根目录下:

composer require guzzlehttp/guzzle

然后在.env文件中配置下邮件驱动和用户名密码:

然后修改下handle()方法:

/**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
//        $this->info('I am handsome');
//        $this->error('I am not ugly');
        $user = [
            'email' => 'XXX@XXX.com',//一个有效的邮箱接收地址
            'name'  => 'liuxiang',
        ];
        $status = Mail::send('emails.send', ['user'=>$user], function($msg) use ($user){
            $msg->from('XXX@XXX.com', 'liuxiang email');//一个有效的邮箱发送地址
            $msg->to($user['email'], $user['name'])->subject('This is a demo about sending emails to myself');
        });
        if(!$status){
            $this->error('Fail to send email');exit;
        }
        $this->info('Success to send email');exit;
    }

发送的内容在视图emails.send里,新建resources/views/emails/send.blade.php文件:

<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
        <title>Bootstrap Template</title>
        <style>
            html,body{
                width: 100%;
                height: 100%;
            }
            *{
                margin: 0;
                border: 0;
            }
            .content{
                text-align: center;
                margin: 50px;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="row">
                <div class="col-xs-12 col-md-12">
                    <p class="content">This is a email by Laravel Artisan Command</p>
                </div>
            </div>
        </div>

        <script>

        </script>
    </body>
</html>

一切准备OK,在项目根目录运行邮件发送命令吧,然后会收到邮件发送成功打印:

然后接收的邮箱会收到邮件:

It is working!!!

Task-Scheduler

每次手动发邮件毕竟不太爽啊,可以利用系统的定时器crontab定时发送,Laravel里有任务定时器可以玩一玩。修改app/Console/Kernel.php文件:

/**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')->hourly();
        //$schedule->command('emails:send')->everyFiveMinutes();
        $schedule->command('emails:send')->everyMinutes();
    }

在终端输入crontab -e 添加一个cron条目:

* * * * * php /Applications/MAMP/htdocs/laravelemail/artisan schedule:run 1>> /dev/null 2>&1

然后程序每隔一分钟发个邮件过来:

总结:本文主要以Laravel的Artisan Command、Mail和Task-Scheduler做一个好玩的小demo,来定时发发骚扰邮件,哈哈。还挺好玩的,可以试一试。。嘛,下次想结合设计模式来聊聊Laravel,到时见。

© 著作权归作者所有

botkenni
粉丝 20
博文 429
码字总数 444521
作品 0
西城
程序员
私信 提问
rails定时发送邮件

需求说明:将一个任务分派给某个用户完成,如果到指定时间该用户仍没完成此任务,则以邮件的方式提醒他,如果已经完成,则取消邮件的发送。 我看貌似resque-scheduler( http://www.oschina....

assw
2014/07/18
283
1
邮件代收代发功能模块的操作界面设计和阶段性总结

大约半年前,一个客户希望给他开发一个代收代发的功能模块,只需要一个后台的服务进行自动收取和发送邮件,因此我结合了我自己的定时服务程序,增加了一个基于Lumisoft组件的邮件发送和收取插...

walb呀
2017/12/04
0
0
邮件代收代发软件操作说明

1、背景 为了方便获取和发送邮件,需要有一个定时服务来对人员列表的邮件内容进行收取,以及发送存储在数据库列表里面的邮件信息,并提供相应的界面管理功能,为企业员工提供相应的邮件服务。...

walb呀
2017/12/04
0
0
Spring Boot Quartz 分布式集群任务调度实现

主要内容 Spring Scheduler 框架 Quartz 框架,功能强大,配置灵活 Quartz 集群 mysql 持久化定时任务脚本(tables_mysql.sql) 介绍 在工程中时常会遇到一些需求,例如定时刷新一下配置、隔一...

编辑之路
06/21
172
0
Easy Scheduler 1.0.3 发布,分布式工作流任务调度系统

Easy Scheduler Release 1.0.3 Easy Scheduler 1.0.3 发布了,这是1.x系列中的第四个版本。 新版本更新内容: 新特性: [EasyScheduler-254] 流程定义删除和批量删除 [EasyScheduler-347] 任...

EasyScheduler调度团队
05/28
2.6K
2

没有更多内容

加载失败,请刷新页面

加载更多

SDKMAN推荐一个好

是在大多数基于Unix的系统上管理多个软件开发工具包的并行版本的工具。它提供了一个方便的命令行界面(CLI)和API来安装,切换,删除和列出sdk相关信息。以下是一些特性: By Developers, fo...

hotsmile
34分钟前
8
0
什么是 HDFS

是什么? HDFS 是基于 Java 的分布式文件系统,允许您在 Hadoop 集群中的多个节点上存储大量数据。 起源: 单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称...

Garphy
37分钟前
4
0
一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
今天
10
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
今天
12
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部