MailmanとGmail

メーリングリストであるMailmanで自分自身がGmailのアカウントを使っているとき、メーリングリストにこのアドレスから送信するとGoogleは配信されたメールを破棄しちゃう。なんか有名な話らしい。Gmailから送信したことがなかったから知らなかった。
一昨日の日曜日に、あっちの大学のメールサービスがKDDだったのがGoogleに変更になったのだ。メールアドレスは以前のままなのだが、実際はGmailのアカウントなのだ。大学のアカウント(実際はGmailのアカウント)からMailmanを使ってメールを配信すると、他のメンバーに配信されるのは問題がない。当然ながら、自分自身もメーリングリストの1メンバーなので(メンバーでなければメーリングリストを使えないからな)自分自身に配信されるはずなのだが、上記のようにGmailは送信者がGmailのアカウントだと送信者に配信されるときに破棄しちゃうのだ。

推定される理由は、Gmailでメーリングリストに投稿したはずのメールが受け取れない?に書いてある。要するにメールを送信すると送信簿にのこるわけで、これと同じメールがメーリスからおくられてきても、すでに同じMessage IDのメールがあるから破棄されちゃうのだ。
mailmanの日本語情報

Gmail では、一度システムを通過した Message-ID を持つメールは2度目以 降破棄されてしまうため、Bcc で自分宛のコピーを確保しておかないとメッ セージのスレッド表示がおかしくなる。また Bcc していても Subject Prefix の結果を見ることができない。Mailman を通過する際に Message-ID を新規に振ることで Gmail で表示されるようにする。 mm_cfg.py において、USE_MAILMAN_MESSAGE_ID を Yes にしておくことで、 この機能を有効にすることができる。(デフォルトでは No)

つまりmailman が送付する Message ID を独自にすれば、送信簿にあるMessage ID と異るので、mailman からのメールを破棄せず受け取ることになるというえわけだ。
そこで /usr/local/mailman/Mailman にある mm_cfg.pyに、
USE_MAILMAN_MESSAGE_ID = Yes
を1行加筆した。だめだ。もちろんmailman は

/usr/local/mailmanで ./bin/mailmanctl restart として再起動したのだが。この説明は2.1.14+j7 なので使っているのが2.1.15 の日本語版でないバージョンだからのようだ。

送信簿に記録は残るのだが、配信されたのかいまいち確認できていないと不安だ。 SMTPサーバの問題でもないからsmtp.gmail.com でなく他のSMTPサーバを使ってもだめだ。しょうがない、とりあえず、管理しているメーリングリストに管理用のメールアドレスも加えておくことにするか。なんかなさけないけど、すぐにできるのはこんなことしかない。
[ 追記 ] 2016.6.29
在米ポスドクさんがコメントしてくれたように、/usr/local/mailman/Mailman/Handlers の CookHeaders.py を書き換えてみた。

上記の/usr/local/mailman/Mailmanのmm_cfg.pyに以下の1文を加筆したUSE_MAILMAN_MESSAGE_ID = Yes
はコメントアウトしてだ。

オリジナルの235行目以降は;

def prefix_subject(mlist, msg, msgdata):
    # Add the subject prefix unless the message is a digest or is being fast
    # tracked (e.g. internally crafted, delivered to a single user such as the
    # list admin).
    prefix = mlist.subject_prefix.strip()
    if not prefix:
        return
    subject = msg.get('subject', '')

となっている。241行目と 242行目の間に
# overwrite message-id.
msg[‘X-Original-Message-ID’] = msg.get(‘message-id’, ”)
del msg[‘message-id’]
msg[‘Message-ID’] = Utils.unique_message_id(mlist)
を挿入するのだ。すなわち

def prefix_subject(mlist, msg, msgdata):
    # Add the subject prefix unless the message is a digest or is being fast
    # tracked (e.g. internally crafted, delivered to a single user such as the
    # list admin).
    prefix = mlist.subject_prefix.strip()
    if not prefix:
        return
    # overwrite message-id.
		msg['X-Original-Message-ID'] = msg.get('message-id', '')
		del msg['message-id']
		msg['Message-ID'] = Utils.unique_message_id(mlist)
   subject = msg.get('subject', '')

だめだった。全て元に戻した。メーリスがうごかない。ここに挿入していいいのかも定かでないからな。
解決策がまだないので、ユーザレベルでの対応をお願いするしかない。
(1)配信されたと信じて何もしない。
(2)Bccで自分宛てに送信する。
(3)スマホのメアドも登録しておく。
Bccを設定してみると、送信済みにあるメールと、Bcc で配信されるメールと、メーリスで配信されるメールのMessage_IDは同じなんだよね。だからMesage_IDが同じだからという説明はおかしい。GmailはBccで来たメールもMesage_IDが同じだから受信しないのでは?。でもBccを受け取れるんだよね。