IMAP:كيفية نقل رسالة من مجلد واحد إلى آخر
-
02-07-2019 - |
سؤال
(باستخدام IMAP الأوامر ، وليس مع المساعدة من أي بريد آخر حزمة)
المحلول
لست متأكدا كيف دراية جيدة أنت في imap الكلام, لكن في الأساس بعد تسجيل الدخول, "حدد" علبة البريد المصدر, "نسخ" الرسائل, و "محو" الرسائل (أو "حذف" القديمة علبة البريد إذا كان فارغا الآن :-).
a login a s
b select source
c copy 1 othermbox
d store 1 +flags (\Deleted)
e expunge
من شأنه أن يكون مثالا الرسائل لإرسال.(ملاحظة:imap الرسائل تتطلب متالقه بادئة قبل كل أمر ، وهكذا "أ ب ج" في الجبهة)
انظر RFC 2060 للحصول على التفاصيل.
نصائح أخرى
هناك العديد من الطرق للقيام بذلك.أفضل واحد هو UID MOVE
الأوامر المحددة في RFC 6851 من أوائل عام 2013:
C: a UID MOVE 42:69 foo
S: * OK [COPYUID 432432 42:69 1202:1229]
S: * 22 EXPUNGE
S: (more expunges)
S: a OK Done
وجود هذا التمديد هو مبين من قبل MOVE
القدرة.
إذا لم يكن متوفرا ، ولكن UIDPLUS
(RFC 4315) هو ثاني أفضل خيار هو استخدام مزيج من UID STORE
, UID COPY
و UID EXPUNGE
:
C: a01 UID COPY 42:69 foo
S: a01 OK [COPYUID 432432 42:69 1202:1229] Copied
C: a02 UID STORE 42:69 +FLAGS.SILENT (\Deleted)
S: a02 OK Stored
C: a03 UID EXPUNGE 42:69
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: a03 Expunged
إذا كان UIDPLUS
مفقود, لا يوجد شيء معقول أنك يمكن أن نفعل ... EXPUNGE
القيادة بشكل دائم يزيل جميع الرسائل التي تم وضع علامة عليها للحذف ، بما في ذلك تلك التي لم تلمسها.أفضل هذا هو مجرد استخدام UID COPY
و UID STORE
في تلك الحالة.
إذا كان لديك uid البريد الإلكتروني والتي سوف يتم نقل.
import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('username', 'password')
obj.select(src_folder_name)
apply_lbl_msg = obj.uid('COPY', msg_uid, desti_folder_name)
if apply_lbl_msg[0] == 'OK':
mov, data = obj.uid('STORE', msg_uid , '+FLAGS', '(\Deleted)')
obj.expunge()
حيث msg_uid هو uid البريد.
أعتقد أنك نسخ الرسالة إلى مجلد جديد ثم قم بحذف (محو) في القديم.
تلميح لا يوجد حذف الأمر أن يفعل ما يجب أن العلم الرسالة كما حذف ثم إزالة علبة البريد.إلقاء نظرة على RFC.كن حذرا مع حذف كما حذف كل علب البريد غير واحد من الرسائل.