كيفية إرسال بريد إلكتروني باستخدام Codeأنبوب

⚡ ملخص ذكي

Codeتعتمد ميزة إرسال البريد الإلكتروني في Igniter على مكتبة البريد الإلكتروني المدمجة في إطار العمل لإرسال الرسائل عبر بروتوكول SMTP أو خادم البريد المحلي. ينشئ هذا المثال ملف تهيئة البريد الإلكتروني، وعرض نموذج الاتصال، ووحدة تحكم تقرأ مدخلات النموذج وترسل الرسالة.

  • 📧 المكتبة المدمجة: تقوم مكتبة البريد الإلكتروني بإرسال البريد بأقل قدر من التعليمات البرمجية وتدعم بروتوكولات SMTP وSendmail وPHP لنقل البريد.
  • ⚙️ التكوين المركزي: يقوم ملف تكوين البريد الإلكتروني المخصص email.php بتخزين البروتوكول والمضيف والمنفذ والمستخدم وكلمة المرور بحيث تبقى الإعدادات في مكان واحد.
  • 🔓 بيانات اعتماد SMTP: القيم الصحيحة لـ smtp_host و smtp_user و smtp_pass مطلوبة؛ لن تؤدي المعلمات الوهمية أبدًا إلى إرسال بريد إلكتروني حقيقي.
  • 📝 النموذج إلى وحدة التحكم: تقوم صفحة عرض جهات الاتصال بجمع معلومات المستلم والموضوع والرسالة، والتي يقرأها المتحكم باستخدام مكتبة الإدخال.
  • 📤 إرسال التدفق: يقوم المتحكم بتعيين from و to و subject و message، ثم يستدعي send() ويطبع تقرير تصحيح الأخطاء عند حدوث فشل.
  • 📎 ملفات HTML: يتيح لك تغيير نوع البريد إلى html واستدعاء الدالة attach() إرسال رسائل منسقة مع مرفقات ملفات.
  • 🤖 مساعدة الذكاء الاصطناعي: يمكن لأدوات الذكاء الاصطناعي إنشاء وحدة تحكم البريد الإلكتروني، والتحقق من صحة إدخال النموذج، وتشخيص أخطاء اتصال SMTP من مخرجات مصحح الأخطاء.

Codeإرسال بريد إلكتروني من Igniter

يُعدّ البريد الإلكتروني بالغ الأهمية في تطبيقات الويب. فعندما يُسجّل المستخدم، قد نرغب في إرسال بريد إلكتروني إليه للتحقق من عنوان بريده الإلكتروني والسماح له بتأكيد الاشتراك. كما نستخدم البريد الإلكتروني لإعادة تعيين كلمات المرور المفقودة وإرسال الفواتير والإيصالات إلى العملاء. Codeيُسهّل Igniter علينا إرسال رسائل البريد الإلكتروني من تطبيقنا باستخدام مجموعة متنوعة من الخيارات.

Codeيحتوي Igniter على مكتبة بريد إلكتروني مدمجة يمكننا العمل معها عند إرسال رسائل البريد الإلكتروني.

Codeإعدادات البريد الإلكتروني في Igniter

نحتاج إلى مكان مركزي يمكننا من خلاله إدارة إعدادات البريد الإلكتروني. Codeلا يأتي برنامج Igniter مزودًا بملف تكوين للبريد الإلكتروني، لذلك سيتعين علينا إنشاء واحد بأنفسنا.

قم بإنشاء ملف email.php في الدليل application/config

أضف الكود التالي إلى email.php

<?php defined('BASEPATH') OR exit('No direct script access allowed');
 
$config = array(
'protocol' => 'smtp', // 'mail', 'sendmail', or 'smtp'
'smtp_host' => 'smtp.example.com',
'smtp_port' => 465,
'smtp_user' => 'no-reply@example.com',
'smtp_pass' => '12345!',
'smtp_crypto' => 'ssl', //can be 'ssl' or 'tls' for example
'mailtype' => 'text', //plaintext 'text' mails or 'html'
'smtp_timeout' => '4', //in seconds
'charset' => 'iso-8859-1',
'wordwrap' => TRUE
);

هنا،

  • يُحدد الخيار 'protocol' => 'smtp' البروتوكول الذي ترغب في استخدامه عند إرسال البريد الإلكتروني. ويمكن أن يكون هذا البروتوكول هو: Gmail إعدادات SMTP أو إعدادات SMTP من مضيفك
  • يُحدد الخيار 'smtp_host' => 'smtp.example.com' خادم SMTP. على سبيل المثال، إذا كنت ترغب في استخدام Gmail عندها سيكون لديك شيء مثل smtp.gmail.com
  • 'smtp_port' => 465، وهو منفذ مفتوح على مضيف SMTP المحدد الذي تم تكوينه لبريد SMTP
  • 'smtp_user' => 'no-reply@example.com'، عنوان البريد الإلكتروني الذي سيتم استخدامه كمرسل عند إرسال رسائل البريد الإلكتروني. يجب أن يكون عنوان بريد إلكتروني صالحًا موجودًا على الخادم
  • 'smtp_pass' => '12345!'، كلمة مرور البريد الإلكتروني لمستخدم SMTP المحدد
  • 'smtp_crypto' => 'ssl'، يحدد طريقة التشفير المراد استخدامها، أي ssl، tls، إلخ.
  • يُحدد الخيار 'mailtype' => 'text' نوع البريد الإلكتروني المراد استخدامه. ويمكن أن يكون نصًا عاديًا أو HTML حسب احتياجاتك.
  • 'smtp_timeout' => '4'، يحدد الوقت بالثواني الذي يجب أن ينقضي عند محاولة الاتصال بالمضيف قبل طرح استثناء المهلة.
  • 'charset' => 'iso-8859-1'، يحدد مجموعة الأحرف التي سيتم استخدامها عند إرسال رسائل البريد الإلكتروني.
  • 'wordwrap' => TRUE، إذا تم ضبطه على TRUE، فسيتم تفعيل خاصية التفاف الكلمات. أما إذا تم ضبطه على FALSE، فلن يتم تفعيلها.

ملاحظات:لكي يعمل إرسال رسائل البريد الإلكتروني، يجب عليك توفير معلمات تكوين صالحة. لن تتمكن المعلمات الوهمية من إرسال رسائل البريد الإلكتروني.

Codeعرض البريد الإلكتروني في Igniter

في هذا القسم، سنقوم بإنشاء العرض الذي سيرسل البريد الإلكتروني إلى المستلم.

إنشاء دليل بريد إلكتروني جديد في التطبيق/العروض

أنشئ ملفًا جديدًا باسم contact.php في المسار application/views/email

أضف الكود التالي إلى application/views/email/contact.php

<!DOCTYPE html>
<html>
<head>
<title>CodeIgniter Send Email</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div>
<h3>Use the form below to send email</h3>
<form method="post" action="<?=base_url(0)?>" enctype="multipart/form-data">
<input type="email" id="to" name="to" placeholder="Receiver Email">
<br><br>
<input type="text" id="subject" name="subject" placeholder="Subject">
<br><br>
<textarea rows="6" id="message" name="message" placeholder="Type your message here"></textarea>
<br><br>
<input type="submit" value="Send Email" />
</form>
</div>
</body>
</html>

هنا،

  • لدينا نموذج HTML أساسي يقبل البريد الإلكتروني والموضوع والرسالة، ثم يمرر المعلمات إلى مسار البريد الإلكتروني.

Codeوحدة تحكم البريد الإلكتروني Igniter

لنقم الآن بإنشاء وحدة التحكم التي ستتولى إرسال البريد الإلكتروني.

قم بإنشاء ملف جديد EmailController.php في application/controllers/EmailController.php

أضف الكود التالي إلى EmailController.php

<?php
 
defined('BASEPATH') OR exit('No direct script access allowed');
 
class EmailController extends CI_Controller {
 
public function __construct() {
parent:: __construct();
 
$this->load->helper('url');
}
 
public function index() {
$this->load->view('email/contact');
}
 
function send() {
$this->load->config('email');
$this->load->library('email');
 
$from = $this->config->item('smtp_user');
$to = $this->input->post('to');
$subject = $this->input->post('subject');
$message = $this->input->post('message');
 
$this->email->set_newline("\r\n");
$this->email->from($from);
$this->email->to($to);
$this->email->subject($subject);
$this->email->message($message);
 
if ($this->email->send()) {
echo 'Your Email has successfully been sent.';
} else {
show_error($this->email->print_debugger());
}
}
}

هنا،

  • يُعرّف الصنف EmailController الذي يمتد من CI_Controller {…} وحدة تحكم البريد الإلكتروني الخاصة بنا والتي تمتد بدورها من الصنف الأب. Codeوحدة تحكم الإشعال.
  • تحدد الوظيفة العامة __construct() {...} المُنشئ الفرعي الذي يستدعي طريقة المُنشئ الأصل.
  • يحدد فهرس الوظيفة العامة () {...} طريقة الفهرس التي تعرض نموذج الاتصال
  • تحدد الدالة send() {…} الطريقة التي ترسل بها البريد الإلكتروني
    • $this->load->config('email'); يقوم بتحميل إعدادات تكوين البريد الإلكتروني
    • $this->load->library('email'); يقوم بتحميل مكتبة البريد الإلكتروني
    • $from = $this->config->item('smtp_user'); يحصل على معرف المرسل من ملف تكوين البريد الإلكتروني الذي حددناه.
    • $to = $this->input->post('to'); يحصل على القيمة من النموذج المقدم
    • $subject = $this->input->post('subject'); يحدد موضوع البريد الإلكتروني من النموذج
    • $message = $this->input->post('message'); يحدد رسالة البريد الإلكتروني من النموذج
    • $this->email->set_newline(“\r\n”); يحدد أحرف السطر الجديدة للرسائل الإلكترونية
    • $this->email->from($from); يحدد عنوان البريد الإلكتروني للمرسل
    • $this->email->to($to); يحدد عنوان البريد الإلكتروني للمستلم
    • $this->email->subject($subject); يحدد موضوع البريد الإلكتروني
    • $this->email->message($message); يحدد رسالة البريد الإلكتروني
    • إذا حاولت الدالة `$this->email->send()` إرسال البريد الإلكتروني، فسيتم عرض رسالة "تم إرسال بريدك الإلكتروني بنجاح". أما إذا لم يتم إرساله، فسيتم عرض معلومات تصحيح الأخطاء حول سبب المشكلة.

لنحدد الآن مسارات البريد الإلكتروني.

طرق البريد الإلكتروني

أضف المسارات التالية إلى application/config/routes.php

$route['send-email'] = 'EmailController';
$route['email'] = 'EmailController/send';

يمكننا الآن تحميل نموذج الاتصال في متصفح الويب.

لنبدأ تشغيل خادم PHP المدمج.

افتح الطرفية أو سطر الأوامر وانتقل إلى جذر تطبيقك. في حالتي، يقع الجذر في محرك الأقراص C:\Sites\ci-app

cd C:\Sites\ci-app

ابدأ تشغيل الخادم باستخدام الأمر التالي

php -S localhost:3000

قم بتحميل ما يلي URL في متصفح الويب الخاص بك: http://localhost:3000/send-email

يجب أن تكون قادرًا على رؤية النموذج التالي

طرق البريد الإلكتروني

أدخل عنوان البريد الإلكتروني للمستلم، والموضوع، ونص الرسالة، ثم انقر على "إرسال البريد الإلكتروني". إذا كانت إعدادات بريدك الإلكتروني صحيحة، فستظهر لك رسالة تأكيد الإرسال.

كيفية إرسال رسائل البريد الإلكتروني والمرفقات بتنسيق HTML Codeأنبوب

تتيح مكتبة البريد الإلكتروني نفسها إرسال رسائل وملفات بتنسيقات غنية. إجراء تغييرين بسيطين يحوّلان مثال النص العادي أعلاه إلى بريد إلكتروني بتنسيق HTML مع مرفق.

$this->email->set_mailtype('html');
$this->email->message('<h3>Welcome</h3><p>Thanks for joining us.</p>');
$this->email->attach('/path/to/report.pdf');
  • set_mailtype('html'): يُخبر المكتبة بأن النص يحتوي على HTML، لذلك يتم عرض علامات مثل العناوين والروابط في صندوق الوارد الخاص بالمستلم.
  • attach(): يضيف ملفًا من مسار الخادم إلى الرسالة؛ استدعِ هذه الدالة مرة واحدة لكل ملف قبل إرساله.

تذكر أن رسائل البريد الإلكتروني بتنسيق HTML يجب أن تتضمن بديلاً نصياً عادياً، وقد يتم رفض المرفقات الكبيرة بواسطة خوادم البريد الصارمة.

الأسئلة الشائعة

لا يحتوي المضيف المحلي عادةً على خادم بريد، لذا يفشل بروتوكول البريد دون إشعار. قم بتغيير البروتوكول إلى SMTP وقم بتوفير مضيف SMTP حقيقي واسم مستخدم وكلمة مرور، أو استخدم خدمة مثل Mailفخ للاختبار المحلي.

قم بتعيين smtp_host إلى smtp.gmail.com، وsmtp_port إلى 465 مع استخدام ssl، وsmtp_user إلى اسم المستخدم الخاص بك Gmail العنوان. استخدم Google استخدم كلمة مرور التطبيق بدلاً من كلمة مرورك العادية، لأن Gmail يحظر عمليات تسجيل الدخول باستخدام كلمات المرور الأساسية.

يستخدم بروتوكول البريد دالة mail() في لغة PHP، ويستدعي sendmail الملف التنفيذي المحلي للخادم، بينما يتصل smtp بخادم بريد خارجي باستخدام بيانات الاعتماد. يُعد SMTP الأكثر موثوقية لتسليم الرسائل والتحقق من هوية المرسل.

نعم. يمكن للذكاء الاصطناعي بناء وحدة التحكم، وإضافة التحقق من صحة النموذج للمستلم والموضوع، وتضمين معالجة النجاح والخطأ. Revراجع إعدادات SMTP وأضف تحديد معدل النقل قبل استخدامه في بيئة الإنتاج.

نعم. قم بلصق مخرجات print_debugger()، وسيتمكن الذكاء الاصطناعي من تفسير حالات فشل مصافحة SMTP أو أخطاء المصادقة أو مشكلات المنفذ، ثم يوصي بقيم المضيف أو المنفذ أو التشفير المصححة لتجربتها.

تلخيص هذه التدوينة بـ: