Метод laravel mail attach () возвращает ошибку об пустом аргументе - PullRequest
0 голосов
/ 06 мая 2018

Здравствуйте, я делаю почтовый сервис в laravel, который поддерживает загрузку вложений, когда пользователь отправляет мне файл, я сохраняю его в драйвере Amazon S3 для дальнейшего вложения. Вот мой класс Mail, который отправляет почтовый объект с копиями писем и вложений.

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
    use Illuminate\Support\Facades\Storage;
    use Illuminate\Contracts\Queue\ShouldQueue;

   class Mail extends Mailable
   {
    use Queueable, SerializesModels;

    public $email;
    public $attachments;
    public $copies;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($email, $copies = [], $attachments = [])
    {
        $this->email = $email;
        $this->copies = $copies;
        $this->attachments = $attachments;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $m = $this->from($this->email->sender->email, $this->email->sender->name)
            ->replyTo($this->email->sender->email, $this->email->sender->name)
            ->subject($this->email->subject);

        foreach ($this->copies as $copy) {
            if ($copy->type == 'CC') {
                $m->cc($copy->destiny->email);
            } else {
                $m->bcc($copy->destiny->email);
            }
        }

        if (!empty($this->attachments)) {
            foreach ($this->attachments as $attachment) {
                $attachmentParameters = [
                    "as" => $attachment->name,
                    "mime" => $attachment->mime
                ];

                $m->attach(Storage::disk('s3Attachments')->url($attachment->path), $attachmentParameters);
            }
        }

        return $m->view('emails.text-plain');
    }
}

Я уже использовал dd(Storage::disk('s3Attachments')->url($attachment->path)) и подтвердил, что это строка с полным путем к файлу, как просит документация.

Чтобы добавить вложения в электронное письмо, используйте метод вложения в метод построения класса mailable класса. Метод attach принимает полный путь к файлу в качестве первого аргумента:

Тогда, когда я запускаю код, он выдает эту ошибку:

[2018-05-05 20:58:52] testing.ERROR: Type error: Argument 2 passed to Illuminate\Mail\Message::attach() must be of the type array, null given, called in /home/lefel/Sites/happymail/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php on line 311

Я пытался использовать attach (), используя только один аргумент:

$m->attach(Storage::disk('s3Attachments')->url($attachment->path));

Но та же ошибка, я использую Laravel 5.5 с драйвером Amazon SES и уже подтвердил, что установил следующие зависимости в мой package.json:

composer require guzzlehttp/guzzle
"aws/aws-sdk-php": "~3.0"

Я искал в Интернете и не нашел решения, мне нужна помощь Пожалуйста.

Привет.

1 Ответ

0 голосов
/ 21 мая 2019

Я только что столкнулся с точно такой же проблемой. Проблема в том, что вы переопределяете свойство $ attachments.

Используйте другое имя для этой переменной, и оно будет работать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...