使用C#,C ++或Python从Gmail读取和解析电子邮件

时间:2010-05-08 01:46:55

标签: c# python email gmail

我必须做一个Windows应用程序,有时会访问Gmail帐户并检查是否有新的电子邮件。如果有,它必须阅读电子邮件正文和主题(一个简单的文本电子邮件,没有图像或附件)。

请不要使用付费库,如果使用任何其他库,请提供下载路径。

我只需要电子邮件正文和主题。因此,如果可以解析来自Gmail的长而复杂的消息,并且只有两个包含主题和正文的字符串,那么它将是完美的。

最后,我只需要在上次执行后获得新消息。因此,读取的消息可以标记为“已读”,只考虑新的消息(标记为“新”)。

代码可以用Python或C ++编写,但我更喜欢用C#。

相关问题:

6 个答案:

答案 0 :(得分:17)

这将打印看不见的消息的主题和正文,并将这些消息标记为已显示。

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()

上面的大部分代码来自Doug Hellmann's tutorial on imaplib

答案 1 :(得分:3)

使用众多C# IMAP libraries中的一个。

答案 2 :(得分:0)

请注意,Gmail-IMAP和IMAPA之间存在一些差异。例如,由于Gmail将文件夹视为标签,因此下面的代码如果用其他文件夹标记,则不会删除邮件:

imap_instance.uid('store', uid, '+FLAGS', '\\Deleted')
imap_instance.expunge()

答案 3 :(得分:0)

我知道这是一篇旧帖子,但我想在开源ImapX 2库讨论中添加以下链接:https://imapx.codeplex.com/开发人员似乎在保持项目的最新状态。对所有参与者来说都很棒

答案 4 :(得分:0)

谷歌已经打开了它的Gmail API来访问您的Gmail帐户。您可以通过以下链接查看具有基本功能的快速入门示例:

https://developers.google.com/gmail/api/quickstart/python

答案 5 :(得分:0)

from imap_tools import MailBox, Q
# This prints the subject and body of unseen messages, and marks those messages as seen.
with MailBox('imap.mail.com').login('test@mail.com', 'password') as mailbox:
    # *mark_seen param = True by default
    print([(m.subject, m.html or m.text) for m in mailbox.fetch(Q(seen=False), mark_seen=True)])

imap_tools