Làm cách nào để kiểm tra số lượng thư Gmail chưa đọc trong hộp thư đến của tôi bằng tập lệnh Python ngắn? Điểm thưởng để lấy mật khẩu từ một tập tin.Kiểm tra số lượng thư Gmail chưa đọc bằng Python
Trả lời
import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com','993')
obj.login('username','password')
obj.select()
obj.search(None,'UnSeen')
Vâng, đó không phải là đoạn mã nhưng tôi tưởng tượng sử dụng imaplib và Gmail IMAP instructions giúp bạn tận dụng tối đa.
Sử dụng Gmail.py
file = open("filename","r")
usr = file.readline()
pwd = file.readline()
gmail = GmailClient()
gmail.login(usr, pwd)
unreadMail = gmail.get_inbox_conversations(is_unread=True)
print unreadMail
Gets thông tin đăng nhập từ một tập tin văn bản giả định tên đăng nhập và mật khẩu là trên dòng riêng biệt.
Tôi đã kiểm tra nguồn module, những gì nó làm cho nó mở gmail trong chế độ html và phân tích trang. Thật tệ! http://www.holovaty.com/code/gmail.py –
readline bao gồm một dòng mới, mà bạn không muốn ở đây. –
Nadia đúng. Điều này sẽ lãng phí thời gian và băng thông đáng kể. –
tôi khuyên bạn nên sử dụng Gmail atom feed
Nó cũng đơn giản như thế này:
import urllib
url = 'https://mail.google.com/mail/feed/atom/'
opener = urllib.FancyURLopener()
f = opener.open(url)
feed = f.read()
Sau đó bạn có thể sử dụng chức năng phân tích thức ăn trong bài viết này tốt đẹp: Check Gmail the pythonic way
+1 giải pháp tốt đẹp giúp tránh mọi hoạt động kinh doanh imap/pop! –
Có gì xấu về IMAP? Lưu ý rằng đoạn mã này chưa hoàn thành, mặc dù "đơn giản như thế này". –
Cũng lưu ý rằng giải pháp này sẽ nhắc người dùng nhập tên người dùng, mật khẩu trên TTY. Tuy nhiên, bạn có thể phân lớp trình mở để xử lý việc này. –
Một khi bạn đã đăng nhập trong (làm điều này bằng tay hoặc với gmail.py), bạn nên sử dụng nguồn cấp dữ liệu.
Nó nằm ở đây: http://mail.google.com/mail/feed/atom
Đó là cách Google hiện nó. Dưới đây là một liên kết để mở rộng js chrome của họ: http://dev.chromium.org/developers/design-documents/extensions/samples/gmail.zip
Sau đó bạn sẽ có thể phân tích cú pháp xml trông như thế này:
<?xml version="1.0" encoding="UTF-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
<title>Gmail - Inbox for [email protected]</title>
<tagline>New messages in your Gmail Inbox</tagline>
<fullcount>142</fullcount>
Vâng, tôi sẽ đi trước và giải thích rõ ràng một imaplib giải pháp như Cletus đề xuất. Tôi không hiểu tại sao mọi người cảm thấy cần phải sử dụng gmail.py hoặc Atom cho việc này. Loại điều này là những gì IMAP được thiết kế cho. Gmail.py đặc biệt nghiêm trọng vì nó thực sự phân tích cú pháp HTML của Gmail. Điều đó có thể cần thiết cho một số điều, nhưng không phải để có được một số lượng tin nhắn!
import imaplib, re
conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login(username, password)
unreadCount = re.search("UNSEEN (\d+)", conn.status("INBOX", "(UNSEEN)")[1][0]).group(1)
Soạn thảo regex có thể cải thiện hiệu suất một chút.
Trong khi tôi đồng ý IMAP là cách để đi đến đây, có một số vấn đề về tính di động có thể xảy ra. Vì các phương thức khác đang sử dụng các kết nối HTTP, chúng có thể hoạt động hiệu quả khi IMAP không (trong các môi trường hạn chế như Google App Engine hoặc trên các mạng không bị hạn chế lưu lượng truy cập HTTP). – Tom
Tom, đó là sự thật. Nhưng OP không nói họ đang đối phó với những hạn chế đó, nên chúng ta không nên phát minh ra chúng sớm. –
Đối với việc thực hiện đầy đủ về đọc giá trị từ thức ăn nguyên tử:
import urllib2
import base64
from xml.dom.minidom import parse
def gmail_unread_count(user, password):
"""
Takes a Gmail user name and password and returns the unread
messages count as an integer.
"""
# Build the authentication string
b64auth = base64.encodestring("%s:%s" % (user, password))
auth = "Basic " + b64auth
# Build the request
req = urllib2.Request("https://mail.google.com/mail/feed/atom/")
req.add_header("Authorization", auth)
handle = urllib2.urlopen(req)
# Build an XML dom tree of the feed
dom = parse(handle)
handle.close()
# Get the "fullcount" xml object
count_obj = dom.getElementsByTagName("fullcount")[0]
# get its text and convert it to an integer
return int(count_obj.firstChild.wholeText)
- 1. Nhận số lượng tin nhắn chưa đọc
- 2. Kiểm tra email bằng Python
- 3. Số lượng chưa đọc trên iPhone trên tabbar
- 4. Làm cách nào để đọc số lượng tệp trong một thư mục bằng Python?
- 5. Kiểm tra số lượng phần tử trong `Counter`
- 6. Kiểm tra kết nối FTP bằng Python
- 7. Đăng xuất kiểm tra SQL Server tạo số lượng lớn các lần đọc
- 8. Chia số lượng lớn bằng Python
- 9. Kết quả chưa đọc MySQL với Python
- 10. Đọc gmail từ C#
- 11. Python: Đọc số lượng lớn các dòng từ stdin
- 12. Kiểm tra xem hằng số đã được xác định chưa
- 13. Thư PHP bằng cách sử dụng Gmail
- 14. Python: Kiểm tra nếu đối số là một số nguyên
- 15. Android Làm thế nào để kiểm tra số lượng tập tin trong một thư mục
- 16. lua gửi thư bằng tài khoản gmail
- 17. Kiểm tra cookie bằng Python Flask
- 18. Bài kiểm tra đơn vị bằng Python
- 19. Gửi thư đến số lượng lớn người
- 20. Kiểm tra số lượng kết nối hiện tại đến MongoDb
- 21. Cách kiểm tra số lượng RAM trong R
- 22. JavaMail kiểm tra nội dung tin nhắn gmail IMAP
- 23. Lấy tất cả các email chưa đọc bằng cách sử dụng javamail với giao thức POP3
- 24. Lặp lại qua một số lượng chưa xác định các vòng lặp lồng nhau trong python
- 25. đọc MP3 bằng Python 3
- 26. kiểm tra lực lượng đồng đội
- 27. Kiểm tra chất lượng của PRNGs
- 28. Làm thế nào để kiểm tra xem một nguồn cấp dữ liệu RSS đã được cập nhật bằng Python chưa?
- 29. Gửi thư qua gmail bằng Gửi-MailMessage của PowerShell V2
- 30. Golang - Kiểm tra số lượng đối số? Đồng thời Nhập Người dùng - Kiểm tra mục nhập trở về (dòng trống) ""
Tôi thực sự thích giải pháp này. Nói chung sạch sẽ chỉ với một lần nhập. Để lấy số bạn muốn: len (obj.search (Không, 'UnSeen') [1] [0] .split()) –
Tôi có thể lấy các thông điệp và đối tượng với giải pháp này không? – DataGreed
@DataGreed: Với tìm kiếm, bạn chỉ nhận được id thư, nhưng sau đó bạn có thể sử dụng nó với "obj.fetch (..." để nhận thư bạn muốn. Xem liên kết này ví dụ về cách thực hiện điều đó: http : //yuji.wordpress.com/2011/06/22/python-imaplib-imap-example-with-gmail/ –