Удалить последнее полученное письмо через скрипт Python? - PullRequest
2 голосов
/ 14 февраля 2010

Я использую Gmail и приложение, которое уведомляет меня, если я получил новое электронное письмо, содержащее его заголовок во всплывающей подсказке. (GmailNotifier с Miranda-IM) Большинство сообщений, которые я получаю, - это письма, которые я не хочу читать, и раздражает необходимость входить в Gmail по медленному соединению, чтобы просто удалить указанное письмо. Я считаю, что плагин является закрытым исходным кодом.

Я (безуспешно) пытаюсь написать скрипт, который будет входить в систему и удалять «верхнее» письмо (последнее полученное). Однако это не так просто, как я думал.

Сначала я попробовал использовать imaplib, но обнаружил, что он не содержит методов, которые, как я надеялся, будут. Это немного похоже на спецификацию dbapi, содержащую только минимальные функциональные возможности, в случае изменения спецификации imap. Затем я попытался прочитать RFC IMAP (rfc3501). На полпути я понял, что не хочу писать целый почтовый клиент, поэтому решил вместо этого попробовать pop3.

poplib также минимален, но, похоже, имеет то, что мне нужно. Однако pop3, кажется, не сортирует сообщения в любом порядке, с которым я знаком. Мне нужно либо вызывать top () или retr () для каждого письма, чтобы прочитать заголовки, если я хочу увидеть полученную дату.

Возможно, я мог бы перебирать каждый заголовок сообщения в поисках самой последней даты, но это ужасно. Я хочу избежать анализа всего моего почтового ящика, если это возможно. Я также не хочу «выдвигать» почтовый ящик и загружать любые другие сообщения.

Прошло уже 6 часов, и я не чувствую себя ближе к решению, чем когда я начал. Я пропускаю что-то простое? Есть ли другая библиотека, которую я мог бы попробовать? (Я нашел «чилкат», но он раздулся до черта, и я надеялся сделать это со стандартной библиотекой)

1 Ответ

3 голосов
/ 14 февраля 2010
import poplib

#connect to server
mailserver = poplib.POP3_SSL('pop.gmail.com')
mailserver.user('recent:YOURUSERNAME') #use 'recent mode'
mailserver.pass_('YOURPASSWORD') #consider not storing in plaintext!

#newest email has the highest message number
numMessages = len(mailserver.list()[1])

#confirm this is the right one, can comment these out later
newestEmail = mailserver.retr(numMessages)
print newestEmail

#most servers will not delete until you quit
mailserver.dele(numMessages)
mailserver.quit()

Я недавно работал с poplib, написав очень примитивный почтовый клиент. Я проверил это с моим почтовым сервером (не gmail) на некоторых тестовых письмах, и это, казалось, работало правильно. Я бы отправил себе несколько фиктивных писем, чтобы сначала проверить это.

Предостережения:

  • Убедитесь, что вы используете 'последние Режим': http://mail.google.com/support/bin/answer.py?answer=47948
  • Убедитесь, что ваша учетная запись Gmail имеет POP3 включено: Gmail> Настройки> Переадресация и POP / IMAP> «Включить POP» для всей почты "

Надеюсь, это поможет, этого должно хватить, чтобы вы пошли!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...