بيثون: كيفية تخزين مشروع البريد الإلكتروني مع مستلمي BCC إلى Exchange Server عبر IMAP؟

StackOverflow https://stackoverflow.com/questions/771907

سؤال

أحاول تخزين مشروع بريد إلكتروني عبر IMAP إلى مجلد يعمل على MS Exchange. كل شيء على ما يرام، إلا أن المستلمين BCC لا يظهرون في مشروع الرسالة المخزنة على الخادم. لا تتلقى المستلمون BCC أيضا البريد الإلكتروني إذا أرسلتها باستخدام MS Outlook. إذا قرأت الرسالة مرة أخرى مع بيثون بعد تخزينها على الخادم، يمكنني أن أرى BCC في المسودة.

رمز Python التالي يستنسخ هذا السلوك:

import imaplib 
import time 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEText import MIMEText 

message = MIMEMultipart() 
message['Subject'] = 'Test Draft' 
message['From'] = 'test@test.net' 
message['to'] = 'test@test.com' 
message['cc'] = 'testcc@test.com' 
message['bcc'] = 'testbcc@test.com' 
message.attach(MIMEText('This is a test.\n')) 

server= imaplib.IMAP4('the.ser.ver.ip') 
server.login('test', 'test') 
server.append("Drafts" 
              ,'\Draft' 
              ,imaplib.Time2Internaldate(time.time()) 
              ,str(message)) 
server.logout() 

إذا قمت بتشغيل هذا الرمز، يتم تخزين المسودة في Draft مجلد على خادم Exchange. ولكن إذا نظرت إلى المسودة باستخدام MS Outlook، فإنه لا يشمل bcc متلقي (message['bcc'] = 'testbcc@test.com'). Message, to, from, cc حسنا، لا يوجد خطأ.

إذا قمت بتنزيل المسودات التي تتضمن بالفعل BCC من مجلد Exchange، يمكنني أيضا رؤية BCC. التحميل فقط لا يعمل بالنسبة لي.

أي مساعدة في تقدير كبير. شكرا. راجع للشغل، MAPI ليس خيارا.

تحديث: شكرا. X-Receiver لم تنجح بالنسبة لي. أما بالنسبة للتشغيل مع مجلد IMAP في Outlook، فقد حصلت على نتيجة مثيرة للاهتمام. إذا قمت بالوصول إلى المسودة عبر مجلد IMAP في Outlook، أرى BCC. ولكن إذا وافقت عليه عبر مجلد MAPI، فأنا لا أرى ذلك. سوف تلعب قليلا مع ذلك.

خاتمة: شكرا على الادخال. في الواقع، الكود يعمل بشكل جيد فقط. انظر أدناه للإجابة التي وجدتها.

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

المحلول

في الواقع، الكود يعمل بشكل جيد فقط. يقوم بإنشاء البريد المناسب مع جميع الرؤوس الصحيحة بما في ذلك BCC.

كيف يعرض عميل البريد BCC؟

ال بريد البريد (مثل Python أو MS Outlook عبر IMAP أو MAPI في حالتي) يقرر ما إذا كان وكيفية عرض رؤوس BCC. Outlook على سبيل المثال لا يعرض رؤوس BCC من مجلد IMAP. هذه ميزة لإخفاء مستلمي BCC من بعضهم البعض حيث لم يتم تجريدهم بعيدا عن البريد قبل (ليس من الواضح من المعيار ما إذا كان مستلم BCC واحد يسمح بمشاهدة جميع المستلمين BCC الآخر أم لا، انظر ويكيبيديا).

من يتعامل مع BCC عند إرسال بريد إلكتروني؟

افترض الآن أننا صاغنا رسالة في عميل بريد وتخزينه في مجلد IMAP أو MAPI. الخادم الذي يوفر مجلدات IMAP / MAPI يترك مشروع الرسالة دون تغيير. ما يحدث لرؤوس BCC عند إرسال البريد يعتمد على التنفيذ، وقد يعتمد على كل من عميل البريد و وكيل نقل البريد (على سبيل المثال MS Exchange Server في حالتي). باختصار، لا يوافق الناس على ما إذا كان عميل البريد أو عميل نقل البريد محددا لإزالة رؤوس BCC. ومع ذلك، يبدو أن هناك حالة أن غالبية المطورين يرون أن أعمال عميل البريد مع وكيل نقل البريد لا يلمس البريد (مثل MS Exchange، MS SMTP، Exim، Openwave). في هذه الحالة، يرسل وكيل نقل البريد الإلكتروني إلى المستلم كما هو محدد في RCPT TO: التابع SMTP. التواصل، ويترك البريد الإلكتروني دون تغيير. بعض وكلاء نقل البريد الآخرين قطاع BCC من رسائل البريد الإلكتروني ومع ذلك (مثل Sendmail، Lotus Notes). يمكن العثور على مناقشة شاملة للغاية على بدء تشغيل القائمة البريدية Exim هنا.

في حالة التوقعات MS Outlook و MS Exchange، لا يرسل MS Outlook أبدا BCC (ولكن يرسل رسائل بريد إلكتروني فردية لكل مستلم BCC) ولا تلمس MS Exchange رؤوس البريد الإلكتروني، ولكن يرسل البريد الإلكتروني الكامل (ربما بما في ذلك متلقي BCC) للمستلمين المحدد في RCPT TO:.

خاتمة

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

نصائح أخرى

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

أفهم أنك لا ترسل البريد الإلكتروني، فقط تخزينه. لكن تخميني هو أن القواعد الداخلية للتبادل تبدأ عندما تكون الرسالة IMAP.APPEND إلى المجلد، مما يؤدي إلى تجريد حقل BCC بعيدا.

من الواضح، عندما يتم حفظ الرسائل إلى مجلد باستخدام Outlook الحقل BCC ليس تجريد بعيدا. لكنني أعتقد أن Outlook يتواصل مع Exchange باستخدام بعض Searyizm الداخلية (MAPI؟).

كل ما سبق هو مجرد تخمين.

شيء ممتع يمكن أن تجرب:

  • في ملف تعريف Outlook / MAPI فارغ، قم بإنشاء حساب IMAP. قم بإعداده لتخزين المسودات وأرسل العناصر الموجودة على خادم Exchange.
  • معرفة ما إذا كان Outlook باستخدام IMAP يمكن أن يوفر BCC من المسودات بشكل صحيح.

حاولت أعلاه باستخدام عميل البريد الإلكتروني Evolution متصل بتبادل IMAP. باستخدام Outlook (متصل بالطريقة العادية)، ألقي نظرة على المسودات وأرسلت العناصر. كان حقل BCC مفقود في كلا المكانين.

أعتقد أن هذا يدعم نظرائي.

حاول ضبط هذا الإصدار البديل من رأس BCC:

X-Receiver: someguy@gmail.com

سوف تبادل على وجه الخصوص علاج هذا مثل bcc عند إرسالها. لكنني أراهن أنه لن يؤدي ذلك عند الكتابة عبر IMAP. يمكنك تضمين أكثر من مستلم BCC من خلال تكرار هذا الخط.

هذا اختراق كامل، من الواضح.

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