@MaikMain
Начинающий backend - developer

Как прикрепить несколько файлов к сообщению. Yii2?

Подскажите пожалуйста в чем может быть проблема. Я пытаюсь отправить на почту сообщение с прикрепленными изображениями. Хоть и сообщение на почту приходит, но они файлы пустые (Название всех файлов no_name и весят 75 байт)
$this->image = UploadedFile::getInstances($this, 'image');
        if ($this->validate()) {
            $message = Yii::$app->mailer->compose('ctobars/callback-img', [
                    'name' => $this->name,
                    'phone' => $this->phone,
                    'body' => $this->body,
                    'image' => $this->image
                ])
                ->setFrom([Yii::$app->params['adminEmail'] => 'Заявка с сайта']) /* от кого */
                ->setTo($emailto) /* куда */
                ->setSubject('Заявка с сайта') /* тема отправителя */
                ->setTextBody($this->body);
                foreach ($this->image as $file) {
                    $filename = Yii::getAlias('@img-mail') . '/' . strtotime('now').'_'.Yii::$app->getSecurity()->generateRandomString(6)  . '.' . $file->extension;
                    $file->saveAs($filename);
                    $message->attachContent($filename);
                }
                $message->send();
            return true;
        } else {
            return Yii::$app->session->setFlash('error', 'Ошибка при отправлении сообщения');
        }


В чем может быть проблема?
  • Вопрос задан
  • 381 просмотр
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
метод attachContent подразумевает получение контента в виде строки, например так
$message->attachContent(
    'Строка из которой сформируется файл и отправится с письмом', 
    [
        'fileName' => 'attach.txt', 
        'contentType' => 'text/plain'
    ]);

Вы передаете в него объект. При этом не передаете имя файла, так что получаете что попросили.
Возможно Вам нужен метод attach
$message->attach('/path/to/source/file.pdf');
Но и в этом случае передавать надо не объект а путь к файлу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы