Funactional Mathematicianのブログ

数学(含む、統計学)で考えていることや、PC(特にMac)のTipsについてのメモの集合です。本blogに書かれている内容は、記事を書いた時点での僕の知識や調査によるものです。そのため、僕の不勉強による間違いや勘違いなどが書かれていることもあり得ます。記事の内容の真偽について、ご自身できちんと確かめて下さいますようよろしくお願いいたします。また、不適切な表現や間違えについては、ご指摘頂けると助かります。 (なお、記事の内容は、所属機関を代表するものではなく、僕個人の見解です。)

IMAP UTF-7への変換

最近アップデートしたのか、Office 365 outlookにおいて、送信済みメールを保管するデフォルトフォルダ名の日本語名が変更になってような気がします! 以前はたしか【送信済みアイテム】というフォルダ名だった気がするのだが、いまは【送信済みトレイ】になっている。

普通にOutlookOutlook on the Webを用いて、メールの送受信をしている場合は問題ないと思いますが、PCローカルと同期するようなメールクライアントで、マスター(サーバー上)での【送信済みメールの保管メールボックス】のフォルダ名を明示する必要があるような場合は、ローカルでの【送信済みメールの保管メールボックス】との対応がおかしくなる可能性があるのではないかと思います。

どうもIMAPのフォルダ名は「IMAP UTF-7」なる文字コードで記載されるため、マスターでのメールボックス名をローカルで明示的に指定する場合は、(日本語)フォルダ名を「IMAP UTF-7」で明示してあげる必要があります。

以下に僕の備忘録として、「送信済みアイテム」と「送信済みトレイ」のIMAP UTF-7による表示を記載しておきまう。

  • 「送信済みアイテム」をIMAP UTF-7で表示すると "&kAFP4W4IMH8wojCkMMYw4A-"

  • 「送信済みトレイ」をIMAP UTF-7で表示すると &kAFP4W4IMH8wyDDsMKQ-"

なお、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より引用。将来的に、このページが見られなくなる可能性もあるので、転記させていただきました。