Laravel пошта: 5 спосабаў адпраўкі

  1. Асаблівасці адпраўкі пошты ў Laravel
  2. Laravel пошта - налада
  3. Адпраўка лістоў у Laravel праз API паштовых сэрвісаў
  4. Налады Laravel Mailgun
  5. Налады Laravel Mandrill
  6. Настройка Laravel SparkPost
  7. Настройка Laravel Amazon SES
  8. Адпраўка пошты ў Laravel праз SMTP
  9. Laravel пошта - адпраўка з дапамогай PHP mail ()
  10. Адпраўка лісты ў Laravel праз sendmail
  11. Laravel пошта - запіс логаваў
  12. Выбіраем аптымальны спосаб адпраўкі email ў Laravel
  13. Рассыланне лістоў у Laravel на сэрвэры прыкладання або праз іншы?

Ўсім прывітанне Ўсім прывітанне! 🙂

Тыя, хто падпісаны на абнаўлення праекта, і сочыць за выхадам артыкулаў ведаюць, што ў мінулым публікацыі мы на прыкладзе стварэння формы зваротнай сувязі разгледзелі рэалізацыю папулярнай тэхналогіі AJAX ў Laravel .

У ёй мы рэалізавалі адпраўку запыту серверу і сцэнар дзеянняў на сайце пасля атрымання адказу. Засталося толькі напісаць скрыпт Laravel, які адпраўляе email паведамленне адміністратару на сэрвэры, замест якога ў нас цяпер варта заглушка ў выглядзе вываду параметраў запыту.

Зрабіць гэта я абяцаў у наступным артыкуле, г.зн. у бягучай. Аднак, пры падрыхтоўцы матэрыялу прыйшоў да высновы, што аднаго артыкула будзе мала для дэталёвага агляду ўсіх спосабаў Laravel email sending і паўнавартаснай рэалізацыі аднаго з іх.

Таму я вырашыў разнесці напісанае на дзве часткі: паўнавартасны агляд усіх спосабаў адпраўкі пошты Laravel, які вас сёння чакае, і рэалізацыю адпраўкі ліста адным з іх з спадарожным аглядам метадаў фасада Laravel Mail.

Прашу мне прабачыць тых, хто настройваўся ўбачыць адпраўку пошты сёння, але я лічу, што раблю правільна. Яшчэ дзякуй мне скажаце 😉

Такім чынам, сёння мы разгледзім 5 асноўных спосабаў адпраўкі email ў Laravel і наладу адпаведных ім драйвераў фреймворка, і я паспрабую коратка апісаць перавагі і недахопы кожнага з іх, пасля чаго абярэм найбольш аптымальны і рэалізуем яго ў наступнай публікацыі.

Паехалі!

Асаблівасці адпраўкі пошты ў Laravel

Паколькі Laravel - PHP framework , То адправіць email ў кодзе можна сродкамі PHP, скарыстаўшыся функцыяй mail (). Ці можна наогул скарыстацца іншымі прыкладаннямі тыпу sendmail, разгарнуўшы іх у сябе на ПК ў выглядзе лакальнага паштовага сервера.

Гэтыя спосабы рабочыя, універсальныя і гнуткія ў наладзе, але на гэтым, па праўдзе кажучы, іх перавагі сканчаюцца. Пытаецца - "А што яшчэ трэба-то?» 🙂 Адказ большасці распрацоўнікаў будзе просты - зручнасць.

Да прыкладу, вам хочацца ўпрыгожыць свой ліст, дадаўшы туды HTML-разметку і CSS-стылі. Адпраўка такога ліста з дапамогай PHP mail () будзе выглядаць прыкладна так:

<? Php $ to = '[email protected]'; $ Subject = 'Тэставае ліст з HTML'; $ Message = '<html> <head> <title> Тэставае ліст з HTML </ title> <meta charset = "utf8"> </ head> <body> <p> Прыклад табліцы </ p> <table> <tr > <th> Калонка 1 </ th> <th> Калонка 2 </ th> <th> Калонка 3 </ th> <th> Калонка 4 </ th> </ tr> <tr> <td> Ячэйка 1 < / td> <td> Ячэйка 2 </ td> <td> Ячэйка 3 </ td> <td> Ячэйка 4 </ td> </ tr> <tr> <td> Ячэйка 5 </ td> <td> Ячэйка 6 </ td> <td> Ячэйка 7 </ td> <td> Ячэйка 8 </ td> </ tr> </ table> </ body> </ html> '; $ Headers [] = 'MIME-Version: 1.0'; $ Headers [] = 'Content-type: text / html; charset = utf8 '; $ Headers [] = 'To: Receiver <[email protected]>'; $ Headers [] = 'From: Sender <[email protected]>'; $ Headers [] = 'Cc: copy@test.com'; $ Result = mail ($ to, $ subject, $ message, implode ( "\ r \ n", $ headers)); echo $ result? 'OK': 'Error';

Калі ж скарыстацца API Laravel, то адпраўка такога ж паведамленні будзе займаць ўсяго пару радкоў кода:

Mail :: send ( 'emails.test', [], function ($ message) {$ m-> from ('[email protected] ',' Sender '); $ m-> to (' receiver @ test. com ',' Receiver ') -> subject (' Тэставае ліст з HTML '); $ m-> cc ('[email protected]', '');});

Адзінае, HTML код шаблону будзе размяшчацца ў асобным файле /resources/views/emails/test.blade.php, які паказаны ў якасці першага аргументу.

У цэлым, як па мне, дадзены прыклад вельмі пераканаўча дэманструе зручнасць API Laravel для адпраўкі email.

Дарэчы, дадзеная АПА-шка ў Laravel рэалізавана на базе папулярнай бібліятэкі SwiftMailer , Якая з'яўляецца кампанентам Symfony PHP framework, якія вельмі любяць выкарыстоўваць распрацоўшчыкі Laravel.

Таму яна ўжо ўваходзіць у яго камплект з скрынкі, і ставіць яе няма патрэбы.

Адзіны мінус, які я змог знайсці пры наладзе адпраўкі пошты ў Laravel праз яго API, - гэта багатая парой валтузня з наладамі і устаноўкай дадатковых пакетаў, каб той ці іншы спосаб зарабіў. Але гэта прыватны мінус.

Плюсаў ж у параўнанні з натыўнымі метадамі нашмат больш.

Па-першае, гэта - зручнасць выкарыстання.

Па-другое, куча прымочак ў выглядзе стварэння спецыяльных Mailable класаў, якія надаюць зручнасць пры масавых рассыланнях аднатыпных лістоў у розных месцах кода.

Па-трэцяе, механізм чэргаў Laravel, які дазваляе адпраўляць лісты порцыямі праз роўныя прамежкі часу, зніжаючы нагрузку з сервера і засцерагаючы ваш рэсурс ад бана пошукавікамі і паштовымі сэрвісамі за спам.

Але, для выкарыстання дадзеных пераваг прыйдзецца гуляць па правілах фреймворка і вырабляць налады адпраўкі пошты пэўным чынам.

Laravel пошта - налада

Я зараз кажу пра выкарыстанне спецыяльных драйвераў для розных спосабаў адпраўкі лістоў у Laravel і эксперыментаў з файламі канфігурацый .env, /config/mail.php і /config/services.php.

Калі пра драйверы мы пагаворым далей, то са структурай файлаў пазнаёмімся цяпер.

З скрынкі ў файле .env ўжо існуе спецыяльны блок зменных асяроддзі для налад адпраўкі пошты. Іх лёгка пазнаць па прыстаўцы MAIL:

MAIL_DRIVER = smtp MAIL_HOST = smtp.mailtrap.io MAIL_PORT = 2525 MAIL_USERNAME = null MAIL_PASSWORD = null MAIL_ENCRYPTION = null

Ну, а што з нагоды /config/mail.php і /config/services.php?

Адкрываем першы з пералічаных і што ж мы бачым? Змесціва файлаў я прыводзіць не буду, бо ва ўсіх з скрынкі яно аднолькава - проста адкрыйце іх у сябе на кампутары.

Практычна ўсе змяшчаюцца ў ім параметры па змаўчанні бяруць свае значэння з файла акружэння .env, размешчанага ў корані сайта, з дапамогай Laravel функцыі-хэлпера env ().

Выключэнне складаюць толькі наступныя:

'From' => [ 'address' => '[email protected]', 'name' => 'Example',],

З дапамогай дадзеных параметраў у нас ёсць магчымасць паказаць email і імя адпраўніка для ўсіх лістоў па змаўчанні, якія адпраўляюцца з нашага Laravel сайта.

З нагоды астатніх параметраў з mail.php - я буду змяняць іх у сваім файле файле акружэння, бо калі я буду кіраваць сам конфіг, то мае налады зальюць ў агульны рэпазітар і толькі будуць вас збіваць.

Ну, і ў файле services.php сітуацыя не моцна адрозніваецца ад mail.php: практычна ўсе параметры бяруцца з .env.

Так што ў далейшым я буду кіраваць .env, а вы проста паўтарайце за мной. Дарэчы, паколькі для розных спосабаў адпраўкі email ў Laravel будуць патрабавацца розныя зменныя з стандартнага набору, то тыя, якія ўтрымліваюцца ў нас у .env цяпер з прыстаўкай MAIL я проста выдалю, каб не блытацца.

Выключэнне складзе толькі зменная асяроддзі MAIL_ADMIN_EMAIL (калі вы, вядома, ствараеце сайт разам ва ўсімі па дадзеным Laravel курсе і ўжо дадалі яе), якая патрэбна для ўказанні email адміністратара для адлюстравання яго ў паведамленні пра памылку ў форме зваротнай сувязі.

Выключэнне складзе толькі зменная асяроддзі MAIL_ADMIN_EMAIL (калі вы, вядома, ствараеце сайт разам ва ўсімі па дадзеным Laravel курсе і ўжо дадалі яе), якая патрэбна для ўказанні email адміністратара для адлюстравання яго ў паведамленні пра памылку ў форме зваротнай сувязі

Ну, а ў самі файлы канфігурацый mail.php і services.php мы будзем зазіраць толькі за тым, каб даведацца імёны неабходных зменных з мэтай іх дадання або рэдагавання ў .env.

Вось на гэтай ноце мы і пераходзім да агляду спосабаў адпраўкі пошты ў Ларавел і неабходных для гэтага налад, дзе пагаворым пра ўсё вышэйпералічаным вышэй падрабязней.

Адпраўка лістоў у Laravel праз API паштовых сэрвісаў

Першы спосаб адпраўкі email ў Laravel, які я вырашыў разгледзець, гэта - выкарыстанне розных паштовых сэрвісаў праз іх API.

Усё, што ад вас запатрабуецца для яго рэалізацыі - гэта наяўнасць акаўнта Mailgun, Mandrill, SparkPost або Amazon SES (на дадзеных момант Laravel з скрынкі падтрымлівае толькі іх) і ўстаноўка неабходнага пакета для рэалізацыі сумяшчальнасці сэрвісу з Laravel.

Дарэчы, калі вы там не зарэгістраваныя і не хочаце да іх прывязвацца, то прапаную адразу прапусціць дадзены спосаб і паспрабаваць наступныя, якія больш універсальныя.

Налады Laravel Mailgun

Для адпраўкі пошты праз дадзены сэрвіс у першую чаргу неабходна ўсталяваць у Laravel Guzzle HTTP library. Рабіць мы гэта будзем, натуральна, праз пакетны менеджэр Composer .

Такім чынам, адкрываем кансоль і пераходзім у каталог, дзе размешчаны наш Laravel праект. Выконваем наступную каманду:

composer require guzzlehttp / guzzle

У кансолі будзе апісвацца парадак ўстаноўкі. Пасля паспяховага завяршэння усё, што нам застанецца для завяршэння налад - гэта дапоўніць файл акружэння .env наступным кодам:

MAIL_DRIVER = mailgun MAILGUN_DOMAIN = ваш_домен MAILGUN_SECRET = ваш_ключ

Пераменным MAILGUN_DOMAIN і MAILGUN_SECRET трэба пазначыць значэння, атрыманыя пасля рэгістрацыі ў Mailgun для выкарыстання яго АПА.

Налады Laravel Mandrill

Для налады адпраўкі пошты Laravel праз дадзены сэрвіс працэдура будзе шмат у чым падобная з папярэднім. Для пачатку ўсталёўваны Guzzle HTTP library.

А затым ідзём у Laravel .env і дадаем наступнае:

MAIL_DRIVER = mandrill MANDRILL_SECRET = ваш_ключ

Зменнай MANDRILL_SECRET трэба паказаць значэнне, атрыманае вамі пры рэгістрацыі ў Mandrill для выкарыстання яго АПИшки.

Дарэчы! Працэдура налады Mandrill ў афіцыйнай дакументацыі Laravel ў апошні раз была апісана для версіі Laravel 5.2, але, мяркуючы па кодзе рухавічка, выкарыстанне дадзенага сэрвісу даступна дагэтуль (мабыць, вырашылі пакінуць для працы старых прыкладанняў).

Паколькі ў новых версіях фреймворка стваральнікі Laravel па нейкіх прычынах вырашылі адмовіцца ад Mandrill, то прыйдзецца трохі пашаманю і дадаць у /config/services.php наступны блок для паспяховай адпраўкі лістоў:

'Mandrill' => [ 'secret' => env ( 'MANDRILL_SECRET'),],

Настройка Laravel SparkPost

Ягоная падтрымка сэрвісу, калі верыць афіцыйнай дакументацыі, з'явілася ў Laravel 5.3. Таму калі ў вас прыкладанне выкарыстоўвае больш раннюю версію фреймворка, то дадзены спосаб у вас не спрацуе. Альбо абновіце Laravel, альбо скарыстайцеся іншым спосабам (добра, што іх хапае).

Для паспяховага выкарыстання SparkPost нам спатрэбіцца ўсё тая ж Guzzle HTTP library і наступныя зменныя асяроддзі ў файле .env:

MAIL_DRIVER = sparkpost SPARKPOST_SECRET = ваш_ключ

Настройка Laravel Amazon SES

Дадзены паштовы сэрвіс, як і SparkPost, з'явіўся ў Laravel 5.3, прыйшоўшы на замену Mandrill. Таму, калі вы выкарыстоўваеце больш раннюю версію рухавічка, то вам варта альбо абнавіцца, альбо выкарыстаць іншы спосаб адпраўкі email ў Laravel.

Яго настройка будзе злёгку адрознівацца ад папярэдніх паштовых сэрвісаў, бо для яго падтрымкі ў Laravel спатрэбіцца не знаёмая ўжо Guzzle HTTP library, а другі пакет - Amazon AWS SDK for PHP, які усталёўваецца наступнай камандай у кансолі:

composer require aws / aws-sdk-php: 3. *

Пасля ўстаноўкі дапаўняем файл .env наступнымі зменнымі акружэння:

MAIL_DRIVER = ses SES_KEY = ваш_ключ SES_SECRET = ваш_секретный_ключ

Думаю, і так зразумела, што значэнні ключоў вам павінны быць даступныя пасля рэгістрацыі ў Amazon SES. Дарэчы, не забудзьцеся праверыць код свайго рэгіёну, згенераваны Amazon. Калі ён будзе не 'us-east-1', то зайдзіце ў файл /config/services.php і задайце неабходнае значэнне параметру 'ses' [ 'region'].

На гэтым агляд падтрымоўваных Laravel API паштовых сэрвісаў падыходзіць да канца. Пераходзім да аглядзе наступнага спосабу адпраўкі пошты.

Адпраўка пошты ў Laravel праз SMTP

Думаю, што шмат хто ў курсе аб пратаколе перадачы пошты SMTP. Гэтак жа, шмат хто ведае, што практычна ўсе сучасныя паштовыя сэрвісы падаюць свае SMTP-сервера для адпраўкі пошты з сайтаў праз іх.

Па сутнасці, папярэдні спосаб адпраўкі пошты ў Laravel праз паштовыя сэрвісы - гэта тое ж самае, што і бягучы. За тым толькі выключэннем, што ў першым выпадку мы адпраўляем лісты праз API сэрвісу, а ў другім - звяртаючыся да паштовага сэрвера напрамую.

Ну, і пры адпраўцы праз SMTP вы можаце карыстацца любым паштовым сэрвісам, які дае такую ​​магчымасць (Gmail, Яндэкс Пошта і г.д.), а ўзаемадзейнічаюць з сэрвісам па АПА, вы маеце доступ толькі да абраным, якія падтрымлівае Laravel. Вось і ўся розніца 🙂

Усё, што трэба зрабіць карыстальнікам, каб скарыстацца магчымасцю адпраўкі лістоў у Laravel праз SMTP - гэта зарэгістравацца ў сэрвісе і даведацца налады падлучэння да SMTP-серверу (адрас або даменнае імя сервера, порт, шыфраванне і г.д.).

Ну, і ўвесці іх у Laravel належным чынам:

MAIL_DRIVER = smtp MAIL_HOST = smtp.gmail.com MAIL_PORT = 587 MAIL_USERNAME = ваше_имя_пользователя MAIL_PASSWORD = ваш_пароль MAIL_ENCRYPTION = tls

Вышэй прыведзены прыклад наладак Laravel для адпраўкі пошты праз SMTP сервер паштовага сэрвісу Google - Gmail. Я вырашыў абраць менавіта яго, бо паштовую скрыню gmail.com ёсць, напэўна, практычна ва ўсіх, таму дадзены спосаб падыдзе большасці.

Laravel пошта - адпраўка з дапамогай PHP mail ()

Пытаецца - "Што гэта за глупства?» :-). Навошта выкарыстоўваць PHP mail () у якасці драйвера для адпраўкі пошты, калі можна наўпрост выклікаць гэтую функцыю ў кодзе? Адказ усё той жа, што і раней - для выгоды, бо пры выкарыстанні драйвера мы атрымліваем магчымасць выкарыстоўваць API Laravel для «прапампаваны» і больш зручнай адпраўкі лістоў.

Такім чынам, якой будзе парадак налады?

Для дадзенага спосабу ён будзе самым што ні на ёсць прымітыўным. Дастаткова будзе ўтрымання ў файле акружэння .env наступнага радка:

MAIL_DRIVER = mail

Адпраўка лісты ў Laravel праз sendmail

Скажу шчыра, пра тое, што з sendmail я пазнаёміўся параўнальна нядаўна. Роўна тады, калі даведаўся, што ў Laravel ёсць магчымасць адпраўляць email пры дапамозе дадзенага штукі.

Таму дазволю зрабіць невялікае ўступленне для такіх жа, як я, пра тое, што такое sendmail.

Sendmail, як абвяшчае Wikipedia - гэта адзін з самых старажытных агентаў адпраўкі пошты на ўзроўні АС.
На дадзеных момант існуюць версіі дадзенага прыкладання практычна пад ўсе аперацыйныя сістэмы і апаратныя платформы.

Амаль ва ўсіх Unix-падобных сістэмах маецца на базавай камплектацыі. Для запуску пад Windows, наколькі я паспеў заўважыць, трэба дадаткова спампоўваць.

Распаўсюджваецца бясплатна ў выглядзе выкананага файла з конфігамі і зыходным кодам. Такім чынам, для запуску sendmail неабходна будзе запусціць яго выкананы файл.

Ну, а для адпраўкі пошты ў Laravel з дапамогай sendmail па-першае, трэба паказаць адпаведны драйвер ў файле акружэння .env:

MAIL_DRIVER = sendmail

І паколькі адпраўка email будзе ажыццяўляцца з дапамогай сістэмнай утыліты, то фреймворка неабходна ўказаць шлях да яе выкананага файла. Для гэтага ў конфігу /config/mail.php ёсць спецыяльны параметр, у якасці значэння якога прапісваем шлях да sendmail на серверы (або лакальнай машыне):

'Sendmail' => '/ usr / sbin / sendmail -bs',

У дадзеным прыкладзе прыведзены код па змаўчанні, які будзе працаваць на Unix-падобных сістэмах.

Laravel пошта - запіс логаваў

Напрыканцы я пакінуў агляд драйвера адпраўкі пошты ў Laravel, з дапамогай якога email адправіць не атрымаецца. Затое ён выдатна падыходзіць для дебага працэсу фарміравання і адпраўкі ліста.

Гэта становіцца магчымым дзякуючы запісу ў логі Laravel сфармаванага тэксту email паведамленні, якое звычайна адпраўляецца дадаткам на паштовую скрыню канчатковага карыстальніка.

Каб уключыць дадзеную магчымасць у Laravel, неабходна выканаць прымітыўную наладу, як і ў выпадку выкарыстання PHP mail (). Досыць усяго толькі паказаць драйвер адпраўкі пошты ў .env:

MAIL_DRIVER = log

У выніку, пры паспяховай сланні мы атрымаем запіс у логах наступнага фармату:

[2017/09/12 08:23:06] local.DEBUG: Message-ID: <[email protected]> Date: Tue, 12 Sep 2017 08:23:06 +0000 Subject: Your Subject From: Sender <receiver @ test.com> To: Receiver <[email protected]> MIME-Version: 1.0 Content-Type: text / plain; charset = utf-8 Content-Transfer-Encoding: quoted-printable Test

Нагадваю, што пры выкарыстанні дадзенага драйвера адпраўка лісты на пошту карыстальніка не вырабляецца, таму ім карыстацца можна толькі пры лакальнай распрацоўцы для налады выніковага паведамленні, і ні ў якім разе не ў Production асяроддзі.

А таксама, запіс вырабляецца ў файл логаў Laravel /storage/logs/laravel.log, а не ў логі сервера.

Выбіраем аптымальны спосаб адпраўкі email ў Laravel

Ну, вось мы і разгледзелі ўсе наяўныя ў Laravel драйвера адпраўкі пошты, выкарыстанне кожнага з якіх дазваляе вырабляць email sending рознымі спосабамі.

Зараз самы час ацаніць вартасці і недахопы кожнага з іх і ў параўнанні з іншымі, каб выявіць найбольш аптымальны для далейшага выкарыстання.

Такім чынам, на парадку для ў нас адпраўка email праз паштовыя сэрвісы па іх API, праз SMTP сэрвера, з дапамогай PHP mail () і sendmail. Запіс у логі па зразумелых прычынах спосабам адпраўкі email мы не лічым, бо яна пры выкарыстанні драйвера log не вырабляецца. Аднак, зусім ігнараваць выкарыстанне дадзенага драйвера таксама не варта, бо ён уяўляе сабой зручны інструмент дебага, і ім рэкамендуецца карыстацца перад рэальнай адпраўкай пошты, каб залішне не нагружаць сервер і паштовыя сэрвісы не заблакавалі ваш сайт, як генератар спаму.

Іншая справа, што запісы ў логах дазволяць вам адсачыць сам факт апраўкі email і якія ўзнікаюць пры гэтым памылак, аднак ніяк не дапамогуць у карэкцыі вёрсткі шаблону лісты. Але, для гэтага ў Laravel ёсць зручны інструмент прадпрагляду лісты ў браўзэры, пра які мы з вамі абавязкова пагаворым у далейшым.

Такім чынам, які ж спосаб адпраўкі лістоў у Laravel нам выбраць?

Адпраўка email ў Laravel праз паштовыя сэрвісы з дапамогай API і праз SMTP сервера - гэта, па сутнасці, адно і тое ж, бо у абодвух выпадках лісты будуць адбывацца не з сервера на якім размешчаны сайт, а са іншага. Адзінае адрозненне ў іх - гэта парадак узаемадзеяння. У першым выпадку вы маеце зносіны з паштовым сэрвісам шляхам спецыяльных API-метадаў, а ў другім - пасылаеце запыт на сервер для адпраўкі пошты.

Такім чынам, пры выкарыстанні API спіс магчымасцяў у вас можа быць трохі шырэй, чым пры адпраўцы email праз SMTP. Але, па меншай меры, пры стандартным выкарыстанні API Laravel для адпраўкі лістоў і бібліятэкі SwiftMailer мы гэтых магчымасцяў не адчувальны.

Таксама, як сцвярджаюць некаторыя распрацоўшчыкі, пры адпраўцы лістоў праз SMTP сервер фіксуецца IP адрас, з якога ідзе зварот да сервера, што можа быць непажадана ў асобных выпадках.

Ну, і пры працы праз API хуткасць узаемадзеяння можа быць злёгку вышэй, чым пры выкарыстанні SMTP сервераў. Па крайнім меры, так сцвярджае Mailgun . А як яно насамрэч - шчыра кажучы, не правяраў 🙂 Так што калі вы размяшчаеце больш дакладнай і поўнай інфармацыяй на гэты конт, то прашу падзяліцца ёй у каментарах.

З нагоды выкарыстання PHP mail () і sendmail - гэтыя падшыпнік, як І папярэднія, даволі падобныя. Іх галоўным падабенствам з'яўляецца адпраўка лістоў на серверы, на якім размешчаны сайт. Астатнія адрозненні заключаюцца ў суб'ектыўным выгодзе налады, спажыванні серверных рэсурсаў і г.д.

Але, як па мне, гэтыя разыходжанні настолькі мізэрныя, што імкнуцца да нуля, таму паглыбляцца ў іх апісанне я не стану. Тым больш, што многія з іх проста сцірае Laravel пры выкарыстанні яго API для налады і выкарыстанні пералічаных спосабаў.

Калі раптам я забыўся пра што-то прынцыпова важным - просьба выправіць мяне ў каментарах пад артыкулам.

Рассыланне лістоў у Laravel на сэрвэры прыкладання або праз іншы?

Такім чынам, нашы чатыры асноўных спосабу адпраўкі лістоў у Laravel падзяліліся на дзве групы, галоўным адрозненнем якіх з'яўляецца падыход да рассылання пошты.

У першую трапілі выкарыстанне паштовых сэрвісаў праз АПА і іх SMTP сервераў, а ў другую - эксплуатацыя PHP mail () і sendmail. Ўнутры груп адрозненні паміж спосабамі нязначныя, а вось пры параўнанні груп у цэлым ёсць што сказаць.

Да бясспрэчных пераваг адпраўкі email на сэрвэры прыкладання (сервер, на якім працуе дадатак / сайт) над выкарыстаннем іншага можна аднесці неабмежаваная колькасць адпраўляюцца паведамленняў (можа быць абмежавана толькі магчымасцямі сервера і тарыфных планам хостынгу). Але, у той жа час, частка лістоў (калі не ўсе) трапляюць у тэчку «Спам» на паштовым кліенце і, такім чынам, шанцы, што атрымальнік азнаёміцца ​​з вашай допісам своечасова, катастрафічна мізэрныя.

Прынамсі, так пішуць, спасылаючыся на змяненне серверамі загалоўкаў запыту перад адпраўкай. Хоць асабіста ў мяне пры выкарыстанні PHP mail () такіх сітуацый не было дзякуючы карэктнаму ўказанні загалоўкаў у кодзе.

Ну, і яшчэ да мінусаў адпраўкі пошты з сервера прыкладання можна аднесці расход серверных рэсурсаў, што пад час выкарыстаньня віртуальнага хостынгу і вялікіх аб'ёмаў лістоў можа стаць істотным недахопам.

Калі казаць пра другую групе спосабаў адпраўкі лістоў у Laravel (выкарыстанне API і SMTP сервераў паштовых сэрвісаў), то ў іх дадзены момант з'яўляецца самым галоўным перавагай, бо лісты адсылаюцца на іншых серверах, г.зн. выдаткоўваюцца іх рэсурсы, а не вашы. Затое вы будзеце пастаянна упірацца ў абмежаванні, бо пры выкарыстанні бясплатных тарыфаў колькасць email лімітавана і вагаецца ў межах ад 10000 у месяц для MailGun, заканчваючы 60000 у Gmail і Amazon SES.

У некаторых паштовых сэрвісаў, дарэчы, наогул няма бясплатных тарыфаў, як у SparkPost, да прыкладу. Натуральна, вас будуць запэўніваць у іншых перавагах выкарыстання паштовых сэрвісаў, якія становяцца даступнымі ў прэміум-акаўнтах ... Не здзіўлюся, калі высветліцца, што міфы пра спамности PHP mail () выдуманыя імі ж 😉

Усё можа быць ... Трэба ж ім неяк існаваць і канкураваць не толькі адзін з адным, але і з бясплатнымі аналагамі. Але я больш не мае намеру працягваць дадзены размова, бо ні першыя, ні другія за рэкламу мне не плацяць 🙂

Вернемся да рэальных і аб'ектыўным асаблівасцям. І тут хочацца сказаць, што нават калі заплюшчыць вочы на ​​штучныя абмежаванні колькасці лістоў, адпраўка пошты праз іншы сэрвіс сама валодае побач недахопаў. Да ліку адным з самых галоўных хочацца аднесці вялікую працягласць працэдуры адпраўкі email, у прыватнасці, праз SMTP Gmail, якую я заўважыў на практыцы.

Ну а цяпер глядзіце самі: калі для адпраўкі ліста на серверы прыкладання вам трэба адправіць лакальны запыт і атрымаць ад яго адказ, то пры выкарыстанні іншых сэрвісаў іх сервера могуць размяшчацца ў іншай краіне, а то і на іншым кантыненце (ледзь не напісаў планеце :-)) , куды запыт і адказ на яго будзе ісці нашмат даўжэй першага варыянту.

Дадайце да гэтага яшчэ час чакання чаргі (вас жа не аднаго абслугоўваюць!) І самой апрацоўкі запыту. Думаю, зразумела, да чаго я вяду 🙂

Магчыма, што пры рассыланні паведамленняў порцыямі час запыту да лакальнага сервера і іх прывязанага будуць прыкладна роўныя, але пры адпраўцы адзіночных паведамленняў паштовыя сэрвісы прайграюць PHP mail (), sendmail і іншым лакальным сродках рассылання лістоў.

Так, падчас гэтага дзейства трацяцца рэсурсы іншых сервераў, але за гэты плюс прыходзіцца расплачвацца часам.

Але, тым не менш, адпраўка лістоў праз API і SMTP сэрвера паштовых сэрвісаў ўсё роўна вельмі папулярная сярод распрацоўшчыкаў і кліентаў. Тым больш, што вялікія порцыі лістоў (масавыя рассылкі) часта вырабляюцца ў фонавым рэжыме, і пры гэтым абсалютна ўсё роўна, колькі часу яны займаюць. Затое на вялікіх праектах, дзе рэсурсы сервераў эканомяцца да мяжы з прычыны вялікай колькасці выкананых задач, магчымасць вынесці частка працэсаў на іншы рэсурс вельмі прывабная і обоснованна.

Таму, зыходзячы з дадзеных меркаванняў, я пры далейшай распрацоўцы буду выкарыстоўваць адпраўку пошты ў Laravel праз іншыя паштовыя сэрвісы. А дакладней, праз SMTP Gmail. Чаму менавіта гэты спосаб? Таму што ў мяне там ужо ёсьць рахунак, настроеная для выкарыстання SMTP сервера, а на іншых паштавікоў няма, і мне лянота яе ствараць 🙂

Гэта абсалютна не значыць, што дадзены метад ідэальны (самі маглі пераканацца, колькі мінусаў у яго атрымалася знайсці). Нават сам загаловак пра выбары найбольш аптымальнага спосабу адпраўкі пошты ў Laravel не зусім карэктны, але трэба ж было вас неяк зацікавіць прачытаць увесь матэрыял 🙂 Тым больш, што цяпер вы пазнаёміліся з добрымі якасцямі і недахопамі кожнага падыходу і зможаце самастойна выбраць тое, што вам больш па душы ці падыходзіць у канкрэтнай сітуацыі.

На гэтым сённяшняя артыкул з аглядам спосабаў адпраўкі пошты ў Laravel падыходзіць да канца. Спадзяюся, вы цяпер разумееце маё жаданне падзяліць тэорыю і практыку рэалізацыі адпраўкі email ў Ларавель на розныя публікацыі, бо адзін артыкул пра ўсё гэтым была б проста неабсяжнай і вы б палову яе не чыталі б ... А так ёсць мізэрны шанец, што вы дайшлі да гэтых радкоў 🙂 Калі так - з вас лайк пад артыкулам.

Ну, а наступную публікацыю я ўжо мэтанакіравана прысвячу рэалізацыі адпраўкі email праз API Laravel, для чаго скарыстаюся метадамі фасада Mail і падрабязна апішу яго магчымасці. Астатнія магчымасці API разгледзім ўжо далей, калі ў нас будзе гатовы да працы сайт. Ды і, магчыма, не ўсе гэтага і захочуць ...

На гэтым усё. Пішыце вашы водгукі ў каментарах і не забывайце ўступаць у сацыяльныя супольнасці. Таксама прымаюцца вашы прапановы з нагоды новых артыкулаў пра рэчы, якія будуць вам цікавыя.

Да хуткай сустрэчы!

PS: калі вам патрэбен сайт Альба неабходна ўнесці праўкі на існуючы, але для гэтага няма гадзіне І, прыглушаць, магу прапанаваць Свае паслугі.

Вялікія за 5 гадоў вопыту прафесійнай распрацоўкі сайтаў. Праца з PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular І іншымі тэхналогіямі web-распрацоўкі.

Вопыт распрацоўкі праектаў рознага ўзроўню: лендинги, карпаратыўныя сайты, інтэрнэт-Крамы, CRM, парталы. У тым ліку падтрымка І распрацоўка HighLoad праектаў. Дасылайце вашЫ заяўкі на email [email protected] .

І з Сябрамі ня забудзьцеся падзяліцца 😉

Пытаецца - "А што яшчэ трэба-то?
Com'; $ Result = mail ($ to, $ subject, $ message, implode ( "\ r \ n", $ headers)); echo $ result?
Php?
Адкрываем першы з пералічаных і што ж мы бачым?
Навошта выкарыстоўваць PHP mail () у якасці драйвера для адпраўкі пошты, калі можна наўпрост выклікаць гэтую функцыю ў кодзе?
Такім чынам, якой будзе парадак налады?
Такім чынам, які ж спосаб адпраўкі лістоў у Laravel нам выбраць?
Рассыланне лістоў у Laravel на сэрвэры прыкладання або праз іншы?
Чаму менавіта гэты спосаб?