状況
- 日々多量に受信する電子メールの多くがHTMLメールである。
- しかしながら、自身はplaintextでの送信、返信をなるべく実施したい(ポリシーみたいなもの)。
- 周囲の標準環境はOutlookだが、自身の肌に合っているMUAはThunderbirdである。
- Outlook 2016 / Thunderbird 68.7.0 / Windows 10
解決したい問題
- OutlookのHTML形式で送信されたメールにThunderbirdでplaintextで返信しようとすると、元メールの引用部分に1行おきに余計な改行が入ってしまう。
- 単純に1行おきになるのではなく、もともと空行だった箇所はそのまま1つの空行になる。
元メール(Outlookで書かれたHTML形式)
こんにちは。
いつもお世話になっております。
例の件ですが、OKです。
よろしくお願いいたします。
Thunderbird plaintextで返信しようとしたときの引用文
> こんにちは。
>
> いつもお世話になっております。
>
> 例の件ですが、OKです。
>
> よろしくお願いいたします。
解決策の模索
- Thunderbirdのメール編集画面での置換で直せるか?
- 上述の通り、「単純に1行おきになるのではなく、もともと空行だった箇所はそのまま1つの空行」となり失われている情報があるため、返信メールの編集画面での解決は不可能。
- 元メールをコピー&ペーストして置換で直せるか?
- これはうまくいきそう。
元メール(Outlookで書かれたHTML形式)
こんにちは。
いつもお世話になっております。
例の件ですが、OKです。
よろしくお願いいたします。
元メールをテキストエディタにコピー&ペーストしたもの([space]
はわかりやすく明示したもの)
こんにちは。
いつもお世話になっております。
[space]
例の件ですが、OKです。
よろしくお願いいたします。
本来の空行でスペースがひとつ入る親切設計。
テキストエディタで s/\r\n\r\n/\r\n> /g
(2連続CRLFをCRLFと引用符に置換)して、冒頭に追加で引用符を挿入すればOK。
> こんにちは。
> いつもお世話になっております。
>
> 例の件ですが、OKです。
> よろしくお願いいたします。
これで欲しい引用部分ができた。
実装方針の模索
- Thunderbirdの本体修正やアドオン開発
- Thunderbird BugZillaを見てもいまいちピンとくるものはなく、11年前が最終更新の Bug 520755 があるくらい。事情を説明して修正に持っていくまではかなり労力がかかりそう。
- アドオン開発は、可能かどうかの調査を含めて土地勘がなさすぎて今回は見送り。
- テキストエディタで置換
- 正規表現での置換ができるエディタであれば何でもできる。
- 実際これでしばらく運用していたが、「受信メール全体をコピー」→「エディタの画面に移動して貼り付け」→「置換」→「エディタで全体コピー」→「返信メールに貼り付け」という流れがやはり面倒。
- クリップボードの中身を置換するプログラムでの実装
- エディタに頼らずクリップボードの中身を置換してしまう作戦。
- 「受信メール全体をコピー」→「プログラムの実行」→「返信メールに貼り付け」とエディタを使うよりも大分ショートカットできる。
- プログラム自体の起動はキーボードショートカットでもなんでもよし。
- 今回はこれでいってみよう。サクッとGoで。
仕様とコード
- クリップボードの中身を読んで置換する。改行の前提はCRLF。
- ついでに前後の余計なスペースや空行も除去しておく。
replyfilter.go
package main
import (
"strings"
"github.com/atotto/clipboard"
)
func main() {
var str string
// Read from clipboard
str, _ = clipboard.ReadAll()
// Trim, replace and quote
str = strings.TrimSpace(str)
str = strings.Replace(str, "\r\n\r\n", "\r\n> ", -1)
str = "> " + str + "\r\n"
// Write to clipboard
clipboard.WriteAll(str)
}
使い方
- 適当な名前(replyfilter.exe)で
go build
して実行すればクリップボードの中身が置換される。 - キーボードで何でもしたいなら、exeファイルにショートカットを作って、ショートカットをスタートメニューかデスクトップに置いて、キーボードショートカットを設定するなりなんなり。
備考
- 返信でなく転送でも同じような問題があり、対応するならコードの置換のところを引用符を除くようにすればOK。
- 細かい裏取りをしていないが、OutlookとThunderbirdでどっちがRFC的に正しいとかあるのかもしれない。plaintextの市民権がどれほど、ということもあるが、本体でなんとかしてほしい挙動ではある。
- 関連リンク