يتطلب إرسال رسائل البريد الإلكتروني في Laravel التعاون بين ثلاثة مكونات: Laravel mailer، وفئات Laravel القابلة للإرسال، وواجهة البريد. يتعامل كل واحد من الثلاثة مع جانب مختلف من دورة حياة إرسال البريد الإلكتروني.
تعد برامج البريد هي برامج التشغيل لتوصيل خدمات إرسال البريد الإلكتروني (مثل AWS SES وSendgrid وMailgun وما إلى ذلك) التي يمكن للتطبيق استخدامها لإعادة توجيه رسائل البريد الإلكتروني إلى المستلمين.
Laravel Mailable هي فئات خاصة تمثل قالبًا للبريد الإلكتروني المراد إرساله. فهو يحتوي على جميع المعلومات النموذجية لرسالة البريد الإلكتروني مثل المحتوى، وحقل "إلى"، والمرفقات، وما إلى ذلك.
أخيرًا، واجهة البريد هي نقطة الوصول لطلب الإرسال الفعلي لما يمكن إرساله من خلال برنامج تشغيل البريد.
لقد أتيحت لي الفرصة لاستكشاف هذا النظام بالتفصيل والآن في ذروة المفتش يرسل أكثر من 6000 رسالة بريد إلكتروني في الساعة.
آمل أن تكون تجربتي مفيدة لك لفهم هذا المكون من إطار العمل بشكل أفضل نظرًا لأن Laravel Mailable هو أحد المكونات الرئيسية لأي تطبيق حديث.
لمزيد من المقالات التقنية يمكنك متابعتي على Linkedin أو X.
إعدادات برامج تشغيل البريد في Laravel موجودة في ملف config/mail.php. ومن الممكن تعريف عدة مرسلات بريدية، يتميز كل منها باسم وسائق النقل.
'mailgun' => [ 'transport' => 'mailgun', // 'client' => [ // 'timeout' => 5, // ]
سيحاول Laravel استخدامها في حالة تعطل خدمة البريد الإلكتروني الأساسية.
القابل للإرسال هو فئة PHP تمثل بريدًا إلكترونيًا مرسلاً بواسطة تطبيقك. يمكنك إنشاء فئة جديدة قابلة للإرسال باستخدام أمر Artisan make.
php artisan make:mail OrderConfirmation
يتم تكوين المادة القابلة للإرسال من خلال ثلاث طرق رئيسية هي المغلف والمحتوى والمرفقات، والتي تتعامل على التوالي مع تحديد الرؤوس ونص الرسالة وأي مرفقات.
use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Attachment; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class OrderConfirmation extends Mailable { use Queueable; use SerializesModels; public function __construct(public Order $order) {} /** * Configure the email message */ public function envelope() { return new Envelope( from: new Address('[email protected]', 'E-commerce'), subject: 'Order Confirmation', ); } /** * Generate the body */ public function content() { return new Content( markdown: 'emails.orders.confirm', ); } /** * Configure the email attachements */ public function attachments() { $code = $this->order->code; return [ Attachment::fromPath("/path/to/order-{$code}.pdf"), ]; } }
من الواضح أن عرض محتوى البريد الإلكتروني يُعهد به إلى قالب Blade المناسب. داخل عرض Blade، من الممكن استرداد البيانات التي سيتم استخدامها لعرض البريد الإلكتروني باستخدام الخصائص العامة المحددة في الفئة القابلة للإرسال (الطلب في المثال أعلاه).
Code: {{ $order->code }} Address: {{ $order->address }} ...
يتم الإرسال الفعلي للبريد الإلكتروني عبر واجهة البريد وطرق الإرسال والإرسال.
class OrderController extends Controller { public function ship(Order $order) { // do stuff with the order // Send the confirmation email Mail::to($order->user)->send(new OrderConfirmation($order)); } }
يمكن تمرير مستلم البريد الإلكتروني كسلسلة عنوان بريد إلكتروني أو عبر كائن مستخدم أو مجموعة من الكائنات التي لها الاسم وخصائص البريد الإلكتروني.
يتم تمثيل البريد الإلكتروني الفعلي الذي سيتم إرساله بواسطة الكائن القابل للإرسال، والذي يتلقى الخصائص اللازمة لعرض قالب Blade المرتبط بالمحتوى.
توفر واجهة البريد العديد من الأساليب المتسلسلة التي تسمح لك بتحديد تكوين الإرسال بمزيد من التفصيل، سواء فيما يتعلق بالمستلمين (مع طريقتي cc وbcc) وأوقات وطرق الإرسال (قائمة الانتظار أو الأحدث).
إذا كنت تريد التعرف على كيفية إنشاء واجهات خاصة بك يمكنك قراءة المقال أدناه:
https://inspector.dev/how-to-extend-laravel-with-driver-based-services/
نظرًا لأن إرسال البريد الإلكتروني يتطلب استخدام خدمات خارجية (برامج تشغيل Mailer)، فقد تكون عملية بطيئة ذات تأثير سلبي على تجربة المستخدم.
يسمح لك Laravel بوضع رسائل البريد الإلكتروني في قائمة الانتظار لإرسالها في الخلفية. إذا كنت مهتمًا بالبرنامج التعليمي حول كيفية استخدام نظام قائمة الانتظار Laravel على نطاق واسع، فيمكنك قراءة المقالة أدناه:
https://inspector.dev/what-worked-for-me-using-laravel-queues-from-the-basics-to-horizon/
لتأجيل إرسال بريد إلكتروني في الخلفية لديك خياران: واجهة MustQueue، أو طريقة قائمة الانتظار لواجهة البريد.
كما هو موضح في المقتطف السابق، يتم إنشاء الفئة القابلة للإرسال مع بعض السمات المرفقة افتراضيًا مثل Queueable.
يسمح باستخدام أساليب قائمة الانتظار برمجيًا على واجهة البريد دون لمس التنفيذ الخاص بك:
Mail::to($user)->queue(new OrderConfirmation($order));
بدلاً من ذلك، يمكنك الإعلان عن تنفيذ واجهة MustQueue في فئة Mailable:
use Illuminate\Contracts\Queue\ShouldQueue; class OrderConfirmation extends Mailable implements ShouldQueue { ... }
إذا كنت تستخدم هذه الواجهة، فسيتم وضع إرسال البريد الإلكتروني دائمًا في قائمة الانتظار أيضًا إذا قمت باستدعاء طريقة الإرسال القياسية على واجهة البريد.
// If the mailable class implements ShouldQueue these methods has the same behaviour. Mail::to($user)->send(new OrderConfirmation($order)); Mail::to($user)->queue(new OrderConfirmation($order));
عند تنفيذ طريقة عرض مرتبطة برسالة بريد إلكتروني، من المفيد حقًا الحصول على تعليقات مرئية حول النتيجة النهائية التي سيظهرها عرض Blade. يمكنك القيام بذلك باستخدام ملف المسارات/mailable.php في مشاريع Laravel الخاصة بك.
]
/* * Render email in the browser. * * Visit https://homestead.test/mailable */ Route::get('/', function () { return new \App\Domains\Organization\Mails\IngestionLimitMail( \App\Domains\Organization\Models\Organization::firstOrFail() ); });
يمكنك إرجاع نسخة صالحة قابلة للبريد من المسار وسيقوم Laravel بعرض العرض في المتصفح. إنه مثل تطوير صفحة ويب عادية.
أخيرًا تذكر الحد من توفر هذا المسار في
مزود خدمة الطريق:
class RouteServiceProvider extends ServiceProvider { /** * Define your route model bindings, pattern filters, etc. * * @return void */ public function boot() { if (app()->environment('local')) { $this->mapMailableRoutes(); } } /** * Render mailables in the browser. * * @return void */ protected function mapMailableRoutes() { Route::prefix('mailable') ->group(base_path('routes/mailable.php')); } }
لمزيد من المقالات التقنية يمكنك متابعتي على Linkedin أو X.
Inspector عبارة عن أداة لمراقبة تنفيذ التعليمات البرمجية مصممة خصيصًا لمطوري البرامج. لا تحتاج إلى تثبيت أي شيء على مستوى الخادم، فقط قم بتثبيت حزمة Laravel وستكون جاهزًا للبدء.
إذا كنت تبحث عن مراقبة HTTP، ورؤى استعلام قاعدة البيانات، والقدرة على إعادة توجيه التنبيهات والإشعارات إلى بيئة المراسلة المفضلة لديك، فجرّب Inspector مجانًا. سجل حسابك.
أو تعرف على المزيد على الموقع: https://inspector.dev
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3