laravel - Lumen 框架使用队列和工作不工作发送电子邮件
问题描述
已经为此案例进行了所有配置,通过 Composer 使用与 Lumen 8.0 相同的版本安装了照明/邮件包。
在 .env 文件上配置邮件服务器。
创建了包含 queue.php 和 mail.php 文件的配置文件夹。
取消注释$app->withFacades();
并$app->withEloquent();
添加:
$app->withFacades(true, [
'Illuminate\Support\Facades\Mail' => 'Mail',
]);
$app->configure('app');
$app->configure('mail');
$app->register(Illuminate\Mail\MailServiceProvider::class);
$app->alias('mail.manager', Illuminate\Mail\MailManager::class);
$app->alias('mail.manager', Illuminate\Contracts\Mail\Factory::class);
$app->alias('mailer', Illuminate\Mail\Mailer::class);
$app->alias('mailer', Illuminate\Contracts\Mail\Mailer::class);
$app->alias('mailer', Illuminate\Contracts\Mail\MailQueue::class);
也已经执行了 php artisan queue:table 和 php artisan migrate`
我的工作文件 app/Jobs/SubmitEmailJob.php:
<?php
namespace App\Jobs;
use Illuminate\Support\Facades\Mail;
use App\Mail\FormEmail;
class SubmitEmailJob extends Job
{
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($details)
{
$this->details = $details;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
// $email = new FormEmail($this->details);
// Mail::to($this->details['email'])->send($email);
Mail::to($details['email'])->send(new FormEmail($details));
}
}
可邮寄文件 app/Mail/FormEmail.php:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class FormEmail extends Mailable
{
use Queueable, SerializesModels;
// protected $details;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($details)
{
$this->details = $details;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from('my_email_address_here@gmail.com', 'Gmail')
->subject('Confirmation Email')
->view('email_text')->with(['details'=>$this->details]);
}
}
我的控制器方法:
public function create(Request $request)
{
$user = new User;
$user->first_name = $request->input('first_name');
$user->last_name = $request->input('last_name');
$user->email = $request->input('email');
$user->birthday = $request->input('birthday');
$user->gender = $request->input('gender');
$file = $request->file('cv');
$filename = base64_encode($file->getClientOriginalName());
$destinationPath = storage_path('uploads/user_cv/');
$userCvPathName = 'uploads/user_cv/'.base64_decode($filename);
$request->file('cv')->move($destinationPath, base64_decode($filename));
$user->user_cv = $userCvPathName;
$user->save();
//Email sending
$details = [
'first_name' => $request->input('first_name'),
'last_name' => $request->input('last_name'),
'email' => $request->input('email'),
];
$emailJob = (new SubmitEmailJob($details));
dispatch($emailJob);
//Already tried to send email without jobs and queues and its working
// Mail::to($details['email'])->send(new FormEmail($details));
return response()->json($user);
}
我不明白我在这里缺少什么
解决方案
好的,通过使用以下命令创建 failed_jobs 数据库表解决了问题:
php artisan queue:failed-table
php artisan migrate
protected $details;
我还必须在作业类中声明一个变量。
谁在流明中为这个或其他事情苦苦挣扎,最好检查错误日志:storage/logs/
推荐阅读
- reactjs - 为什么图像不显示在 React Typescript 和 Styled Component 上
- vba - 转发共享邮箱中收到的电子邮件,将 FROM 设置为特定用户帐户
- python - 有没有办法用普通列表实现 numpy 的方法?
- microsoft-dynamics - 在动态 crm 365 中的 JS Web 资源中执行 excel 导出的自定义按钮
- javascript - Web 文件管理器库
- laravel - Laravel Scout - 分页急切加载
- postgresql - Postgresql:处理所有查询以更改用户密码?
- java - 在 Java 中使用 ButtonClick 将多个变量添加到数组列表中
- python - 为什么遇到'return'语句时执行不停止?
- mysql - Laravel 7 检查数据库连接状态并显示自定义错误