web-dev-qa-db-ja.com

C#、C ++、またはPython)を使用してGmailからメールを読み取って解析する

時々Gmailアカウントにアクセスし、新しいメールがあるかどうかを確認するWindowsアプリケーションを実行する必要があります。ある場合は、電子メールの本文と件名(画像や添付ファイルのない単純なテキスト電子メール)を読み取る必要があります。

有料のライブラリは使用しないでください。他のライブラリを使用する場合は、ダウンロードパスを指定してください。

また、メールの本文と件名のみが必要です。したがって、Gmailからの長くて複雑なメッセージを解析でき、件名と本文を含む2つの文字列だけがあれば、それは完璧です。

最後に、最後の実行以降に到着した新しいメッセージを取得するだけで済みます。したがって、既読メッセージは「既読」としてマークされ、新しいメッセージ(「新規」としてマークされた)のみが考慮されます。

コードはPythonまたはC++で記述できますが、C#で記述したほうがいいです。

関連する質問:

20
jpnavarini

これにより、未表示のメッセージの件名と本文が印刷され、それらのメッセージが表示済みとしてマークされます。

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に関するDoug Hellmannのチュートリアル からのものです。

18
unutbu

多くの C#IMAPライブラリ の1つを使用してください。

3

これが古い投稿であることは知っていますが、オープンソースのImapX 2ライブラリのディスカッションに次のリンクを追加したいと思いました: https://imapx.codeplex.com/ 開発者はプロジェクトを維持しているようです現在まで。関係者全員にとって素晴らしい仕事

0
Mark Kram
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('[email protected]', '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

0
Vladimir

Gmail-IMAPとIMAPAにはいくつかの違いがあることに注意してください。たとえば、Gmailはフォルダをラベルのように扱うため、次のようなコードは、他のフォルダでタグ付けされている場合、メッセージを削除しません。

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

Googleは、GmailアカウントにアクセスするためのGmailAPIを公開しました。このリンクで、基本的な機能を備えたクイックスタートサンプルを確認できます。

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

0
Aakash Gupta