メーリングリストである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を受け取れるんだよね。
メッセージIDが同じメールがあると、先の物(送信したメール)が優先されて、MLから配信されてきたメールは受信トレイに入らない仕様のようですね。
私の所属ラボもGmailでMLを使っていますが、やはり自分から出したメールは見れません。
ウェブ上を探してみると、ちらほら対策らしきものが見つかりますね。私には理解できないのですが、メッセージIDを書き替えちゃうという方法がありました。うまくいきますかどうか。
http://piano2nd.smb.net/~kuji/pukiwiki-1.4.7/index.php?Gmail対策?
あ、既に書いてあった。
ちゃんと読んでいませんでした。失礼しました。
「メールヘッダのmassage-idを強制的に書き変えてやればいいらしいという情報があるが、できていない。」
亀レスですが、私は以下の mailman を使って
http://www.poem.co.jp/tech/mailman-jp
USE_MAILMAN_MESSAGE_ID = Yes
が動作しています。
コメントありがとうございます。日本語版ならいいんでしょうね。
バージョンを変更するのをためらっています。
USE_MAILMAN_MESSAGE_ID ですが、mailman 本家の ML で討議されすったもんだのあげく、不採用になったようです。
だから、英語版(というか本家のオリジナル)には現在、インプリメントされていないのかもしれません(未確認)。
これを提案したのが日本語 mailman に多大な貢献をなさった、故・菊池様(を中心としたメンバー)と伝え聞いています。
という、歴史的経緯のため日本語版にだけ残っているのかもしれません。ご参考まで
おまけですが、手元の日本語版 mailman では、USE_MAILMAN_MESSAGE_ID の処理をする部分は
CookHeaders.py の
def prefix_subject(mlist, msg, msgdata):
ではなく、
def process(mlist, msg, msgdata):
で行われています。
https://mm.poem.co.jp/mailman-jp/src/mailman-2.1.23%2bj3.tgz
をダウンロードし展開し、その CookHeaders.py と現在ご使用中のそれと diff してみると、もしかすると幸せになれるかもw(勿論、自己責任でお願いします。)
情報ありがとうございます。
今はちと他に優先させることがあるので、それが終わったら検討してみます。