首页 > 解决方案 > 如何在 Laravel Nova 中使用电子邮件发送文件?

问题描述

我正在向Newsletter Email多个收件人发送邮件,markdown但我似乎无法将文件附加到电子邮件中。发送是通过一个触发的action

Resource

public function fields(Request $request)
{
    return [
        ID::make(__('ID'), 'id')->sortable(),

        Date::make('Created', 'created_at'),

        Markdown::make('Message', 'content')->alwaysShow(),

        File::make('File')->disk('public')
    ];
}

public function actions(Request $request)
{
    return [
        Actions\NewsletterMail::make()->standalone()
    ];
}

Action触发控制器功能send

public function handle(ActionFields $fields, Collection $models)
{
    app(NewsletterMailController::class)->send();
}

Controller获取所有收件人的电子邮件并发送给mailable他们:

public function send()
{
    $emails = DB::select('select * from newsletter_recipients order by id desc');

    foreach ($emails as $email) {
        Mail::to($email)->send(new NewsletterMail());
    }
}

Mailable获取电流newsletter email并将其返回为markdown

public function build()
{
    $this->content = DB::select('select * from newsletter_mails order by id desc limit 1')[0]->content;

    return $this->markdown('emails.newsletter')->with('content', $this->content);
}

如您所见,resource有一个file field. 我可以在其中为它分配一个文件,nova dashboard但是当发送电子邮件时,它到达时没有附件。

有什么我能做的吗?

标签: phplaravelemaillaravel-8laravel-nova

解决方案


您必须使用附加功能才能将文件作为附件发送到电子邮件。

你可以试试这个

return $this->markdown('emails.newsletter')
->with('content', $this->content)
->attach(filePath, ['as' => fileName,'mime' => 'application/pdf']);

文件路径将是存储文件的位置,请确保该文件夹具有读写访问权限。

以上代码将文件作为附件发送到您的电子邮件中。


推荐阅读