Laravel — не отправляет сообщения с сайта

#php #laravel #email #mailtrap

#php #laravel #Адрес электронной почты #mailtrap

Вопрос:

Laravel 7.0

Отправка электронной почты с локального хоста не работает. Он пишет, что не может отправить сообщение без электронной почты, но я ставлю все поля с электронными письмами. Создал все с помощью docs.laravel.

Routeweb.php

 Route::get('contact', 'ContactsController@index')->name('contacts'); // ContactsPages
Route::post('contact/send',  'MailSetting@send_form'); // ContactsPages(FORM_FeedBack)
 

App Http Controller MailSetting

 <?php
namespace AppHttpControllers;
use IlluminateSupportFacadesMail;
use IlluminateHttpRequest;
use AppMailMailClass;

class MailSetting extends Controller
{
    public function send_form(Request $request)
    {
        $name = $request->name;
        $email = $request->email;
        $message = $request->message;

        Mail::to('test@mail.ru')->send(new MailClass($name, $email, $message));
    }
}

 

Приложение Почта MailClass

 <?php

namespace AppMail;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;

class MailClass extends Mailable
{
    use Queueable, SerializesModels;

    protected $name;
    protected $email;
    protected $message;

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

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.contact-mail')
            ->with([
            'name' => $this->name,
            'email' => $this->email,
            'message' => $this->message,
        ])
        ->subject('New MESSAGE ');
    }
}

 

.env_file

 MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=2d1*******3e1d
MAIL_PASSWORD=62e*******db9
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
 

ConfigMail.php

 'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailtrap.io'),
            'port' => env('MAIL_PORT', 25),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME', ''),
            'password' => env('MAIL_PASSWORD', ''),
        ],
 

cotacts.blade

 <div class="col-lg-8 col-md-6 col-sm-12">
                    <form action="{{ route('contacts') }}/send" method="POST">
                        @csrf
                        <div class="contact-form">
                            <div class="row">
                                <div class="col-lg-6 col-md-12 col-sm-12">
                                    <input type="text" name="name" id="name" placeholder="Name">
                                </div>
                                <div class="col-lg-6 col-md-12 col-sm-12">
                                    <input name="email" id="email" type="email" placeholder="E-Mail">
                                </div>
                                <div class="col-lg-12">
                                    <textarea name="message" id="message" placeholder="Your message"></textarea>
</div>
<div class="col-lg-12">
<button type="send">Send message</button>
                                </div>
                            </div>
                        </div>
                    </form>
                </div>
 

email_view

 Name   : {{ json_encode($name,TRUE)}} <br>
Email  : {{ json_encode($email,TRUE)}} <br>
Message: {{ json_encode($message,TRUE)}} <br>
 

После того, как ошибка появилась в первый раз, я решил, что могу изменить настройки в Gmail, изменил их, но там появляется другая ошибка.

Комментарии:

1. где указан адрес «от»?

2. Для отправки электронных писем требуется адрес From, даже если для хоста установлено значение mailtrap. Вы можете либо установить MAIL_FROM_ADDRESS=some@value.com в .env файле, либо добавить ->from('some@value.com') в функцию сборки MailClass — возможно, после ->subject('NEW MESSAGE')

3. @Donkarnash, Ееееп! спасибо, это РАБОТА!!!

4. Но возникла проблема, когда я отправляю письмо (тест), то на место имени приходит набор символов, а поле с сообщением совершенно пустое, в нем отображаются фигурные скобки и больше ничего.

5. @Dizmuzz я опубликовал решение в качестве ответа.

Ответ №1:

From Address требуется (ОБЯЗАТЕЛЬНО) для отправки электронных писем — даже если для хоста установлено значение mailtrap.io

Его можно установить глобально для приложения в .env файле

 MAIL_FROM_ADDRESS=some@value.com
 

Или он может быть установлен / переопределен для каждого почтового класса в методе сборки

 public function build()
{
    return $this->view('emails.contact-mail')
        ->with([
            'name' => $this->name,
            'email' => $this->email,
            'message' => $this->message,
        ])
        ->subject('New MESSAGE ')
        ->from('some@value.com');
}