إرسال البريد الإلكتروني في Swift (iOS/macOS): MFMailComposeViewController وSMTP

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إرسال البريد الإلكتروني في Swift (iOS/macOS): دليل شامل



يُعد إرسال رسائل البريد الإلكتروني إحدى الوظائف الأساسية للتطبيقات الحديثة على الأجهزة المحمولة وأجهزة الكمبيوتر المكتبية. في نظام Apple البيئي لـ Swift (iOS/macOS)، هناك طريقتان رئيسيتان: استخدام وحدة التحكم المدمجة MFMailComposeViewController للإرسال البسيط عبر عميل البريد الإلكتروني للجهاز، والعمل عبر بروتوكول SMTP باستخدام مكتبات خارجية مثل SwiftSMTP. في هذه المقالة، سنشرح بالتفصيل كلتا الطريقتين، ومزاياهما، وقيودهما، ونقدم أمثلة عملية على الكود.



1. إرسال البريد الإلكتروني عبر MFMailComposeViewController



MFMailComposeViewController هو مكون من إطار العمل MessageUI.framework، والذي يوفر واجهة جاهزة لإنشاء وإرسال الرسالة. هذه الطريقة مثالية عندما تحتاج إلى تنفيذ الإرسال بسرعة دون إعداد خادم SMTP.



المزايا والقيود

  • المزايا: لا يتطلب إعداد SMTP، ويدعم محتوى HTML، والمرفقات، ويستخدم تلقائيًا حساب البريد الإلكتروني المُعد على الجهاز.
  • القيود: يعمل فقط على الأجهزة الحقيقية (وليس في المحاكي)، ويتطلب وجود حساب بريد إلكتروني مُعد، وغير مناسب للإرسال في الخلفية بدون واجهة مستخدم.


مثال على التنفيذ

للبدء، قم بتضمين إطار العمل وتنفيذ المفوض:



import UIKitimport MessageUI

class ViewController: UIViewController, MFMailComposeViewControllerDelegate {

@IBAction func sendEmailTapped(_ sender: UIButton) { guard MFMailComposeViewController.canSendMail() else { print("البريد الإلكتروني غير مُعد على الجهاز") return }

let mailComposer = MFMailComposeViewController() mailComposer.mailComposeDelegate = self mailComposer.setToRecipients(["recipient@example.com"]) mailComposer.setSubject("مرحبًا من Swift!") mailComposer.setMessageBody("<h1>رسالة اختبار</h1><p>هذا محتوى HTML.</p>", isHTML: true)

// إضافة مرفق if let fileData = "ملف نصي".data(using: .utf8) { mailComposer.addAttachmentData(fileData, mimeType: "text/plain", fileName: "example.txt") }

present(mailComposer, animated: true, completion: nil) }

// المفوض لمعالجة النتيجة func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { switch result { case .cancelled: print("تم إلغاء الإرسال") case .saved: print("تم حفظ الرسالة كمسودة") case .sent: print("تم إرسال الرسالة") case .failed: print("خطأ في الإرسال: \\(error?.localizedDescription ?? "غير معروف")") @unknown default: break } controller.dismiss(animated: true, completion: nil) }}


2. إرسال البريد الإلكتروني عبر SMTP باستخدام مكتبة SwiftSMTP



إذا كنت بحاجة إلى إرسال الرسائل برمجيًا، دون تدخل المستخدم (مثل رسائل التسجيل أو الإشعارات)، فاستخدم بروتوكول SMTP. إحدى المكتبات الشائعة لـ Swift هي SwiftSMTP. وهي تدعم TLS/SSL، والمصادقة، والتعامل مع المرفقات.



التثبيت عبر Swift Package Manager

أضف التبعية في ملف Package.swift:

dependencies: [    .package(url: "https://github.com/Kitura/Swift-SMTP.git", from: "2.0.0")]


مثال على الإرسال عبر خادم SMTP لـ Gmail

import SwiftSMTP

func sendEmailViaSMTP() { let smtp = SMTP( hostname: "smtp.gmail.com", // خادم SMTP email: "your-email@gmail.com", password: "your-app-passwo

توصيات