Tôi đang phát bằng Python imaplib (Python 2.6) để tìm nạp email từ Gmail. Mọi thứ tôi tìm nạp một email với phương thức http://docs.python.org/library/imaplib.html#imaplib.IMAP4.fetch Tôi nhận được toàn bộ email. Tôi chỉ cần phần văn bản và cũng phân tích các tên tệp đính kèm mà không cần tải chúng xuống. Làm thế nào điều này có thể được thực hiện? Tôi thấy rằng các email được GMail trả lại tuân theo cùng định dạng mà trình duyệt gửi tới máy chủ HTTP.Cách phân tích cú pháp email hiệu quả mà không cần chạm vào tệp đính kèm bằng cách sử dụng Python
Trả lời
Tôi e rằng bạn không may mắn. Theo this post, chỉ có hai phần của email - tiêu đề và nội dung. Cơ thể là nơi các tập tin đính kèm là nếu có bất kỳ và bạn phải tải về toàn bộ cơ thể trước khi giải nén chỉ văn bản tin nhắn. Thông tin về lệnh FETCH được tìm thấy here cũng hỗ trợ ý kiến này. Trong khi nó nói rằng bạn có thể trích xuất partials của cơ thể, chúng được quy định trong điều khoản của octets mà không thực sự giúp đỡ.
Hãy nhìn vào công thức này: http://code.activestate.com/recipes/498189/
tôi thích nó một chút để in Từ, Chủ đề, ngày, tên của file đính kèm, và nội dung thư (chỉ rõ cho bây giờ - tầm thường để thêm thông điệp html của nó) .
Tôi đã sử dụng máy chủ Gmail pop3 trong trường hợp này, nhưng cũng sẽ hoạt động với IMAP.
import poplib, email, string
mailserver = poplib.POP3_SSL('pop.gmail.com')
mailserver.user('recent:YOURUSERNAME') #use 'recent mode'
mailserver.pass_('YOURPASSWORD') #consider not storing in plaintext!
numMessages = len(mailserver.list()[1])
for i in reversed(range(numMessages)):
message = ""
msg = mailserver.retr(i+1)
str = string.join(msg[1], "\n")
mail = email.message_from_string(str)
message += "From: " + mail["From"] + "\n"
message += "Subject: " + mail["Subject"] + "\n"
message += "Date: " + mail["Date"] + "\n"
for part in mail.walk():
if part.is_multipart():
continue
if part.get_content_type() == 'text/plain':
body = "\n" + part.get_payload() + "\n"
dtypes = part.get_params(None, 'Content-Disposition')
if not dtypes:
if part.get_content_type() == 'text/plain':
continue
ctypes = part.get_params()
if not ctypes:
continue
for key,val in ctypes:
if key.lower() == 'name':
message += "Attachment:" + val + "\n"
break
else:
continue
else:
attachment,filename = None,None
for key,val in dtypes:
key = key.lower()
if key == 'filename':
filename = val
if key == 'attachment':
attachment = 1
if not attachment:
continue
message += "Attachment:" + filename + "\n"
if body:
message += body + "\n"
print message
print
Điều này sẽ đủ để bạn đi đúng hướng.
Bạn có thể nhận được chỉ là văn bản đơn giản của email bằng cách làm một cái gì đó như:
connection.fetch(id, '(BODY[1])')
Đối với các thông điệp gmail Tôi đã nhìn thấy, phần 1 có chữ thô, bao gồm rác nhiều phần dữ liệu. Điều này có thể không quá mạnh mẽ.
Tôi không biết cách lấy tên của tệp đính kèm mà không có tất cả. Tôi đã không thử sử dụng partials.
- 1. Cách đính kèm nhiều tệp vào một email bằng JavaMail?
- 2. Android: có thể đính kèm tệp vào email mà không cần ghi vào SD không?
- 3. Phân tích cú pháp các tệp mbox bằng Python
- 4. Cách hiệu quả nhất để phân tích cú pháp Xml
- 5. Có một trình phân tích cú pháp/cách nào có sẵn để phân tích cú pháp các tệp kết xuất Wikipedia bằng cách sử dụng Python không?
- 6. đính kèm nhiều tệp vào một chương trình email mà không cần ghi vào đĩa
- 7. tập tin đính kèm email phân tích qua mime4j
- 8. đính kèm tệp văn bản vào email
- 9. Phân tích cú pháp html bằng cách sử dụng C
- 10. "Lỗi khi phân tích cú pháp tệp XML" khi phân tích cú pháp bằng cách sử dụng XInclude
- 11. Phân tích cú pháp XML bằng Python
- 12. Cách đính kèm tệp vào thông báo email trong Teamcity
- 13. Phân tích cú pháp mà không cần tách chuỗi
- 14. Gửi email có tệp đính kèm tệp PDF bằng cách sử dụng PHP
- 15. Làm cách nào để phân tích cú pháp tệp CSV trong Perl hiệu quả?
- 16. Phân tích cú pháp XML bằng cách sử dụng XDocument
- 17. Làm cách nào để thêm tệp đính kèm vào email bằng System.Net.Mail?
- 18. Cách gửi email có tệp đính kèm bằng cách sử dụng GmailSender trong android
- 19. Cách phân tích cú pháp hiệu quả các tệp văn bản lớn trong Ruby
- 20. Cách phân tích cú pháp tệp html bằng clojure?
- 21. Haskell Cách hiệu quả hơn để phân tích cú pháp tệp của các dòng chữ số
- 22. cách phân tích dữ liệu xml bằng cách sử dụng phân tích cú pháp libxml
- 23. Làm cách nào để phân tích cú pháp tệp văn bản bằng cách sử dụng javascript
- 24. Cần trợ giúp cú pháp python lxml để phân tích cú pháp html
- 25. Phân tích tệp (ics/icalendar) bằng cách sử dụng Python
- 26. Cách phân tích cú pháp hiệu quả các tài liệu XML được nối từ một tệp
- 27. Gửi email có tệp đính kèm bằng cách sử dụng javamail API
- 28. python không thể gửi tệp đính kèm qua email
- 29. Kết hợp phân tích cú pháp phân tích cú pháp, phân tích cú pháp và phân tích cú pháp rừng
- 30. Làm cách nào để phân tích cú pháp tệp JSON bằng cách sử dụng JSON.net
+1 cảm ơn về con trỏ. Tôi sẽ nghiên cứu thêm về điều đó. – Viet