IMAP UTF-7への変換
最近アップデートしたのか、Office 365 outlookにおいて、送信済みメールを保管するデフォルトフォルダ名の日本語名が変更になってような気がします! 以前はたしか【送信済みアイテム】というフォルダ名だった気がするのだが、いまは【送信済みトレイ】になっている。
普通にOutlookやOutlook on the Webを用いて、メールの送受信をしている場合は問題ないと思いますが、PCローカルと同期するようなメールクライアントで、マスター(サーバー上)での【送信済みメールの保管メールボックス】のフォルダ名を明示する必要があるような場合は、ローカルでの【送信済みメールの保管メールボックス】との対応がおかしくなる可能性があるのではないかと思います。
どうもIMAPのフォルダ名は「IMAP UTF-7」なる文字コードで記載されるため、マスターでのメールボックス名をローカルで明示的に指定する場合は、(日本語)フォルダ名を「IMAP UTF-7」で明示してあげる必要があります。
以下に僕の備忘録として、「送信済みアイテム」と「送信済みトレイ」のIMAP UTF-7による表示を記載しておきまう。
なお、IMAP UTF-7にエンコードするソースコード(IMAP UTF-7に変換するソースコード)は、以下のものが使えました。*1
import base64 def imaputf7encode(s): """"Encode a string into RFC2060 aka IMAP UTF7""" s=s.replace('&','&-') iters=iter(s) unipart=out='' for c in s: if 0x20<=ord(c)<=0x7f : if unipart!='' : out+='&'+base64.b64encode(unipart.encode('utf-16-be')).decode('ascii').rstrip('=')+'-' unipart='' out+=c else : unipart+=c if unipart!='' : out+='&'+base64.b64encode(unipart.encode('utf-16-be')).decode('ascii').rstrip('=')+'-' return out
使い方はとても簡単で、「送信済みアイテム」のIMAP UTF-7表示を得たい場合は、次のコマンドを実行すればOKです。
imaputf7encodes('送信済みアイテム')
これを実行すれば、結果として文字列 "&kAFP4W4IMH8wojCkMMYw4A-" が返ってきます。
*1:ソースコードはhttps://www.oipapio.com/question-12399676より引用。将来的に、このページが見られなくなる可能性もあるので、転記させていただきました。