(sử dụng các lệnh IMAP, không phải với sự hỗ trợ của bất kỳ gói mail khác)IMAP: làm thế nào để di chuyển một thông điệp từ một thư mục để
Trả lời
Tôi không chắc chắn bạn hiểu rõ thế nào, nhưng về cơ bản sau khi đăng nhập, "CHỌN" hộp thư nguồn, "COPY" thư và "EXPUNGE" các thư (hoặc "DELETE" hộp thư cũ nếu nó trống bây giờ :-).
a login a s
b select source
c copy 1 othermbox
d store 1 +flags (\Deleted)
e expunge
sẽ là ví dụ về thư cần gửi. (Lưu ý: thông báo imap yêu cầu tiền tố uniqe trước mỗi lệnh, do đó "a b c" ở phía trước)
Xem chi tiết RFC 2060.
Thay vào đó, hãy xem [RFC 3501] (http://tools.ietf.org/html/rfc3501). – dkarp
Lưu ý rằng 'expunge' sẽ xóa các tin nhắn _all_ bị gắn cờ' \ Deleted', có thể không phải là những gì bạn muốn. –
Tôi đoán bạn COPY thông điệp vào thư mục mới và sau đó xóa (Xoá) nó trong cái cũ.
GỢI Ý Không có lệnh DELETE mà những gì bạn có nghĩa là, bạn phải cờ được thông báo là bị xóa và sau đó xóa bỏ các hộp thư. Hãy xem RFC. Hãy cẩn thận với DELETE, vì nó xóa toàn bộ các hộp thư, không phải thư duy nhất.
Nếu bạn có uid của email sẽ được di chuyển.
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()
đâu msg_uid là uid của thư.
-1: "sử dụng lệnh IMAP, không phải với sự hỗ trợ của bất kỳ gói thư nào khác" – dkarp
+1 Đây là liên kết tốt nhất mà tôi đã tìm thấy khi sử dụng python cho tác vụ này. –
Có nhiều cách để thực hiện điều đó. Tốt nhất là lệnh UID MOVE
quy định tại RFC 6851 từ đầu năm 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
Sự hiện diện của phần mở rộng này được chỉ định bởi khả năng MOVE
.
Nếu nó không phải là có sẵn, nhưng UIDPLUS
(RFC 4315) là lựa chọn tốt nhất thứ hai là sử dụng sự kết hợp của UID STORE
, UID COPY
và 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
Nếu UIDPLUS
là mất tích, không có gì là hợp lý mà bạn có thể làm - lệnh EXPUNGE
xóa vĩnh viễn tất cả các thư được đánh dấu để xóa, bao gồm cả những thư bạn chưa chạm vào. Điều tốt nhất là chỉ sử dụng UID COPY
và UID STORE
trong trường hợp đó.
Máy chủ của tôi không hỗ trợ cho 'UID MOVE':/ –
Cơ hội tốt thứ hai của bạn là đúng trong danh sách mã thứ hai, sau đó. –
- 1. Lệnh Linux để di chuyển một thư mục
- 2. Làm cách nào để di chuyển một nhóm bộ điều khiển vào một thư mục?
- 3. Làm cách nào để di chuyển một mục trên NSMutableArray?
- 4. Mục tiêu Ant để di chuyển các thư mục ra khỏi một thư mục khác
- 5. Làm cách nào để di chuyển tệp dự án Xcode 4.2 sang một thư mục khác?
- 6. Làm thế nào để chụp một thông điệp cam kết git và chạy một hành động
- 7. Làm thế nào để di chuyển thư mục svn lên mức trên
- 8. Làm thế nào để commit một thư mục vào gitHub
- 9. Làm thế nào để cung cấp một thông điệp cam kết git chuẩn bị?
- 10. Làm thế nào để di chuyển tất cả các tệp của một thư mục vào nhiều thư mục với một số lượng tệp nhất định?
- 11. Làm thế nào để sửa đổi thông điệp XML thô của một yêu cầu CXF đi?
- 12. Làm thế nào để thông báo cho Google một trang đã di chuyển?
- 13. Làm thế nào để dừng Rails 3.1 di chuyển từ chạy trong một giao dịch?
- 14. Làm thế nào để lấy hơn 25 thông điệp bài
- 15. Làm thế nào để sao chép chỉ một thư mục từ một git submodule?
- 16. Làm thế nào để quét một thư mục trong Java?
- 17. Làm thế nào để tạo một thư mục iOS?
- 18. Làm thế nào để bạn di chuyển một tệp trong SVN?
- 19. Làm cách nào để sắp xếp một thông báo thư?
- 20. Di chuyển lên một thư mục trong Python
- 21. Làm thế nào để in một thông điệp trong việc xử lý với thử lỗi, bắt
- 22. Làm thế nào để bật một hộp thông điệp cảnh báo bằng cách sử dụng PHP?
- 23. Làm thế nào để thay đổi một thông điệp git commit + push trong RubyMine?
- 24. Làm thế nào để lưu trữ thư sử dụng ruby 'net/imap`
- 25. Làm thế nào để xuất thông điệp ra cửa sổ đầu ra VS, từ msbuild?
- 26. Làm thế nào để di chuyển QSplitter?
- 27. Tệp hàng loạt để di chuyển tệp vào một thư mục khác
- 28. Gmail IMAP: Bất kỳ cách nào để tìm tất cả Nhãn (thư mục), một thư cụ thể có trong?
- 29. Làm thế nào để di chuyển địa phương git repo từ một hdd khác hdd?
- 30. Làm thế nào để di chuyển tất cả các cam kết từ một chi nhánh khác?
Mặc dù không có lệnh "di chuyển" IMAP trong thông số hiện tại, có đề xuất cho tiện ích mở rộng: http://tools.ietf.org/html/draft-gulbrandsen-imap-move-01 (Arnt Gulbrandsen, Tháng 3 năm 2012). Đáng buồn thay, liên kết có thể sẽ chết vào thời điểm bạn muốn nhấp vào liên kết, do chính sách hết hạn dự thảo tích cực của IETF. – tripleee
RFC6851 MOVE Extension: http://tools.ietf.org/html/rfc6851. Tất nhiên nếu máy chủ của bạn không hỗ trợ COPY, 'STORE \ DELETED flag' và EXPUNGE là tùy chọn duy nhất (như trong câu trả lời dưới đây) –
@triplee: links.ietf.org links không hết hạn. Bản nháp hết hạn, nhưng tools.ietf.org tiếp tục đưa ra câu trả lời hợp lý. – arnt