我使用 Laravel Mail Queue 发送快速邮件。
我有一个错误,如:
SendWelcomeEmail.php 中超过了 60 秒的最大执行时间(第 38 行)
很难描述我的错误,因为我没有使用 Laravel 的经验。所以,我试着一步一步地记录我所做的。
我的问题是:当用户单击发送信息时,Send Mail
它被激活并且它使用了太多时间来完成这项工作。这对用户体验有影响。
我期待一个答案或其他方法来解决我的问题。
我的演示是一步一步制作的:
第 1 步:
c:\xampp\htdocs\laravel-test>php artisan queue:table
Migration created successfully!
c:\xampp\htdocs\laravel-test>php artisan queue:failed-table
Migration created successfully!
c:\xampp\htdocs\laravel-test>php artisan migrate
Migrated: 2017_04_03_144759_create_jobs_table
Migrated: 2017_04_03_150557_create_failed_jobs_table
第 2 步:更新我的 .env 文件并设置电子邮件:
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:beQGwYyUPOTMtkbzDhft7swh68UJW7RqwAGwhELUfLI=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost:8000
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dongxanh
DB_USERNAME=admin
DB_PASSWORD=euEW12il
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=database
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=myemail@gmail.com
MAIL_PASSWORD=yxpszfarmxoperew
MAIL_ENCRYPTION=tls
第 3 步:
php artisan make:mail EmailCustomer
在函数__contruct()
:
protected $content;
public function __construct($content)
{
$this->content = $content;
}
功能build()
:
public function build()
{
return $this->view('emails.contact')
->with('content',$this->content);
}
第 4 步:在views/emails/contact.blade.php
是:
Name: {{ $content['name'] }} <br>
Title: {{ $content['title'] }} <br>
Email: {{ $content['email'] }} <br>
Phone number: {{ $content['phonenumber'] }} <br>
Body:
{{ $content['body'] }}
第 5 步:创建工作SendWelcomeEmail
:
php artisan make:job SendWelcomeEmail
它将创建SendWelcomeEmail.php
如下所示:
use Mail;
use App\Mail\EmailCustomer;
class SendWelcomeEmail implements ShouldQueue
{
protected $content;
public function __construct($content)
{
$this->content = $content;
}
public function handle()
{
sleep(60);
$receiverAddress = 'myemail@gmail.com';
$email = new EmailCustomer($content);
Mail::to($receiverAddress)->queue($email);
}
}
最后:当用户单击提交表单时,将作业发送到队列app\Http\Controllers\RegisterForm.php
:
public function storeCustomer(Request $request) {
Customer::create($request->all());
$content = [
'name'=> $request->input('name'),
'title'=> $request->input('title'),
'email'=> $request->input('email'),
'phonenumber' => $request->input('phonenumber'),
'body' => $request->input('body')
];
dispatch(new SendWelcomeEmail($content));
return view('partials.success-mail');
}
我运行两个命令:
php artisan serve
php artisan queue:work
并经过测试。它像问题一样显示错误。