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

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

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

ابدأ الدورة

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



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



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



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



Lettre هي مكتبة حديثة تدعم العمل غير المتزامن والمتزامن للتعامل مع البريد الإلكتروني في Rust. تدعم:



  • نقل SMTP (بما في ذلك STARTTLS و SSL/TLS);
  • تنسيق الرسائل بصيغة MIME (نص، HTML، مرفقات);
  • التعامل مع الترميزات (Base64، Quoted-Printable);
  • النقل غير المتزامن عبر tokio أو async-std.


لإضافة lettre إلى المشروع، نفذ الأمر التالي:



cargo add lettrecargo add tokio --features full  # للوضع غير المتزامن


إرسال بريد إلكتروني أساسي عبر SMTP



لننظر إلى مثال بسيط — إرسال رسالة نصية عبر خادم SMTP لـ Gmail (أو أي مزود آخر).



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

fn main() -> Result<(), Box<dyn std::error::Error>> { // تنسيق الرسالة let email = Message::builder() .from("المرسل <from@example.com>".parse()?) .to("المستلم <to@example.com>".parse()?) .subject("مرحباً من Rust!") .body("هذه رسالة اختبارية تم إرسالها بلغة Rust.".to_string())?;

// إعدادات SMTP (مثال لـ Gmail) let creds = Credentials::new( "your_email@gmail.com".to_string(), "your_app_password".to_string(), );

// إنشاء الناقل let mailer = SmtpTransport::relay("smtp.gmail.com")? .credentials(creds) .build();

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

Ok(())}


ملاحظة: لـ Gmail ستحتاج إلى كلمة مرور التطبيق، وليس كلمة المرور الرئيسية. بالنسبة للمزودين الآخرين (Yandex، Mail.ru، SMTP الخاص)، قم بتغيير عنوان الخادم والمنفذ.



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



تتيح لك Lettre تنسيق رسائل MIME متعددة الأجزاء بسهولة. لنضيف نص HTML ومرفقاً:



use lettre::message::header::ContentType;use lettre::message::{Attachment, MultiPart, SinglePart};use lettre::{Message, SmtpTransport, Transport};

fn send_html_with_attachment() -> Result<(), Box<dyn std::error::Error>> { // نص HTML للرسالة let html_body = "<h1>مرحباً!</h1><p>هذه رسالة HTML من Rust.</p>".to_string();

// تنسيق رسالة متعددة الأجزاء let email = Message::builder() .from("المرسل <from@example.com>".parse()?) .to("المستلم <to@example.com>".parse()?) .subject("رسالة HTML مع مرفق") .multipart( MultiPart::mixed() .singlepart( SinglePart::builder() .header(ContentType::TEXT_HTML) .body(html_body), ) .singlepart( Attachment::new("document.pdf".to_string()) .body(vec![0x25, 0x50, 0x44, 0x46], ContentType::parse("application/pdf")?), ), )?;

// الإرسال (مشابه للمثال السابق)

توصيات