2010-02-14 2 views
2

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

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

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

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

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

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

ответ

2
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> Настройки> Forwarding и POP/IMAP> " Включить POP для всей почты "

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

+0

Это фактически идентично тому, что у меня было. Но по какой-то причине Gmail не отображает мои сообщения в хронологическом порядке. В моем случае numMessages дает последнее сообщение в Gmails, казалось бы, неупорядоченном списке, но это случайный от года назад Я очень ценю помощь. Возможно, проблема связана с Gmail? –

+0

После добавления некоторого примитивного кода отладки, я проверил метки времени заголовка для каждого отдельного сообщения. Моя учетная запись Gmail по-видимому не получила никакой почты с 2007 года. Я не знаю, как Google внедряет свою систему pop3, но, похоже, она прослушивается. Нет никакой корреляции между сообщениями электронной почты в моей учетной записи pop3 и веб-интерфейсом. Как будто учетная запись pop3 содержит половину из них, а сеть содержит другую половину. –

+0

Hi Gary, Попробуйте добавить вместо имени пользователя "recent: username" вместо имени mailserver.user() выше. Также убедитесь, что ваша учетная запись Gmail настроена на разрешение POP3 в настройках конфигурации. Я вижу, что вы имеете в виду «случайные» номера сообщений, но если вы читаете здесь (http://mail.google.com/support/bin/answer.py?answer=47948), вы увидите, что вам нужно использовать «последний режим», чтобы все сообщения были доступны. Я думаю, что если вы не используете последний режим, возможно, это последнее последнее непрочитанное сообщение? Это просто догадка. – swanson

Смежные вопросы