Читая и электронная почта парсинга из Gmail с помощью C#, C++ или Python

Я должен сделать Приложение Windows, которые от времен до времен получают доступ к учетной записи Gmail и проверкам, если существует новое электронное письмо. В случае, если существует, это должно считать почтовое тело и предмет (простое текстовое электронное письмо без изображений или вложений).

Не используйте заплаченный, освобождает, и в случае любого другого освобождает используемый, дайте путь загрузки.

И я нуждаюсь в почтовом теле и подвергаю только. Таким образом, если длинное и сложное сообщение, которое прибывает из Gmail, могло быть проанализировано и только две строки, содержащие предмет и тело, это будет прекрасно.

Наконец, я только должен добраться, новые сообщения прибыли начиная с последнего выполнения. Таким образом, сообщения чтения могли быть отмечены как "чтение", и только новые (отмеченный как "новые") рассматривают.

Код может быть написан в Python или C++, но я предпочитаю его в C#.

Связанный вопрос:

19
задан Community 23 May 2017 в 12:10
поделиться

3 ответа

Это печатает тему и тело невидимых сообщений. , и помечает эти сообщения как просмотренные.

import imaplib
import email

def extract_body(payload):
    if isinstance(payload,str):
        return payload
    else:
        return '\n'.join([extract_body(part.get_payload()) for part in payload])

conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login("user", "password")
conn.select()
typ, data = conn.search(None, 'UNSEEN')
try:
    for num in data[0].split():
        typ, msg_data = conn.fetch(num, '(RFC822)')
        for response_part in msg_data:
            if isinstance(response_part, tuple):
                msg = email.message_from_string(response_part[1])
                subject=msg['subject']                   
                print(subject)
                payload=msg.get_payload()
                body=extract_body(payload)
                print(body)
        typ, response = conn.store(num, '+FLAGS', r'(\Seen)')
finally:
    try:
        conn.close()
    except:
        pass
    conn.logout()

Большая часть приведенного выше кода взята из учебника Дуга Хеллмана по imaplib .

18
ответ дан 30 November 2019 в 04:44
поделиться

Используйте одну из многочисленных библиотек C# IMAP.

3
ответ дан 30 November 2019 в 04:44
поделиться

Обратите внимание, что между Gmail-IMAP и IMAPA есть некоторые различия. Например, из-за того, что Gmail обрабатывает папки как ярлыки, код, подобный приведенному ниже, не удаляет сообщение, если оно помечено какой-либо другой папкой:

imap_instance.uid('store', uid, '+FLAGS', '\\Deleted')
imap_instance.expunge()
0
ответ дан 30 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: