通过队列Laravel发送原始邮件

时间:2018-01-15 11:41:21

标签: php laravel laravel-5 laravel-5.5

出于测试目的,我想通过Queue发送原始邮件。

我可以发送这样的原始邮件:

Mail::raw('bonjour', function($message) {
   $message->subject('Email de test')
           ->to('test@example.org');
});

但是有没有办法通过队列发送原始邮件(没有创建View或Mailable)?

3 个答案:

答案 0 :(得分:4)

我搜索过去几天没有任何结果来完成此操作:可以排队的原始邮件。

不幸的是,我没有使用Mailables和Views找不到解决方案。

我认为您和我有相同的原因:您想从字符串发送100%动态生成的邮件。

我的解决方法是:

  1. 创建仅包含一个变量的视图:<?php echo $content;
  2. 创建一个可邮寄的邮件,然后将内容传递给构造函数并将其设置为$this->content
  3. 将旧邮件封闭中的所有内容复制到可邮寄邮件的构建方法中,并用$message->替换每个$this
  4. 排队;)

public function send(Request $request) {
    $to = "test@example.org";
    $subject = "email de test";
    $content = "bonjour";
    Mail::send(new RawMailable($to, $subject, $content));
}

视图(/ressources/view/emails/raw.blade.php):

<?php
echo $content;

可邮寄:

<?php

namespace App\Mail;

use Dingo\Api\Http\Request;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class RawMailable extends Mailable
{
    use Queueable, SerializesModels;

    private $mailTo;
    private $mailSubject;
    // the values that shouldnt appear in the mail should be private

    public $content;
    // public properties are accessible from the view

    /**
     * Create a new message instance.
     *
     * @param LayoutMailRawRequest $request
     */
    public function __construct($to, $subject, $content)
    {
        $this->content = $content;
        $this->mailSubject = $subject;
        $this->mailTo = $to;
    }

    /**
     * Build the message.
     *
     * @throws \Exception
     */
    public function build()
    {
         $this->view('emails.raw');

         $this->subject($this->mailSubject)
              ->to($this->mailTo);
    }
}

答案 1 :(得分:1)

您可以使用dispatch辅助函数将Closure推入Laravel作业队列:

dispatch(function () use ($name) {
   Mail::raw('bonjour ' . $name, function($message) {
      $message->subject('Email de test')
              ->to('test@example.org');
   });
});

答案 2 :(得分:0)

基本上,laravel使用刀片进行更清晰的渲染。

如果你想知道在队列中发送邮件:

Mail::queue('emails.welcome', $data, function ($message) {
    //
});

现在,如果我们查看MailQueue.php queue()函数:

/**
 * Queue a new e-mail message for sending.
 *
 * @param  string|array  $view
 * @param  array   $data
 * @param  \Closure|string  $callback
 * @param  string  $queue
 * @return mixed
 */
public function queue($view, array $data, $callback, $queue = null);

所以$view它可以是字符串或数组。所以你可以试试:

Mail::queue('string|| Array', $data, function ($message) {
    //
});