يعد تشفير البريد الإلكتروني والمصادقة عليه من تقنيات الأمان الحديثة التي يمكنك استخدامها لحماية رسائل البريد الإلكتروني ومحتوياتها من الوصول غير المصرح به.
يستخدم الجميع، من الأفراد إلى أصحاب الأعمال، البريد الإلكتروني للتواصل الرسمي، وقد يحتوي على معلومات حساسة. لذلك، يُعدّ تأمين البريد الإلكتروني أمرًا بالغ الأهمية، خاصةً مع تزايد الهجمات الإلكترونية، مثل التصيد الاحتيالي والاحتيال عبر الرسائل النصية القصيرة، وغيرها.
في هذه المقالة، سأناقش كيفية إرسال رسائل البريد الإلكتروني في بايثون بشكل آمن باستخدام تشفير البريد الإلكتروني والمصادقة.
إعداد بيئة بايثون
قبل أن تبدأ في إنشاء الكود لإرسال رسائل البريد الإلكتروني، قم بإعداد بيئة بايثون أولاً باستخدام الإعدادات والمكتبات التي ستحتاج إليها.
يمكنك إرسال رسائل البريد الإلكتروني في بايثون باستخدام:
- بروتوكول نقل البريد البسيط (SMTP): يُبسّط هذا البروتوكول، المُطبّق على مستوى التطبيقات، العملية، إذ يُوفّر بايثون مكتبة أو وحدة مدمجة (smtplib) لإرسال رسائل البريد الإلكتروني. وهو مُناسب للشركات بجميع أحجامها، وكذلك للأفراد، لأتمتة إرسال البريد الإلكتروني الآمن باستخدام بايثون. نستخدم خدمة SMTP لـ Gmail في هذه المقالة.
- واجهة برمجة تطبيقات البريد الإلكتروني: يمكنك الاستفادة من واجهة برمجة تطبيقات خارجية، مثل Mailtrap Python SDK، وSendGrid، وGmail API، وغيرها، لإرسال رسائل البريد الإلكتروني باستخدام بايثون. توفر هذه الطريقة ميزات إضافية وسرعات عالية في تسليم البريد الإلكتروني، على الرغم من أنها تتطلب بعض الاستثمار.
في هذا الدرس، سنختار الخيار الأول – إرسال رسائل البريد الإلكتروني في بايثون باستخدام SMTP، والذي تُسهّله مكتبة smtplib. تستخدم هذه المكتبة بروتوكول RFC 821 وتتفاعل مع SMTP وخوادم البريد الإلكتروني لتبسيط إرسال البريد الإلكتروني من تطبيقاتك. بالإضافة إلى ذلك، يجب عليك تثبيت حزم لتمكين تشفير البريد الإلكتروني والمصادقة والتنسيق في بايثون.
الخطوة 1: تثبيت بايثون
ثبّت بايثون على جهاز الكمبيوتر (ويندوز، ماك، لينكس، إلخ). يمكنك زيارة الموقع الرسمي لبايثون وتنزيله وتثبيته من هناك.
إذا كنت قد قمت بتثبيته بالفعل، قم بتشغيل هذا الكود للتحقق منه:
python --version
الخطوة 2: تثبيت الوحدات والمكتبات الضرورية
smtplib: يُدير اتصالات SMTP. استخدم الكود أدناه لاستيراد ‘smtplib’ والاتصال بخادم البريد الإلكتروني الخاص بك:
import smtplib
وحدة email: توفر فئات (الموضوع، المرسل إليه، المرسل إليه، إلخ) لإنشاء رسائل البريد الإلكتروني وتحليلها. كما تُسهّل ترميز البريد الإلكتروني وفك تشفيره باستخدام امتدادات بريد الإنترنت متعددة الأغراض (MIME).
MIMEText: يُستخدم لتنسيق رسائل البريد الإلكتروني، ويدعم إرسال رسائل بريد إلكتروني تحتوي على نصوص ومرفقات مثل الصور ومقاطع الفيديو وما إلى ذلك. استورده باستخدام الكود أدناه:
import MIMEText
MIMEMultipart: استخدم هذه المكتبة لإضافة المرفقات وأقسام النص بشكل منفصل في بريدك الإلكتروني.
import MIMEMultipart
ssl: يوفر تشفير طبقة مآخذ التوصيل الآمنة (SSL).
الخطوة 3: إنشاء حساب Gmail
لإرسال رسائل بريد إلكتروني باستخدام خدمة بريد Gmail SMTP، أنصح بإنشاء حساب تجريبي لتطوير الكود. احذف الحساب بعد اختبار الكود.
السبب هو أنك ستحتاج إلى تعديل إعدادات الأمان لحساب Gmail الخاص بك لتمكين الوصول من شيفرة بايثون لإرسال رسائل البريد الإلكتروني. قد يؤدي هذا إلى كشف تفاصيل تسجيل الدخول، مما يُعرّض الأمان للخطر. بالإضافة إلى ذلك، سيؤدي ذلك إلى إغراق حسابك برسائل بريد إلكتروني تجريبية كثيرة.
لذا، بدلًا من استخدام حساب Gmail الخاص بك، أنشئ حسابًا جديدًا لإنشاء الشيفرة واختبارها. إليك كيفية القيام بذلك:
- إنشاء حساب Gmail جديد
- إعداد كلمة مرور التطبيق الخاص بك:
بعد ذلك، حدد اسمًا لكلمة مرور التطبيق وانقر على “إنشاء”. ستحصل على كلمة مرور مكونة من 16 رقمًا بعد اتباع بعض التعليمات على الشاشة. احفظ كلمة المرور بأمان.
استخدم كلمة المرور هذه عند إرسال رسائل البريد الإلكتروني باستخدام بايثون. هنا، نستخدم Gmail SMTP، ولكن إذا كنت ترغب في استخدام مزود خدمة بريد إلكتروني آخر، فاتبع نفس العملية. أو تواصل مع فريق تكنولوجيا المعلومات في شركتك لطلب الدعم للوصول إلى خادم SMTP.
مصادقة البريد الإلكتروني باستخدام بايثون
مصادقة البريد الإلكتروني هي آلية أمان للتحقق من هوية المُرسِل، مما يضمن صحة رسائل البريد الإلكتروني الواردة من نطاق مُعين. في حال عدم وجود آلية مصادقة بريد إلكتروني مُفعّلة، فقد تصل رسائلك إلى مجلدات البريد العشوائي، أو قد يتمكن مُخترقون من انتحالها أو اعتراضها. قد يؤثر هذا على معدلات تسليم رسائلك الإلكترونية وسمعة المُرسِل.
هذا هو السبب الذي يجعلك مضطرًا إلى تمكين آليات وبروتوكولات مصادقة البريد الإلكتروني الخاصة بـبايثون، مثل:
- مصادقة SMTP: إذا كنت ترسل رسائل بريد إلكتروني باستخدام خادم SMTP مثل Gmail SMTP، يمكنك استخدام هذه الطريقة للتحقق من صحة المُرسِل عند إرسال رسائل بريد إلكتروني عبر خادم بريد مُحدد.
- SPF: يرمز إلى إطار سياسة المرسل ويتحقق مما إذا كان عنوان IP الخاص بالخادم المرسل موجودًا أم لا
- DKIM: اختصار لـ DomainKeys Identified Mail (البريد المُعرَّف بمفاتيح النطاق)، ويُستخدم لإضافة توقيع رقمي إلى رسائل البريد الإلكتروني لضمان عدم قدرة أي شخص على تعديل محتواها أثناء إرسالها. بعد ذلك، يتحقق خادم المُستلِم من التوقيع الرقمي. وبالتالي، تبقى جميع رسائلك الإلكترونية ومحتوياتها آمنة دون أي تعديل.
- DMARC: اختصار لـ Domain-based Message Authentication, Reporting, and Conformance (مصادقة الرسائل والإبلاغ عنها والتوافق). يُرشد DMARC خوادم البريد الإلكتروني إلى ما يجب فعله في حال فشل مصادقة رسالة بريد إلكتروني. بالإضافة إلى ذلك، يُقدم تقارير عند اكتشاف أي أنشطة مشبوهة على نطاقك.
كيفية تنفيذ مصادقة البريد الإلكتروني في بايثون
للتحقق من صحة بريدك الإلكتروني في بايثون باستخدام SMTP، تُعدّ مكتبة smtplib مفيدة. إليك كيفية عمل أمان SMTP في بايثون:
import smtplib
server = smtplib.SMTP('smtp.domain1.com', 587)
server.starttls() # Start TLS for secure connection
server.login('my_email@domain1.com', 'my_password')
message = "Subject: Test Email."
server.sendmail('my_email@domain1.com', 'receiver@domain2.com', message)
server.quit()
سيؤدي تنفيذ مصادقة البريد الإلكتروني إلى إضافة طبقة إضافية من الأمان إلى رسائل البريد الإلكتروني الخاصة بك وحمايتها من المهاجمين أو من تصنيفها كرسائل بريد عشوائي.
تشفير رسائل البريد الإلكتروني باستخدام بايثون
يُمكّنك تشفير رسائل البريد الإلكتروني من حماية محتواها، بحيث لا يتمكن من الوصول إليها أو الاطلاع عليها إلا المُرسِلون والمُستقبِلون المُصرَّح لهم. يتم تشفير رسائل البريد الإلكتروني باستخدام بايثون باستخدام تقنيات التشفير لتشفير رسالة البريد الإلكتروني وتحويلها إلى صيغة آمنة وغير قابلة للقراءة (تُعرف أيضًا باسم النص المُشفَّر).
بهذه الطريقة، يعمل تشفير البريد الإلكتروني على تأمين الرسالة من الوصول غير المصرح به أو المهاجمين حتى لو اعترضوا البريد الإلكتروني.
فيما يلي أنواع مختلفة من تشفير البريد الإلكتروني:
- SSL: اختصار لـ Secure Sockets Layer، وهو أحد بروتوكولات التشفير الأكثر شيوعًا واستخدامًا. يضمن SSL سرية البريد الإلكتروني من خلال تشفير البيانات المرسلة بين خادم البريد والعميل.
- TLS: اختصار لـ Transport Layer Security (أمان طبقة النقل)، وهو بروتوكول تشفير شائع الاستخدام للبريد الإلكتروني اليوم. يعتبره الكثيرون بديلاً ممتازًا لـ SSL. فهو يُشفّر الاتصال بين عميل البريد الإلكتروني وخادم البريد لمنع أي شخص من اعتراض البريد الإلكتروني أثناء إرساله.
- E2EE: هذا يرمز إلى التشفير من طرف إلى طرف، مما يضمن أن يكون المستلم المقصود فقط، الذي يملك بيانات اعتماد صالحة، قادرًا على فك تشفير محتوى البريد الإلكتروني وقراءته. ويهدف هذا إلى منع اعتراض البريد الإلكتروني وتأمين الرسالة.
كيفية تنفيذ تشفير البريد الإلكتروني في بايثون
إذا كان خادم البريد الخاص بك يتطلب تشفير SSL، فإليك كيفية إرسال بريد إلكتروني في بايثون:
import smtplib
import ssl
context = ssl.create_default_context()
server = smtplib.SMTP_SSL('smtp.domain1.com', 465, context=context) # This is for SSL connections, requiring port number 465
server.login('my_email@domain1.com', 'my_password')
message = "Subject: SSL Encrypted Email."
server.sendmail('my_email@domain1.com', 'receiver@domain2.com', message)
server.quit()
بالنسبة لاتصالات TLS، ستحتاج إلى مكتبة smtplib:
import smtplib
server = smtplib.SMTP('smtp.domain1.com', 587) # TLS requires 587 port number
server.starttls() # Start TLS encryption
server.login('my_email@domain1.com', 'my_password')
message = "Subject: TLS Encrypted Email."
server.sendmail('my_email@domain1.com', 'receiver@domain2.com', message)
server.quit()
بالنسبة للتشفير الشامل، ستحتاج إلى مكتبات أو أدوات أكثر تقدمًا مثل GnuPG، وOpenSSL، وSignal Protocol، والمزيد.
الجمع بين المصادقة والتشفير
يتطلب أمان البريد الإلكتروني باستخدام بايثون التشفير والمصادقة. هذا يضمن أن خوادم البريد الإلكتروني تتأكد من شرعية البريد الإلكتروني، ويحافظ على سلامته من هجمات الإنترنت والوصول غير المصرح به أثناء الإرسال. لتشفير البريد الإلكتروني، يمكنك استخدام SSL أو TLS ودمجهما مع مصادقة SMTP لإنشاء اتصال بريد إلكتروني قوي.
الآن بعد أن تعرفت على كيفية تمكين تشفير البريد الإلكتروني والمصادقة في رسائل البريد الإلكتروني الخاصة بك، دعنا نفحص بعض أمثلة التعليمات البرمجية الكاملة لفهم كيفية إرسال رسائل بريد إلكتروني آمنة في بايثون باستخدام Gmail SMTP وتشفير البريد الإلكتروني (SSL).
إرسال بريد إلكتروني بنص عادي
import smtplib
from email.mime.text import MIMEText
subject = "Plain Text Email"
body = "This is a plain text email using Gmail SMTP and SSL."
sender = "sender1@gmail.com"
receivers = ["receiver1@gmail.com", "receiver2@gmail.com"]
password = "my_password"
def send_email(subject, body, sender, receivers, password):
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = ', '.join(receivers)
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
smtp_server.login(sender, password)
smtp_server.sendmail(sender, receivers, msg.as_string())
print("The plain text email is sent successfully!")
send_email(subject, body, sender, receivers, password)
- sender: يحتوي هذا على عنوان المُرسِل.
- receivers: يحتوي هذا على عناوين البريد الإلكتروني للمُستقبِل 1 والمُستقبِل 2.
- msg: محتوى الرسالة.
sendmail()
: دالة مثيل كائن SMTP. تأخذ ثلاثة مُعاملات – المُرسِل، والمُستقبِل، والرسالة، وتُرسل الرسالة.- with: مُدير سياق يُستخدم لإغلاق اتصال SMTP بشكل صحيح بعد إرسال بريد إلكتروني.
- MIMEText: يحتوي هذا على نص عادي فقط.
إرسال بريد إلكتروني مع المرفقات
لإرسال بريد إلكتروني مع مرفقات باستخدام بايثون بأمان، ستحتاج إلى مكتبات إضافية مثل MIMEBase وبرامج الترميز. إليك الكود المستخدم في هذه الحالة:
import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
sender = "sender1@gmail.com"
password = "my_password"
receiver = "receiver1@gmail.com"
subject = "Email with Attachments"
body = "This is an email with attachments created in Python using Gmail SMTP and SSL."
with open("attachment.txt", "rb") as attachment:
part = MIMEBase("application", "octet-stream") # Adding the attachment to the email
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
"Content-Disposition", # The header indicates that the file name is an attachment.
f"attachment; filename='attachment.txt'",
)
message = MIMEMultipart()
message['Subject'] = subject
message['From'] = sender
message['To'] = receiver
html_part = MIMEText(body)
message.attach(html_part) # To attach the file
message.attach(part)
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
server.login(sender, password)
server.sendmail(sender, receiver, message.as_string())
- MIMEMultipart: تسمح لك هذه المكتبة بإضافة نص ومرفقات إلى البريد الإلكتروني بشكل منفصل.
- ‘rb’: يمثل الوضع الثنائي للمرفق الذي سيتم فتحه والمحتوى الذي سيتم قراءته.
- MIMEBase: هذا الكائن قابل للتطبيق على أي نوع ملف.
- التشفير وBase64: سيتم تشفير الملف باستخدام Base64 لإرسال بريد إلكتروني آمن.
إرسال بريد إلكتروني HTML في بايثون
لإرسال بريد إلكتروني HTML في بايثون باستخدام Gmail SMTP، تحتاج إلى فئة – MIMEText.
import smtplib
from email.mime.text import MIMEText
sender = "sender1@gmail.com"
password = "my_password"
receiver = "receiver1@gmail.com"
subject = "HTML Email in Python"
body = """
<html>
<body>
<p>HTML email created in Python with SSL and Gmail SMTP.</p>
</body>
</html>
"""
message = MIMEText(body, 'html') # To attach the HTML content to the email
message['Subject'] = subject
message['From'] = sender
message['To'] = receiver
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
server.login(sender, password)
server.sendmail(sender, receiver, message.as_string())
اختبار بريدك الإلكتروني باستخدام المصادقة والتشفير
من المهم اختبار رسائل البريد الإلكتروني قبل إرسالها إلى المستلمين. فهذا يُمكّنك من اكتشاف أي مشاكل أو أخطاء في إرسال الرسائل أو التنسيق أو المحتوى، وما إلى ذلك.
لذا، اختبر رسائلك الإلكترونية دائمًا على خادم مؤقت قبل إرسالها إلى المستلمين المستهدفين، خاصةً عند إرسالها بكميات كبيرة. يوفر اختبار رسائل البريد الإلكتروني المزايا التالية:
- يضمن عمل وظيفة إرسال البريد الإلكتروني بشكل صحيح.
- يحتوي البريد الإلكتروني على تنسيق سليم، ولا يحتوي على روابط أو مرفقات معطلة.
- يمنع إغراق صندوق الوارد الخاص بالمستلم بعدد كبير من رسائل البريد الإلكتروني التجريبية.
- يعزز قابلية تسليم البريد الإلكتروني، ويقلل من معدلات البريد العشوائي.
- يضمن حماية البريد الإلكتروني ومحتوياته من الهجمات والوصول غير المصرح به.
لاختبار هذا الإعداد المُدمج لإرسال رسائل البريد الإلكتروني باستخدام بايثون مع تفعيل المصادقة والتشفير، استخدم خادم اختبار بريد إلكتروني مثل Mailtrap Email Testing. سيلتقط هذا الخادم جميع بيانات SMTP من بيئة الإعداد، ويكتشف رسائلك ويصحح أخطائها قبل إرسالها. كما سيحلل محتوى البريد الإلكتروني، ويتحقق من صحة CSS/HTML، ويُقدم تقييمًا للبريد العشوائي لتحسين تجربة إرسال البريد الإلكتروني.
للبدء:
- افتح اختبار البريد الإلكتروني Mailtrap
- انتقل إلى “صندوق الوارد”
- انقر على “إظهار بيانات الاعتماد” للحصول على بيانات اعتماد الاختبار – تفاصيل تسجيل الدخول وكلمة المرور
import smtplib
from socket import gaierror
port = 2525 # Define the SMTP server separately
smtp_server = "sandbox.smtp.mailtrap.io"
login = "xyz123" # Paste your Mailtrap login details
password = "abc$$" # Paste your Mailtrap password
sender = "test_sender@test.com"
receiver = "test_receiver@example.com"
message = f"""\
Subject: Hello There!
To: {receiver}
From: {sender}
This is a test email."""
try:
with smtplib.SMTP(smtp_server, port) as server: # Use Mailtrap-generated credentials for port, server name, login, and password
server.login(login, password)
server.sendmail(sender, receiver, message)
print('Sent')
except (gaierror, ConnectionRefusedError): # In case of errors
print('Unable to connect to the server.')
except smtplib.SMTPServerDisconnected:
print('Server connection failed!')
except smtplib.SMTPException as e:
print('SMTP error: ' + str(e))
إذا لم يكن هناك خطأ، فيجب أن ترى هذه الرسالة في صندوق الوارد الخاص بالمستلم:
This is a test email.
أفضل الممارسات لإرسال البريد الإلكتروني بشكل آمن
ضع في اعتبارك أفضل ممارسات البريد الإلكتروني باستخدام بايثون أدناه لإرسال بريد إلكتروني آمن:
- حماية البيانات: اتخذ التدابير الأمنية المناسبة لحماية بياناتك الحساسة مثل بيانات اعتماد SMTP ومفاتيح API وما إلى ذلك. قم بتخزينها في مكان آمن وخاص مثل ملفات التكوين أو متغيرات البيئة، مع التأكد من عدم تمكن أي شخص من الوصول إليها بشكل عام.
- التشفير والمصادقة: استخدم دائمًا تشفير البريد الإلكتروني والمصادقة عليه حتى يتمكن الأفراد المصرح لهم فقط من الوصول إلى رسائل البريد الإلكتروني الخاصة بك ومحتواها.
للمصادقة، يمكنك استخدام طرق متقدمة مثل مفاتيح API، والمصادقة الثنائية، وتسجيل الدخول الفردي (SSO)، وما إلى ذلك. وبالمثل، استخدم تقنيات التشفير المتقدمة مثل SSL وTLS وE2EE، وما إلى ذلك.
- معالجة الأخطاء: إدارة مشكلات الشبكة وأخطاء المصادقة والمشكلات الأخرى عن طريق معالجة الأخطاء بشكل فعال باستخدام كتل except/try في الكود الخاص بك.
- الحد من المعدل: حافظ على معدل تسليم مرتفع للبريد الإلكتروني من خلال الحد من معدل وظيفة إرسال البريد الإلكتروني لمنع تجاوز حدود الخدمة لديك.
- التحقق من صحة رسائل البريد الإلكتروني: تحقق من صحة عناوين البريد الإلكتروني من قائمتك، واحذف العناوين غير الصالحة لتحسين إمكانية وصول رسائلك الإلكترونية ومنع تصنيف نطاقك كبريد عشوائي. يمكنك استخدام أداة التحقق من صحة البريد الإلكتروني للقيام بذلك.
- أبقِ فريقك على اطلاع دائم بممارسات البريد الإلكتروني الآمن ومخاطر الأمن السيبراني. راقب معدل البريد العشوائي ومعدلات تسليم البريد الإلكتروني، واعمل على تحسينها.
إرسال بريد إلكتروني آمن باستخدام بايثون باستخدام طرق تشفير البريد الإلكتروني المتقدمة مثل SSL وTLS والتشفير من البداية إلى النهاية، بالإضافة إلى بروتوكولات وتقنيات المصادقة مثل SPF وDMARC و2FA ومفاتيح API.
من خلال الجمع بين هذه التدابير الأمنية، يمكنك حماية معلومات بريدك الإلكتروني السرية، وتحسين إمكانية وصول رسائلك، والحفاظ على ثقة متلقيها. بهذه الطريقة، لا يمكن الوصول إليها إلا من يمتلكون بيانات اعتماد مناسبة. سيساعد هذا في منع الوصول غير المصرح به، واختراقات البيانات، وغيرها من هجمات الأمن السيبراني.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.