На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Урок 20. Продолжение страницы контактов, или отправка писем с вложением Laravel


На предыдущем уроке мы создали страницу контактов. Давайте теперь заставим её отправлять нам письма.

Создание Laravel Mailable

Каждое письмо, отправленное в приложении Laravel, представлено как "отправляемое по почте" (mailable) на случай, если вам интересно название.

php artisan make:mail ContactFormMail --markdown=template.client.contactform
Приведенная выше команда создаст файл в каталоге resources > views > template > client, а также создаст файл для отправки по почте в app > Mail > ContactFormMail.php.

В ContactFormMail.php у нас есть следующий фрагмент кода, который позволяет нам отправлять письма без вложений:

<?php

namespace App\Mail;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class ContactFormMail extends Mailable
{
    use Queueable, SerializesModels;

    /**
    * Создаем новый экземпляр сообщения.
    *
    * @return void
    */

    public function __construct($data)
    {
        $this->user = $data;
    }

    /**
     * Создаем сообщение
     *
     * @return $this
     */
    public function build()
    {
        return $this->from('noreply@domain.com')
                ->markdown('template.client.contactform')
                ->with([
                        'subject' => $this->user['subject'],
                        'message' => $this->user['message'],
                        'email' => $this->user['email'],
                        'phone_number' => $this->user['phone_number'],
                        'fullname' => $this->user['fullname'],
                    ]);
    }
}
Давайте немного разберем этот код.

В методе _construct я анализирую все пользовательские данные в качестве параметра и переназначаю их. В методе сборки выполняется вся конфигурация класса, доступного для отправки по почте.

Метод from указывает отправителя почты, то есть от кого приходит почта (в моем случае noreply@domain.com ).

Метод with позволяет вам настроить способ отображения писем в соответствии с созданной уценкой. В этой статье мы назначим все поля парам ключей и значений в массиве, чтобы в рамках markdown мы могли получить доступ к каждому значению с помощью его собственного уникального ключа.

Метод markdown принимает имя шаблона markdown, который будет отображаться с дополнительным параметром данных (если мы не использовали метод with).

И, наконец, метод to указывает получателя письма. В домашнем контроллере выше измените 'receipent@domain.com' - на адрес фактического получателя.

Добавьте данные в файл markdown

Теперь нам нужно настроить файл markdown в каталоге resources > views > template > client. Поскольку у нас уже есть пары значений ключей, проще ссылаться на ключи в файле markdown, как показано ниже:

@component('mail::message')
# {{$subject}}

## {{$message}}

Feel free to contact me via {{$phone}} or {{$email}}

Thanks,<br>
{{$fullname}}

{{ config('app.name') }}
@endcomponent
На данный момент мы почти закончили. Теперь вы узнали, как отправлять электронное письмо без вложений. Далее давайте посмотрим, как это сделать с помощью вложения.

Отправка писем с вложением

Laravel уже поставляется с мощной файловой системой, поэтому отправка писем с вложением не слишком сложна. Мы будем использовать эту функцию и создадим хранилище для пользователей, где мы будем хранить их прикрепленные файлы в приложении.

php artisan storage:link
ПРИМЕЧАНИЕ: В HomeController выше я уже указал каталог хранения для загрузок. Вы должны сделать то же самое, создав папку (назвав её contact) в storage > app > public > contact.

Также в config > filesystems.php проверьте и убедитесь, что диск файловой системы по умолчанию настроен на возврат ['default' => 'public'].

Теперь в ContactFormMail.php выглядит вот так. Теперь мы можем использовать метод attachFromStorage, который ссылается на путь к файлу.

<?php

namespace App\Mail;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class ContactFormMail extends Mailable
{
    use Queueable, SerializesModels;

    /**
    * Create a new message instance.
    *
    * @return void
    */
    public $user;

    public function __construct($data)
    {
        $this->user = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from('noreply@domain.com')
                ->markdown('template.client.contactform')
                ->attachFromStorage($this->user['screenshot'])
                ->with([
                        'subject' => $this->user['subject'],
                        'message' => $this->user['message'],
                        'email' => $this->user['email'],
                        'phone_number' => $this->user['phone_number'],
                        'fullname' => $this->user['fullname']
                    ]);
    }
}
 
Единственным дополнением здесь будет attachFromStorage. Он используется для обработки вложенных файлов (изображений или pdf) в течение всего процесса рассылки.

В файле markdown, который мы использовали ранее, мы можем немного переработать его, чтобы он выглядел так, как показано ниже:

<div class="row">
	<h1 class="text-dark">{{$subject}}</h1>

	<h3>{{$message}}</h3> 

	<h4>You can reach me via mail or telephone : {{$email}} or {{$phone_number}}<br/>
	Thanks
	</h4>
</div>




Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегистатьи IT, уроки по Laravel, laravel, email, отправка письма

Читайте также:




Дежавю
Выход из программы C# с кодом ошибки


© upread.ru 2013-2021
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.