سؤال

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

بعض عمليات البحث Google لم تفعلا نتائج واعدة للغاية. على الرغم من أنني وجدت هذا: تلقي وإرسال رسائل البريد الإلكتروني في بيثون

هل سأضطر إلى لفة خاصة بي؟ إذا كان الأمر كذلك، سأقوم بنشر هذا التطبيق بشكل أسرع مما يمكنك أن تقوله ... كل ما تقوله.

شكرا، جيم

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

هل كانت مفيدة؟

المحلول

هناك تطبيق يسمى Jutda-helpdesk. التي تستخدم بيثون poplib و imaplib لمعالجة رسائل البريد الإلكتروني الواردة. عليك فقط الحصول على حساب في مكان ما باستخدام وصول POP3 أو IMAP.

هذا هو تكييفها من get_email.py.:

def process_mail(mb):
    print "Processing: %s" % q
    if mb.email_box_type == 'pop3':
        if mb.email_box_ssl:
            if not mb.email_box_port: mb.email_box_port = 995
            server = poplib.POP3_SSL(mb.email_box_host, int(mb.email_box_port))
        else:
            if not mb.email_box_port: mb.email_box_port = 110
            server = poplib.POP3(mb.email_box_host, int(mb.email_box_port))
        server.getwelcome()
        server.user(mb.email_box_user)
        server.pass_(mb.email_box_pass)

        messagesInfo = server.list()[1]

        for msg in messagesInfo:
            msgNum = msg.split(" ")[0]
            msgSize = msg.split(" ")[1]
            full_message = "\n".join(server.retr(msgNum)[1])

            # Do something with the message

            server.dele(msgNum)
        server.quit()

    elif mb.email_box_type == 'imap':
        if mb.email_box_ssl:
            if not mb.email_box_port: mb.email_box_port = 993
            server = imaplib.IMAP4_SSL(mb.email_box_host, int(mb.email_box_port))
        else:
            if not mb.email_box_port: mb.email_box_port = 143
            server = imaplib.IMAP4(mb.email_box_host, int(mb.email_box_port))
        server.login(mb.email_box_user, mb.email_box_pass)
        server.select(mb.email_box_imap_folder)
        status, data = server.search(None, 'ALL')
        for num in data[0].split():
            status, data = server.fetch(num, '(RFC822)')
            full_message = data[0][1]

            # Do something with the message

            server.store(num, '+FLAGS', '\\Deleted')
        server.expunge()
        server.close()
        server.logout()

mb هو مجرد كائن لتخزين جميع معلومات خادم البريد، يجب أن يكون الباقي واضحا جدا.

ربما تحتاج إلى التحقق من المستندات على poplib و imaplib للحصول على أجزاء محددة من الرسالة، ولكن نأمل أن هذا يكفي لتحصل على الذهاب.

نصائح أخرى

أعرف أن هذا السؤال قديم الآن ولكن فقط اعتقدت أن أضيف للإشارة المستقبلية التي قد ترغب في إعطاءها http://cloudmailin.com. الذهاب. لدينا عدد قليل من مستخدمي django يستخدمون النظام وينبغي أن يكون أبسط قليلا من الحل المقترح.

يعد Django حقا كخادم ويب (حسنا، كإطار يناسب خادم ويب)، وليس كخادم بريد إلكتروني. أفترض أنك يمكن أن تضع بعض التعليمات البرمجية في تطبيق ويب Django الذي يبدأ خادم بريد إلكتروني، باستخدام نوع الكود الموضح في هذا السؤال الذي ترتبط به، لكنني لن أوصي به حقا؛ إنه إساءة استخدام إمكانيات برمجة الويب الديناميكية.

تتمثل الممارسة العادية في الحصول على خوادم بريد إلكتروني وفصلية، ولديك ترغب في النظر في شيء مثل postfix sendmail أو (أفضل بعد). بالنسبة إلى POP3، ستحتاج أيضا إلى شيء مثل Dovecot أو Courier، كما أعتقد. (من الممكن بالتأكيد أن يكون لدى خادم البريد الإلكتروني تطبيق الويب الخاص بك عند استلام رسائل البريد الإلكتروني حتى يتمكن من التصرف عليها، إذا كان هذا ما تريد القيام به.)

تعديل: ردا على تعليقاتك: نعم تحاول إجراء (أو على الأقل استخدام) خادم بريد إلكتروني. خادم البريد الإلكتروني هو مجرد برنامج يتلقى رسائل البريد الإلكتروني (وقد يكون قادرا على إرسالها أيضا، لكنك لا تحتاج إلى ذلك).

يمكنك بالتأكيد كتابة خادم بريد إلكتروني صغير في Python الذي يتلقى فقط رسائل البريد الإلكتروني هذه وحفظ الصور على نظام الملفات أو قاعدة بيانات أو أي شيء. (قد يستحق طرح سؤال جديد، ولكن لا تجعله جزءا من تطبيق Django Web؛ احتفظ بها كبرنامج منفصل خاص به.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top