Laravel 5.7. Уведомление по электронной почте по требованию через AWS SES рассматривает мою электронную почту получателя как электронную почту отправителя и хочет, чтобы он был проверенным адресом - PullRequest
0 голосов
/ 24 декабря 2018

Я хочу отправить простое уведомление по электронной почте по требованию в Laravel 5.7.

Я перешел на AWS SES и в разделе Адреса электронной почты добавил do-not-reply@foo в качестве отправителя.Затем я нажимаю ссылку подтверждения на do-not-reply@foo, чтобы подтвердить его.

enter image description here

Я настроил .env:

MAIL_FROM_ADDRESS=do-not-reply@foo
MAIL_FROM_NAME="Foo System"
MAIL_DRIVER=smtp
MAIL_HOST=email-smtp.us-west-2.amazonaws.com
MAIL_PORT=587
MAIL_USERNAME=xxx
MAIL_PASSWORD=xxx
MAIL_ENCRYPTION=tls

Я взял имя пользователя и пароль отсюда:

enter image description here

Я сделал php artisan config:clear и php artisan cache:clear.

Теперь в терминахмоего PHP-кода у меня есть:

$this->notificationClass = (new ReflectionClass($notificationClass))->getShortName();
$this->notificationData = $notificationData;
$this->notification
    ->route('slack', config('logging.channels.slack.url')) // slack works great all the time
    ->route('mail', 'my-inbox-address-123@gmail.com') // this is address where I want notification to be sent
    ->notify(new $notificationClass(
        $this->getNotificationTitle(),
        $this->getNotificationContent()
    ));

А содержимое $notificationClass:

<code><?php

namespace App\Notifications\Sync;

use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\SlackMessage;

class SyncSuccessfullyCompletedNotification extends AbstractBaseSyncNotification
{
    public function toSlack()
    {
        return (new SlackMessage)
            ->success()
            ->content(sprintf('*Synchronization Successful*```%s```', $this->message));
    }

    public function toMail()
    {
        return (new MailMessage)
            ->from(config('mail.from.address'), config('mail.from.name'))
            ->subject($this->title)
            ->view('mail.notifications.sync_successfully_completed_notification', [
                'content' => sprintf('<pre>%s
', $ this-> message),]);}}

Так что my-inbox-address-123@gmail.com - это просто входящий почтовый ящик моей компании Gmail.Когда я выполняю команду ремесленника, ответственного за выполнение чего-либо и отправку этого уведомления, я получаю:

Swift_TransportException: ожидаемый код ответа 250, но получил код "554" с сообщением "554 Сообщение отклонено: адрес электронной почты не являетсяпроверено. Следующие удостоверения не прошли проверку в регионе US-WEST-2: my-inbox-address-123@gmail.com "

в / home / vagrant / Code / iosportal / vendor / swiftmailer / swiftmailer /lib / classes / Swift / Transport / AbstractSmtpTransport.php: 457 453 |$ this-> eventDispatcher-> dispatchEvent ($ evt, 'responseReceived');454 |} 455 |456 |if (! $ valid) {

457 |$ this-> throwException (new Swift_TransportException ('Ожидаемый код ответа' .implode ('/', $ wanted). ', но получил код "'. $ code. '", с сообщением "'. $ response. '" ",$ код));458 |} 459 |} 460 |461 |/ ** Получить полный многострочный ответ, используя его порядковый номер * /

Трассировка исключения:

1 Swift_Transport_AbstractSmtpTransport :: assertResponseCode ("554 Сообщение отклонено: адрес электронной почты не проверенСледующие удостоверения не прошли проверку в регионе US-WEST-2: my-inbox-address-123@gmail.com ") / home / vagrant / Code / iosportal / vendor / swiftmailer / swiftmailer / lib / classes / Swift / Transport/AbstractSmtpTransport.php:341

2 Swift_Transport_AbstractSmtpTransport :: executeCommand (".", []) / Home / vagrant / Код / iosportal / vendor / swiftmailer / swiftmailer / lib / classes / Swift / Transport / Esmt.php: 305

Пожалуйста, используйте аргумент -v, чтобы увидеть больше деталей.

Почему?Я не понимаю этого.Мой отправитель подтвержден, почему он хочет подтвердить получателя?

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

1 Ответ

0 голосов
/ 24 декабря 2018

Ваша учетная запись должна быть в режиме sandbox, что означает, что каждый адрес электронной почты должен быть проверен.

Проверьте, находитесь ли вы в режиме песочницы:

  1. Войдите в Консоль управления AWS .
  2. Выберите свой регион.
  3. В разделе «Отправка электронной почты» выберите «Статистика отправки».
  4. Если вы находитесь в песочницеВ режиме вы увидите баннер, сообщающий об этом.

Чтобы выйти из режима песочницы:

  1. Войдите в Управление AWSКонсоль .
  2. Откройте дело SES Limit Seal Increase в Центре поддержки.
  3. Заполните форму.Если вы планируете отправлять из более чем одного региона, повторите для каждого региона.
...