Как отправить электронное письмо (gmail, outlook и Zoho) в Laravel

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

В этой статье вы узнаете, как отправлять электронные письма с помощью класса Mail Laravel для наиболее известных поставщиков электронной почты: Gmail, Outlook и Zoho. Кроме того, на случай, если вы не захотите делать это многократно, вы также узнаете, как отправлять электронные письма, используя обычный Swift Mailer.

конфигурация

Нам нужен аккаунт, с которого будут отправляться письма: адрес электронной почты, пароль , его Адрес SMTP-сервера и тип шифрования что он использует. Обычно используя SwiftMailer, вы можете предоставить эти параметры при отправке электронного письма (см. Параграф «Использование простого SwiftMailer» в конце этой статьи), однако в качестве хорошей практики в Laravel мы собираемся предоставить эти параметры в .env файл в корне вашего проекта Laravel.

.env Файл должен содержать по умолчанию следующие значения:

MAIL_DRIVER=null
MAIL_HOST=null
MAIL_PORT=null
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

По словам вашего почтового провайдера, информация совершенно другая, поэтому мы собираемся предоставить вам информацию о наиболее известных почтовых провайдерах (не забудьте сменить адрес электронной почты и пароль):

Gmail

Замечания: важно знать, что иногда учетные записи gmail не позволяют отправлять почту с помощью swiftmailer, и вам необходимо снять флажок «Разрешить использование на небезопасных устройствах» в вашей учетной записи gmail.

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=MyGoogleAccount
MAIL_PASSWORD=MyGooglePassword
MAIL_ENCRYPTION=ssl

прогноз

Outlook использует шифрование TLS в порту 587 в отличие от Gmail или Zoho.

MAIL_DRIVER=smtp
MAIL_HOST=smtp-mail.outlook.com
MAIL_PORT=587
MAIL_USERNAME=MyOutlookAccount
MAIL_PASSWORD=MyOutlookPassword
MAIL_ENCRYPTION=tls

Zoho

MAIL_DRIVER=smtp
MAIL_HOST=smtp.zoho.com
MAIL_PORT=465
MAIL_USERNAME=MyZohoEmail
MAIL_PASSWORD=MyZohoPassword
MAIL_ENCRYPTION=ssl

Другие провайдеры

В следующей таблице приведен список наиболее известных поставщиков услуг электронной почты с соответствующим SMTP-адресом.

ПРОВАЙДЕР
URL
Настройки SMTP
111and1.comsmtp.1and1.com
авиапочтаAirmail.netmail.airmail.net
AOLAol.comSmtp.aol.com
ATTAtt.netOutbound.att.net
BluewinBluewin.chsmtpauths.bluewin.ch
BT ConnectBtconnect.commail.btconnect.tom
ComcastComcast.netsmtp.comcast.net
EarthlinkEarthlink.netsmtpauth.earthlink.net
GmailGmail.comsmtp.gmail.com
GmxGmx.netmail.gmx.net
HotPopHotpop.commail.hotpop.com
LiberoLibero.itmail.libero.it
LycosLycos.comsmtp.lycos.com
O2o2.comsmtp.o2.com
оранжевыйOrange.netsmtp.orange.net
Outlook.com (бывший Hotmail)Outlook.comsmtp.live.com
БанкаTin.itMail.tin.it
TiscaliTiscali.co.uksmtp.tiscali.co.uk
VerizonVerizon.netoutgoing.verizon.net
девственницаVirgin.netsmtp.virgin.net
WanadooWanadoo.frsmtp.wanadoo.fr
YahooYahoo.comsmtp.mail.yahoo.com
Zohozoho.com/mail/smtp.zoho.com

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

Отправка электронной почты

После изменения файла .env не забудьте очистить кеш с помощью следующей команды в вашем проекте Laravel:

php artisan cache:clear

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

В этом случае мы собираемся создать шаблон электронной почты в resources/views папка с именем email_template.blade.php, Он будет содержать основной шаблон электронной почты, который будет отправлен в демоверсии.

Простой текст

Почтовая оболочка позволяет легко отправлять обычные текстовые сообщения, просто включите использование Mail Пространство имен.

"Our Code World");
// Path or name to the blade template to be rendered
$template_path = 'email_template';
Mail::send(['text'=> $template_path ], $data, function($message) {
// Set the receiver and subject of the mail.
$message->to('anyemail@emails.com', 'Receiver Name')->subject('Laravel First Mail');
// Set the sender
$message->from('mymail@mymailaccount.com','Our Code World');
});
return "Basic email sent, check your inbox.";
}
}

И содержание шаблона лезвия:


Some plain text that my user will receive, 1 > 2 = false

HTML

Отправка составных электронных писем в формате HTML проще, чем вы думаете, благодаря SwiftMailer, в качестве первого параметра укажите имя шаблона в методе отправки вместо массива, и вы готовы к работе.

"Our Code World");
// Path or name to the blade template to be rendered
$template_path = 'email_template';
Mail::send($template_path, $data, function($message) {
// Set the receiver and subject of the mail.
$message->to('anyemail@emails.com', 'Receiver Name')->subject('Laravel HTML Mail');
// Set the sender
$message->from('mymail@mymailaccount.com','Our Code World');
});
return "Basic email sent, check your inbox.";
}
}

И шаблон лезвия:


Hey, how you doing bro?
I have some info for you, please visit my blog  here.

Использование простого SwiftMailer

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

Обратите внимание, что

setUsername($yourEmail)
->setPassword($yourPassword);
$mailer = \Swift_Mailer::newInstance($transport);
// Prepare content
$view = View::make('email_template', [
'message' => 'Hello World !'
]);
$html = $view->render();
// Send email
$message = \Swift_Message::newInstance('Test')
->setFrom(['mymail@zoho.com' => 'Our Code World'])
->setTo(["mail@email.com" => "mail@mail.com"])
// If you want plain text instead, remove the second paramter of setBody
->setBody($html, 'text/html');
if($mailer->send($message)){
return "Check your inbox";
}
return "Something went wrong :(";
}
}

И содержание шаблона лезвия:


This will be escaped
{{ $message }}
But this not {!! $message !!}

рекомендации

  • Вы можете обернуть все почтовые функции внутри команды, чтобы ваши контроллеры были максимально тонкими.
  • Вы можете создать resources/views/emails каталог для размещения всех ваших шаблонов электронной почты; Тем не менее, вы можете разместить их там, где пожелаете resources/views каталог.

Повеселись !

Ссылка на основную публикацию
Adblock
detector