كيفية إرسال رسائل البريد الإلكتروني من خلال Gmail في Python؟

نشرت: 2021-06-06

يعد إرسال مجموعة كبيرة من رسائل البريد الإلكتروني يدويًا مهمة شاقة. يمكنك استخدام خدمات الجهات الخارجية لإرسال رسائل البريد الإلكتروني بالجملة في وقت واحد.

ماذا عن إنشاء البرنامج النصي المخصص الخاص بك لإرسال رسائل البريد الإلكتروني؟

أليس من الرائع؟

نعم انها كذلك. سنقوم بكتابة نص بلغة بايثون لإرسال رسائل البريد الإلكتروني.

يوجد في Python مكتبة تسمى smtplib تُستخدم لإرسال رسائل البريد الإلكتروني. تستند مكتبة smtplib إلى SMTP (بروتوكول نقل البريد البسيط). يستخدم بروتوكول SMTP لإرسال رسائل البريد الإلكتروني للآخرين.

إعداد Gmail

هنا ، سنستخدم Gmail كمزود بريد إلكتروني. لا تسمح Google للنصوص بتسجيل الدخول. ونحن بحاجة إلى إجراء تغيير في أمان حساب Gmail الخاص بنا والذي يسمح للنصوص بتسجيل الدخول إلى حساب Gmail الخاص بنا.

إن تغيير خيار الأمان في حساب Gmail الخاص بنا ليس جيدًا لأنه يتيح للآخرين الوصول إلى الحساب بسهولة بالغة. يوصى بإنشاء حساب Gmail جديد. انتقل إلى الإعدادات هنا وقم بتشغيل الإعداد السماح بالتطبيقات الأقل أمانًا: تشغيل .

إذا لم تكن مرتاحًا لتشغيل الإعداد أعلاه ، فيمكنك استخدام Google API لتسجيل الدخول إلى حساب Gmail الخاص بك. يمكنك العثور على البرنامج النصي لاستخدام Google APIs للمصادقة هنا.

خطوات إرسال البريد

يجب القيام ببعض الخطوات لإرسال بريد باستخدام مكتبة smtplib . دعنا نرى الخطوات أولاً ثم سنكتب السيناريو.

# 1. الاتصال بخادم SMTP

سيكون لكل مقدم خدمة اسم مجال ومنفذ مختلف لخادم SMTP. يتعين علينا استخدام اسم مجال خادم SMTP ومنفذ مزود البريد الإلكتروني الذي سنستخدمه في البرنامج النصي. منفذ واسم نطاق خادم SMTP لـ Gmail هما smtp.gmail.com و <em>465</em> .

سنستخدم تشفير SSL لاتصال خادم SMTP لأنه أكثر أمانًا من تشفير TSL . إذا كنت تريد استخدام تشفير TSL ، فاستخدم المنفذ 587 بدلاً من 465 . سيكون اسم مجال خادم SMTP مختلفًا بناءً على مزود خدمة البريد الإلكتروني.

رمز الاتصال بخادم SMTP

 server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)

# 2. تسجيل الدخول

بمجرد إنشاء الاتصال بخادم SMTP ، يمكننا تسجيل الدخول باستخدام عنوان البريد الإلكتروني وكلمة المرور باستخدام طريقة كائن SMTP login . يبدو الرمز على النحو التالي.

 server.login(sender_email, password)

# 3. ارسل بريد

بعد تسجيل الدخول ، لا توجد طريقة يمكننا الانتظار لإرسال البريد. أرسل البريد باستخدام طريقة sendmail . تأكد من إرسال البريد بالتنسيق التالي.

الموضوع: your_subject_for \ newline mail_content

المسافات ليست ضرورية. هم فقط للتوضيح في الشكل أعلاه. دعونا نرى نموذج التعليمات البرمجية.

 server.sendmail(sender_mail, email, f"Subject: {subject}\n{content}")

# 4. يترك

لا تنس إنهاء SMTP ج

لقد رأينا خطوات إرسال البريد باستخدام Python. لكننا لم نناقش الكود الكامل. دعنا ننتقل بسرعة من خلال الكود.

 import smtplib, ssl class Mail: def __init__(self): self.port = 465 self.smtp_server_domain_name = "smtp.gmail.com" self.sender_mail = "GMAIL_ADDRESS" self.password = "SECURE_PASSWORD" def send(self, emails, subject, content): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: result = service.sendmail(self.sender_mail, email, f"Subject: {subject}\n{content}") service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() subject = input("Enter subject: ") content = input("Enter content: ") mail = Mail() mail.send(mails, subject, content)

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

يا هلا! لقد قمت بإرسال بريد باستخدام برنامج Python النصي.

محتوى HTML

ماذا لو كنت تريد إرسال البريد بتنسيق HTML؟ هل هو ممكن؟

نعم ، لما لا. يمكننا إرسال البريد باستخدام HTML إلى المكتبة التي تسمى email.mime . إنها مكتبة مدمجة.

MIME هو معيار يستخدم لتوسيع تنسيق رسائل البريد الإلكتروني لدعم برامج التطبيقات والفيديو والصور وما إلى ذلك .. ،

هناك نوعان من الفصول التي نحتاجها من وحدة email.mime . هم MIMEText و MIMEMultipart . دعونا نرى شرحا موجزا عنهم.

# 1. نص

يتم استخدام فئة MIMEText لكتابة محتوى البريد الخاص بنا بتنسيق HTML. سننشئ مثيلًا للفئة MIMEText عن طريق تمرير محتوى HTML ونوع المحتوى. انظر رمز عينة أدناه.

 html_content = MIMEText(html_template, 'html')

لا تدعم بعض خدمات البريد عرض HTML. لذلك ، من الأفضل إنشاء مثيلين من فئة MIMEText للنص العادي و HTML.

# 2. متعدد الأجزاء

يتم استخدام فئة MIMEMultipart لتبسيط تنسيق الموضوع وكتابته ، من العنوان إلى العنوان وما إلى ذلك ، وسنقدم المحتوى الذي تم إنشاؤه باستخدام فئة MIMEText إلى MIMEMultipart باستخدام طريقة attach .

نحتاج إلى التأكد من إنشاء مثيل MIMEMultipart باستخدام الوسيطة alternative لتقديم نص عادي أو HTML. لنرسل بريدًا يحتوي على محتوى بتنسيق HTML.

 import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart class Mail: def __init__(self): ... def send(self, emails): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: mail = MIMEMultipart('alternative') mail['Subject'] = 'Geekflare Celebrations' mail['From'] = self.sender_mail mail['To'] = email text_template = """ Geekflare Hi {0}, We are delighted announce that our website hits 10 Million views this month. """ html_template = """ <h1>Geekflare</h1> <p>Hi {0},</p> <p>We are delighted announce that our website hits <b>10 Million</b> views last month.</p> """ html_content = MIMEText(html_template.format(email.split("@")[0]), 'html') text_content = MIMEText(text_template.format(email.split("@")[0]), 'plain') mail.attach(text_content) mail.attach(html_content) service.sendmail(self.sender_mail, email, mail.as_string()) service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)

يمكنك أيضًا إضافة نسخة كربونية غير مرئية باستخدام تلك السمة Bcc في مثيل MIMEM متعدد الأجزاء.

إضافة المرفقات

يمكن أن تكون المرفقات عبارة عن صور وملفات PDF ومستندات وأوراق وما إلى ذلك ، ويطلق عليها MIMEBase في فئة email.mime . يتم استخدامه لإضافة مرفقات إلى البريد.

دعنا نضيف مرفقًا إلى البريد أعلاه.

 import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders from pathlib import Path class Mail: def __init__(self): ... def send(self, emails): ## login... for email in emails: ## MIMEMultipart instance ## text and html templates ## MIMEText instances ## attaching messages to MIMEMultipart ## attaching an attachment file_path = "Geekflare-logo.png" mimeBase = MIMEBase("application", "octet-stream") with open(file_path, "rb") as file: mimeBase.set_payload(file.read()) encoders.encode_base64(mimeBase) mimeBase.add_header("Content-Disposition", f"attachment; filename={Path(file_path).name}") mail.attach(mimeBase) ## sending mail service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)

أرسل بريدًا إلى رسائل مجمعة دفعة واحدة

لقد استخدمنا حلقة لإرسال نفس البريد إلى عدة أعضاء. هذه حالة واحدة (عندما لا تريد أن تعرف أجهزة الاستقبال عن أجهزة الاستقبال الأخرى).

افترض أنه يجب عليك إرسال نفس البريد إلى 1000 عضو في نفس المجموعة مرة واحدة. في مثل هذه الحالات ، لن يكون استخدام الحلقة مناسبًا. يمكننا إضافة رسائل بريد إلكتروني متعددة في الحقل " إلى" في إنشاء البريد العام. كيف تفعل ذلك في نص بايثون؟

نحتاج إلى دمج قائمة رسائل البريد الإلكتروني كسلسلة مفصولة بفاصلة ومسافة . يمكننا استخدام سلسلة طريقة الانضمام لدمج جميع رسائل البريد الإلكتروني كسلسلة. انظر إلى الكود لدمج رسائل البريد الإلكتروني كسلسلة.

 ", ".join(emails)

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

استنتاج

هناك بعض مكتبات الجهات الخارجية لإرسال رسائل البريد الإلكتروني في Python. بعض منها Envelopes و Yagmail و Flanker وما إلى ذلك. تساعدنا هذه المكتبات في كتابة نصوص برمجية قليلة. يمكنك استكشافهم أيضًا.

الآن ، يمكنك أتمتة أشياء بريدك الإلكتروني باستخدام نصوص Python النصية. سيكون هيكل إرسال رسائل البريد الإلكتروني مختلفًا بناءً على حالة الاستخدام الخاصة بك. لقد رأينا سيناريوهات مختلفة لإرسال رسائل البريد الإلكتروني. يمكنك بسهولة تخصيص البرامج النصية التي تمت مناقشتها في البرنامج التعليمي لحالة الاستخدام الخاصة بك. لقد أخذت المرجع من هذه المقالة.

ترميز سعيد