我正在使用 laravel 5.5 ,并尝试发送带有客户端标志的图片的电子邮件。 要从视图中访问图片,我将其复制到公开文件夹中,排队的电子邮件将会访问它。
通过一个操作,我可以向客户端发送多封电子邮件,登录电子邮件,并附上电子邮件的pdf,也带有符号图片。然后,可以从不同的电子邮件中多次调用相同的图像。为此,我为每封电子邮件复制一张带有编码名称的图像,并将图像名称传递给Mailable。
问题是在有限的时间内表明客户是公开的。然后,我试图为Illuminate\Mail\Events\MessageSent
事件监听,删除公共文件夹的图像,从事件中获取图像名称......但我无法访问它。
提前致谢。
class SEPA extends Mailable
{
use Queueable, SerializesModels;
public $client;
/**
* Create a new message instance.
*
* @param Client $client
*/
public function __construct(Client $client)
{
$this->client = $client;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$date = Carbon::now();
// Name codified
$fileName = md5(microtime()).".png";
// Making the image accessible from views
Storage::copy("clients/{$this->client->id}/firma.png", "public/tmp/{$fileName}");
$pdfName = "SEPA - {$this->client->name}{$this->client->cognom1}{$this->client->cognom2}.pdf";
$dades = [
'data' => $date,
'client' => $this->client,
'firma' => $fileName
];
// Generating PDF
$pdf = PDF::loadView('pdfs.SEPA', $dades);
if (!Storage::has("tmp/clients/{$this->client->id}")) Storage::makeDirectory("tmp/clients/{$this->client->id}");
$pdf->save(storage_path()."/app/tmp/clients/{$this->client->id}/".$pdfName);
return $this
->from(['address' => 'email@random.com'])
->view('emails.SEPA')
->with($dades)
->attach(storage_path()."/app/tmp/clients/{$this->client->id}/".$pdfName);
}
}
protected $listen = [
'Illuminate\Mail\Events\MessageSent' => [
'App\Listeners\DeleteTempResources'
]
];
public function handle(MessageSent $event)
{
// Trying to access on data message
Log::info($event->message->firma);
}
答案 0 :(得分:3)
您也许可以通过withSwiftMessage()
方法将事件中需要访问的其他数据设置为实际swiftMessage上的其他字段,因为在事件中可以访问的其他数据为{{ 1}}。
我看到有人这样做了here,例如添加$message
对象:
$user
这对我来说似乎很不合常规-像这样添加流氓字段。
请注意,只要它是包含类的成员属性,就不需要通过$this->withSwiftMessage(function ($message) {
$message->user = $this->user; // any crazy field of your choosing
});
将$ user对象放入闭包中,因为它可以通过use
在作用域中使用。
要在消息离开队列时在事件中查看它,可以在$this
事件中Log::info('The user: ', [$event->message->user])
。
我刚刚测试了它,并且它可以工作(我使用5.5),但是我还没有在代码中使用它,因为它看起来有点奇怪,并添加了一个流氓字段。我会提到它,因为如果您对这种方法感到满意,它实际上可能会解决您的问题!如果有人知道一种不太丑陋的方式,那我真是耳目一新...
P.S。对于我自己的情况,我可能会考虑在闭包中附加MessageSending
,因为这似乎不太可能与任何东西发生冲突,并且可以在事件中方便地撤消。欢迎讨论!