Tôi đang sử dụng pyhtons imaplib để kết nối với tài khoản gmail của mình. Tôi muốn lấy 15 tin nhắn hàng đầu (chưa đọc hoặc đọc, không quan trọng) và chỉ hiển thị chủ đề và tên người gửi (hoặc địa chỉ) nhưng không biết cách hiển thị nội dung của hộp thư đến.python imaplib để lấy tiêu đề đối tượng trong hộp thư đến gmail và tên người gửi
Đây là mã của tôi cho đến nay (kết nối thành công)
import imaplib
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('[email protected]', 'somecrazypassword')
mail.list()
mail.select('inbox')
#need to add some stuff in here
mail.logout()
Tôi tin rằng điều này là đủ đơn giản, tôi chỉ là không đủ quen thuộc với các lệnh cho các thư viện imaplib. Bất kỳ trợ giúp sẽ được đánh giá cao phải ...
CẬP NHẬT nhờ Julian tôi có thể lặp qua từng tin nhắn và lấy lại toàn bộ nội dung với:
typ, data = mail.search(None, 'ALL')
for num in data[0].split():
typ, data = mail.fetch(num, '(RFC822)')
print 'Message %s\n%s\n' % (num, data[0][1])
mail.close()
nhưng tôi muốn chỉ là chủ thể và người gửi. Có lệnh imaplib cho các mục này hay tôi sẽ phải phân tích toàn bộ nội dung của dữ liệu [0] [1] cho văn bản: Chủ đề và Người gửi?
CẬP NHẬT OK, để chủ thể và phần người gửi hoạt động nhưng việc lặp lại (1, 15) được thực hiện theo thứ tự hiển thị rõ ràng cho tôi thấy thư cũ nhất trước. Làm thế nào tôi có thể thay đổi điều này? Tôi đã cố gắng làm điều này:
for i in range(len(data[0])-15, len(data[0])):
print data
nhưng điều đó chỉ mang lại cho tôi None
cho tất cả 15 lần lặp ... bất kỳ ý tưởng? Tôi cũng đã cố gắng mail.sort('REVERSE DATE', 'UTF-8', 'ALL')
nhưng gmail doesnt hỗ trợ .sort() chức năng
CẬP NHẬT đặn ra một cách để làm điều đó:
#....^other code is the same as above except need to import email module
mail.select('inbox')
typ, data = mail.search(None, 'ALL')
ids = data[0]
id_list = ids.split()
#get the most recent email id
latest_email_id = int(id_list[-1])
#iterate through 15 messages in decending order starting with latest_email_id
#the '-1' dictates reverse looping order
for i in range(latest_email_id, latest_email_id-15, -1):
typ, data = mail.fetch(i, '(RFC822)')
for response_part in data:
if isinstance(response_part, tuple):
msg = email.message_from_string(response_part[1])
varSubject = msg['subject']
varFrom = msg['from']
#remove the brackets around the sender email address
varFrom = varFrom.replace('<', '')
varFrom = varFrom.replace('>', '')
#add ellipsis (...) if subject length is greater than 35 characters
if len(varSubject) > 35:
varSubject = varSubject[0:32] + '...'
print '[' + varFrom.split()[-1] + '] ' + varSubject
này mang lại cho tôi là chủ đề 15 most recent message và người gửi địa chỉ trong thứ tự quyết định theo yêu cầu! Cảm ơn tất cả những người đã giúp!
Các ví dụ từ các tài liệu Python hoạt động tốt đối với tôi: http://docs.python.org/library/ imaplib # imap4-example – Julian
Có, bạn nói đúng, điều đó hoạt động rất tốt để truy xuất toàn bộ nội dung tin nhắn của tất cả các tin nhắn. Tôi chỉ muốn chủ đề và địa chỉ người gửi mặc dù. Sau đó tôi có thể tạo vòng lặp for chỉ từ 1 đến 15 – sadmicrowave
Và một liên kết khác đến tài liệu Python: http://docs.python.org/library/email.html;) – Julian