#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');
}