البرمجة

Python Email Attachment Guide

بدون معرفة مسبقة كبيرة بـ MIME، حاولت تعلم كيفية كتابة سكريبت Python لإرسال بريد إلكتروني مع مرفق ملف. بعد التحقق المتقاطع من وثائق Python، وأسئلة Stack Overflow، والبحث العام على الويب، اخترت الكود التالي[1] واختبرته للتأكد من أنه يعمل.

python
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders fromaddr = "YOUR EMAIL" toaddr = "EMAIL ADDRESS YOU SEND TO" msg = MIMEMultipart() msg['From'] = fromaddr msg['To'] = toaddr msg['Subject'] = "SUBJECT OF THE EMAIL" body = "TEXT YOU WANT TO SEND" msg.attach(MIMEText(body, 'plain')) filename = "NAME OF THE FILE WITH ITS EXTENSION" attachment = open("PATH OF THE FILE", "rb") part = MIMEBase('application', 'octet-stream') part.set_payload((attachment).read()) encoders.encode_base64(part) part.add_header('Content-Disposition', "attachment; filename= %s" % filename) msg.attach(part) server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(fromaddr, "YOUR PASSWORD") text = msg.as_string() server.sendmail(fromaddr, toaddr, text) server.quit()
  1. لدي فكرة تقريبية عن كيفية عمل هذا السكريبت الآن، ووضعت الخطوات التالية. يرجى إعلامي عما إذا كانت خطواتي دقيقة أم لا.
scss
msg.as_string() | +------------MIMEMultipart | |---content-type | +---header---+---content disposition +----.attach()-----+----MIMEBase----| | +---payload (to be encoded in Base64) +----MIMEText
  1. كيف يمكنني معرفة متى يتعين استخدام MIMEMultipart و MIMEText و MIMEBase؟ يبدو أن هذا سؤال معقد، لذلك ربما يمكنكم تقديم بعض القواعد العامة لي؟

  2. لقد قرأت أن MIME لديها هيكل شبيه بالشجرة[2]، هل هذا يعني أن MIMEMultipart دائمًا في القمة؟

  3. في الكود البرمجي الأول، قام MIMEMultipart بترميز [‘From’] و [‘To’] و [‘Subject’]، لكن في وثائق Python، يمكن أيضًا استخدام MIMEText لترميز [‘From’] و [‘To’] و [‘Subject’]. كيف أقرر أيهما يجب استخدامه؟

  4. ما هو بالضبط “payload”؟ هل هو محتوى ما يجب نقله؟ إذا كان الأمر كذلك، فما هو نوع المحتوى الذي يتضمنه هذا (لاحظت أن النص الرئيسي والمرفق يتم التعامل معهما على أنها payloads)? اعتقدت أن هذا سؤال سهل ولكني فقط لم أتمكن من العثور على إجابة مرضية وموثوقة وبسيطة.

  5. هل من الصحيح أنه على الرغم من أن MIME يمكنه إرفاق تنسيقات ملف أسهل بكثير من مجرد بعض النصوص، في النهاية تُحوَّل جميع عمليات الترميز ومعلومات الرأس والأحمال إلى سلاسل نصية حتى يمكن تمريرها إلى .sendmail()؟

[1] http://naelshiab.com/tutorial-send-email-python/
[2] http://blog.magiksys.net/generate-and-send-mail-with-python-tutorial

المزيد من المعلومات

بالطبع، إليك المزيد من المعلومات:

  1. كيفية استخدام MIMEMultipart و MIMEText و MIMEBase:

    • MIMEMultipart: تُستخدم لإنشاء جسم رسالة متعددة الأجزاء، حيث يمكن إرفاق العديد من الأجزاء مثل النصوص والملفات.
    • MIMEText: تُستخدم لإنشاء جسم رسالة نصية بسيطة، مثل جسم البريد الإلكتروني الذي يحتوي على نص.
    • MIMEBase: تُستخدم لإنشاء جسم رسالة قاعدة MIME عامة، والتي يمكن استخدامها لإرفاق ملفات أو بيانات غير نصية.
  2. بالنسبة للهيكل الشبيه بالشجرة لـ MIME، فعادةً يتم وضع MIMEMultipart في القمة لأنه يمكن أن يحتوي على أجزاء متعددة، بما في ذلك نصوص MIME وملفات MIME.

  3. في الكود المعروض، يتم استخدام MIMEMultipart لتشكيل الرسالة الأساسية وإضافة التوجيهات والموضوع. يمكن استخدام MIMEText بدلاً من MIMEMultipart إذا كنت ترغب فقط في إرسال نص بسيط دون مرفقات. عمومًا، يُفضل استخدام MIMEMultipart إذا كنت تخطط لإرفاق مرفقات.

  4. “Payload” هو المحتوى الفعلي للرسالة، بما في ذلك النصوص والملفات. يمكن أن تكون هذه البيانات مشفرة أو غير مشفرة وتكون جزءًا من جسم الرسالة.

  5. بالنعمة، في نهاية المطاف، يتم تحويل جميع الأجزاء من جسم الرسالة إلى سلسلة نصية واحدة باستخدام الوظيفة as_string()، التي تمكنك من تمرير الرسالة إلى وظيفة .sendmail() لإرسالها عبر البروتوكول SMTP.

هذه المعلومات يمكن أن تساعدك في فهم كيفية استخدام MIMEMultipart و MIMEText و MIMEBase بشكل أفضل عند إنشاء سكريبتات Python لإرسال البريد الإلكتروني مع مرفقات.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر