إرسال البريد الإلكتروني بلغة Rust: مكتبات lettre و mailparse للرسائل

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

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

ابدأ الدورة

إرسال البريد الإلكتروني بلغة Rust: أدوات قوية للعمل مع البريد



Rust هي لغة برمجة أنظمة تُستخدم بشكل متزايد لإنشاء خدمات ويب موثوقة وعالية الأداء. إحدى المهام النموذجية هي إرسال رسائل البريد الإلكتروني. في هذه المقالة، سنشرح بالتفصيل مكتبتين رئيسيتين في نظام Rust البيئي للعمل مع البريد الإلكتروني: lettre (الإرسال) و mailparse (التحليل). ستتعلم كيفية إعداد عميل SMTP، وإرسال بريد إلكتروني مع مرفقات، ومعالجة البريد الوارد.



مكتبة lettre: إرسال الرسائل عبر SMTP



lettre هي مكتبة حديثة، غير متزامنة ومتزامنة لإرسال البريد الإلكتروني عبر SMTP و SMTP-SSL و STARTTLS. وهي تدعم:



  • إرسال رسائل نصية و HTML
  • المرفقات (صور، مستندات، أرشيفات)
  • المصادقة (LOGIN, PLAIN, XOAUTH2)
  • توقيع DKIM وتشفير TLS
  • العمل مع async/await (tokio, async-std)


للبدء، أضف التبعية في Cargo.toml:



[dependencies]lettre = { version = "0.11", features = ["builder", "smtp-transport", "tokio1-rustls-tls"] }tokio = { version = "1", features = ["full"] }


مثال أساسي: إرسال رسالة نصية



use lettre::transport::smtp::authentication::Credentials;use lettre::{Message, SmtpTransport, Transport};

#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { // تكوين الرسالة let email = Message::builder() .from("المرسل <sender@example.com>".parse()?) .to("المستلم <recipient@example.com>".parse()?) .subject("تحية من Rust!") .body("هذه رسالة اختبارية تم إرسالها باستخدام مكتبة lettre.".to_string())?;

// إعداد SMTP (Gmail, Yandex, Mail.ru، إلخ.) let creds = Credentials::new("sender@example.com".to_string(), "your_password".to_string()); let mailer = SmtpTransport::relay("smtp.gmail.com")? .credentials(creds) .build();

// الإرسال match mailer.send(&email) { Ok(_) => println!("تم إرسال البريد الإلكتروني بنجاح!"), Err(e) => eprintln!("خطأ في الإرسال: {}", e), } Ok(())}


إرسال رسالة HTML مع مرفقات



لإرسال بريد إلكتروني بتنسيق HTML مع ملف، استخدم MultiPart:



use lettre::message::{header, MultiPart, SinglePart};use lettre::{Message, SmtpTransport, Transport};use std::fs;

let file_content = fs::read("document.pdf")?;let attachment = SinglePart::builder() .header(header::ContentType::parse("application/pdf")?) .header(header::ContentDisposition::attachment("document.pdf")) .body(file_content);

let html_part = SinglePart::builder() .header(header::ContentType::TEXT_HTML) .body(String::from("<h1>مرحباً!</h1><p>هذه رسالة HTML مع مرفق.</p>"));

let email = Message::builder() .from("sender@example.com".parse()?) .to("recipient@example.com".parse()?) .subject("HTML + مرفق") .multipart( MultiPart::mixed() .multipart(MultiPart::alternative().singlepart(html_part)) .singlepart(attachment), )?;


مكتبة mailparse: تحليل الرسائل الواردة



mailparse هي مكتبة خفيفة لتحليل رسائل البريد الإلكتروني بتنسيق MIME. وهي مفيدة إذا كنت تعالج البريد عبر IMAP/POP3 أو تقرأ ملفات .eml. الإمكانيات الرئيسية:



  • استخراج الرؤوس (From, To, Subject, Date)
  • الحصول على نص الرسالة (نص/HTML)
  • استخراج المرفقات مع أنواع MIME
  • فك تشفير Base64 و Quoted-Printable


مثال: قراءة ملف .eml



use mailparse::*;

fn main() { let eml_content = std::fs::read("email.eml")

توصيات