質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
IMAP

IMAP (Internet Message Access Protocol) とは、メールサーバー上の電子メールデータを操作するためのプロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2407閲覧

pythonのimaplibのstoreオブジェクトエラー

obr_bt2

総合スコア0

IMAP

IMAP (Internet Message Access Protocol) とは、メールサーバー上の電子メールデータを操作するためのプロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/24 13:57

前提・実現したいこと

pythonのimaplibのstoreオブジェクトを使用してメールを削除したいです。
プログラム全体としては特定のフォルダにある最新メールを1件取得し、その後削除する、といったものにする予定です。

公式ドキュメントにある以下のように実装していますがエラーが発生してしまっています。

typ, data = M.search(None, 'ALL') for num in data[0].split(): M.store(num, '+FLAGS', '\Deleted') M.expunge()

発生している問題・エラーメッセージ

[b"[CANNOT] STORE It's not possible to perform specified operation"]

該当のソースコード

python

1imapclient.select(mailbox='test1') # メールボックスの選択 2typ, data = imapclient.search(None, "ALL") # data = [b"1 2 3 4 ..."] 3datas = data[0].split() 4fetch_num = 1 # 取得したいメッセージの数 5if (len(datas)-fetch_num) < 0: 6 fetch_num = len(datas) 7msg_list = [] # 取得したMIMEメッセージを格納するリスト 8 9for num in datas[len(datas)-fetch_num::]: 10 typ, data = imapclient.fetch(num, '(RFC822)') 11 typ, delete_result = imapclient.store(num, '+FLAGS', '\Deleted') 12 # エラーメッセージは以下のprintで出力したもの。 13 print(delete_result) 14 msg = email.message_from_bytes(data[0][1]) 15 msg_list.append(msg) 16imapclient.expunge() 17imapclient.close() 18imapclient.logout()

試したこと

メールのフォルダを確認しても消えていなかったので結果として何を出力しているか確認しました。
エラー内容でググってもピンとくるものが見つからず、ここで質問させてもらいました。

補足情報(FW/ツールのバージョンなど)

Python 3.6.3 :: Anaconda, Inc.
メール:Yahoo メール

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

UIDを使うと削除できるようです。

python

1typ, data = M.uid('search', None, 'ALL') 2for uid in data[0].split(): 3 result = M.uid('STORE', uid, '+FLAGS', '\Deleted') 4M.expunge()

投稿2020/08/24 19:53

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問