アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

携帯端末とbare LFとqmail

こんにちは、亀本です。

個人的な話ですが、先日姪っ子が生まれました。ついにおじさんになってしまいました。
昨日見舞いも兼ねて病院に行ったのですが、赤ん坊は本当にかわいいですね。
自分はキャラに似合わず子供好きだったりするので、見ていると幸せな気持ちになります。

さて、今回は携帯のメール周りをいじっていて学んだ、qmailのbare LF問題についてです。
知っている人も多いトピックかもしれませんが、自分が一回これでハマったので、簡単に触れておこうと思いました。


一般に、SMTPセッションはRFCの規定により使用される改行コードはCR+LFと規定されています。
しかし、残念な事にこの規定は各種MTAやメーラーは必ずしもこのRFCに準拠しているものばかりではありません。
特に、LFのみで送ってしまうものは多く、これをbare LF (生のLF)と呼びます。
(参考:Bare LFs in SMTP)

さて、タイトルにも携帯端末と挙げましたが、携帯のメーラーの中にもこういったbare LFなメールを投げてくる機種があります。

PCの場合ならば、メーラーをバージョンアップ・変更などのユーザー側措置も可能ですが、携帯端末の場合はそうはいきません。
一度携帯を買ったら、ユーザーはその携帯端末のメーラーとしばらくお付き合いすることになるため、メーラー規約違反だから!なんていってユーザーをはじいてしまうのは流石に可哀そう。。。というか、事情を知らないユーザーには説明できませんね。

そのため、こういった問題はサーバー側で吸収するしかありません。
SendmailPostfixなどのMTAはbare LF を含んだメールでも処理してくれるので、それほど大きな心配はいりません。
ですが、qmailではこのようなLFのみの場合はエラーとしてはじいてしまいます。このため、qmailで携帯端末のような問題を回避し得ないユーザーを相手にする場合には、きちんと対策を講じておく必要があります。

qmailでこの問題に対処するには、qmailと併せて利用されるtcpデーモンのucspi-tcpに含まれるfixcrioというコマンドを使います。fixcrioは、行末にCRの付与されていない改行に、CRを付与した形で返してくれます。

通常、ソースパッケージからインストールしたqmailの起動スクリプトでは、qmailの起動はqmail-smtpdを直接呼び出すようになっていますが、これをfixcrio経由で呼び出すように変更します。



qmail-smtpd `hostname` ....




fixcrio qmail-smtpd `hostname` ....


このようにすることで、bare LFで送ってきてしまうようなRFC違反のメールでも、qmailにエラーとしてはじかれることなく処理することができるようになります。

qmailの改行コードやヘッダー周りの問題はこれだけではなく、あれこれとRFCに違反する点もあるようですが、運用上はそれらに関しても注意が必要です。
(参考:qmailのRFC違反)


細かなネタですが、参考になれば幸いです。