Получение писем с Python и poplib
Я хотел бы войти в свою учетную запись с Python и получить python для печати сообщений, полученных в моем почтовом ящике. Я знаю как подключиться
import getpass, poplib
user = 'my_user_name'
Mailbox = poplib.POP3_SSL('pop.googlemail.com', '995')
Mailbox.user(user)
Mailbox.pass_('my_password')
Я не знаю, как заставить Python отображать мои сообщения. Я пробовал все функции в poplib doc. Они показывают только номера.
3 ответов
вы не опубликовали свой исходный код, но вот мой ответ:
как получить общее количество сообщений:
(numMsgs, totalSize) = self.conn_pop3.stat()
как получить конкретное сообщение, зная его номер в почтовом ящике:
(server_msg, body, octets) = self.conn_pop3.retr(number)
таким образом, функция вам может понадобиться retr, он возвращает кортеж. Видеть здесь.
осторожно он также устанавливает соответствующую электронную почту, как видно на сервере! Вы, вероятно, можете отменить это, по крайней мере, с IMAP вы можете.
и моя реализация электронной почты pop3 lib гласит:
from poplib import POP3
...
if self.pop3_connected:
try:
#------Check if email number is valid----------------------
(numMsgs, totalSize) = self.conn_pop3.stat()
self.debug(200, "Total number of server messages: ", numMsgs)
self.debug(200, "Total size of server messages: ", totalSize)
if number>numMsgs:
self.debug(200, "\nSorry - there aren't that many messages in your inbox\n")
return False
else:
(server_msg, body, octets) = self.conn_pop3.retr(number)
self.debug(200, "Server Message: " , server_msg)
self.debug(200, "Number of Octets: " , octets)
self.debug(200, "Message body:")
for line in body:
print line
#end for
return True
#endif
finally:
self.__disconnect__()
#endif
также вот соединение POP3, по крайней мере, как я его реализовал...вроде сложно использовать сравнение строк, но это сработало для моего приложения:
def __connect_pop3__(self):
"""\brief Method for connecting to POP3 server
\return True If connection to POP3 succeeds or if POP3 is already connected
\return False If connection to POP3 fails
"""
#------Check that POP3 is not already connected-----------------------
if not self.pop3_connected:
#------Connect POP3-----------------------------------------------
self.debug(100, 'Connecting POP3 with: ', self.host_name, self.user_name, self.pass_name)
self.conn_pop3 = POP3(self.host_name)
res1 = self.conn_pop3.user(self.user_name)
string1 = str(res1)
self.debug(100, 'User identification result:', string1)
res2 = self.conn_pop3.pass_(self.pass_name)
string2 = str(res2)
self.debug(100, 'Pass identification result:', string2)
#------Check if connection resulted in success--------------------
#------Server on DavMail returns 'User successfully logged on'----
if string2.find('User successfully logged on')<>-1 or string1.find('User successfully logged on')<>-1 :
self.pop3_connected = True
return True
else:
return False
#endif
else:
self.debug(255, 'POP3 already connected')
return True
#endif
использование примера POP3 документы:
import getpass, poplib
user = 'my_user_name'
Mailbox = poplib.POP3_SSL('pop.googlemail.com', '995')
Mailbox.user(user)
Mailbox.pass_('my_password')
numMessages = len(Mailbox.list()[1])
for i in range(numMessages):
for msg in Mailbox.retr(i+1)[1]:
print msg
Mailbox.quit()
Если вы хотите использовать IMAP4. Используйте библиотеку outlook python, загрузите здесь : https://github.com/awangga/outlook
чтобы получить непрочитанное письмо из папки "Входящие":
import outlook
mail = outlook.Outlook()
mail.login('emailaccount@live.com','yourpassword')
mail.inbox()
print mail.unread()