首页 > 解决方案 > Laravel 5.7 从作业(队列)表中读取电子邮件内容

问题描述

我正在使用 Laravel 5.7 处理工作(队列)。我已将每个周末的电子邮件安排到工作表中。对于电子邮件调度程序,我已将所有电子邮件信息(例如 From、to 、回复电子邮件地址)以及电子邮件正文存储到作业表中。

在这里,我添加了 Job 类

use Dispatchable,
    InteractsWithQueue,
    Queueable,
    SerializesModels;

protected $details;

/**
 * Create a new job instance.
 *
 * @return void
 */
public function __construct() {

    $this->details = $details;
}

/**
 * Execute the job.
 *
 * @return void
 */
public function handle() {
    //
    $payload = json_decode($event->job->getRawBody());
    $data = unserialize($payload->data->command);
    echo $data;
    exit;
    Mail::send(
            ['html' => 'emails.templates'], array('body' => $body, 'title' => $post_data['subject']), function($message) use ($post_data, $employee, $clientName, $docName, $filename) {
        $message->to($post_data['email'], $clientName)->subject($post_data['subject']);
        $message->from('xxxx', $employee->first_name . " " . $employee->last_name);
        $message->replyTo($employee->email);
    }
    );
    echo "send Email";
    exit;
}

现在,当作业句柄功能执行时,我面临着获取电子邮件内容以发送电子邮件的问题。这是获取电子邮件内容的代码

$payload = json_decode($event->job->getRawBody());
$data = unserialize($payload->data->command);

但是这段代码不起作用。我的目标是让电子邮件内容使用该内容发送电子邮件。

或者,如果您有其他发送电子邮件的解决方案或选项。也请分享你的想法。

提前谢谢你。

标签: laravellaravel-5laravel-5.7

解决方案


在构造它时,您可以传递您希望在工作中可用的任何数据,如下所示:

MySendEmailJob::dispatch('body', 'subject', 'email', $employee, 'clientname', 'docname', 'filename');

作业本身看起来像这样:

    use Dispatchable,
        InteractsWithQueue,
        Queueable,
        SerializesModels;

    /**
     * @var string
     */
    private $body;

    /**
     * @var string
     */
    private $subject;

    /**
     * @var string
     */
    private $email;

    /**
     * @var User
     */
    private $employee;

    /**
     * @var string
     */
    private $clientName;

    /**
     * @var string
     */
    private $docName;

    /**
     * @var string
     */
    private $filename;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(
        string $body,
        string $subject,
        string $email,
        User $employee,
        string $clientName,
        string $docName,
        string $filename
    ) {
        $this->body = $body;
        $this->subject = $subject;
        $this->email = $email;
        $this->employee = $employee;
        $this->clientName = $clientName;
        $this->docName = $docName;
        $this->filename = $filename;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::send(
            ['html' => 'emails.templates'],
            ['body' => $this->body, 'title' => $this->subject],
            function ($message) {
                $message->to($this->email, $this->clientName)->subject($this->subject);
                $message->from('xxxx', $this->employee->first_name . " " . $this->employee->last_name);
                $message->replyTo($this->employee->email);
            }
        );
    }

查看Laravel 文档以获取更多示例和文档


推荐阅读