使用C#、C++或Python读取和解析Gmail邮件

23 投票
6 回答
26103 浏览
提问于 2025-04-15 22:29

我需要做一个Windows应用程序,偶尔会访问一个Gmail账户,检查是否有新邮件。如果有新邮件,它需要读取邮件的正文和主题(就是简单的文本邮件,没有图片或附件)。

请不要使用付费的库,如果使用了其他库,请提供下载链接。

我只需要邮件的正文和主题。所以如果能把从Gmail收到的长而复杂的信息处理成只包含主题和正文的两个字符串,那就太好了。

最后,我只需要获取自上次执行以来到达的新邮件。所以已读的邮件可以标记为“已读”,只有标记为“新”的邮件才会被考虑。

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

相关问题:

6 个回答

0

请注意,Gmail的IMAP和IMAPA之间有一些区别。例如,由于Gmail把文件夹当作标签来处理,下面这样的代码如果邮件被标记为其他文件夹,就不会删除这封邮件:

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

可以使用很多种C#的IMAP库

18

这段代码会打印出未读消息的主题和内容,并且会把这些消息标记为已读。

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 关于 imaplib 的教程

撰写回答