こんにちは。サイオステクノロジー OSS サポート担当 N です。
RHEL の 標準 MTA として同梱されている Postfix ですが、2019/05/07 に RHEL8 がリリースされるあたって、Postfix のバージョンも 2.10 系から 3.3 系へとリベースされることとなりました。
変更点や追加機能の概要は、リリースノートや、Postfix コミュニティで公開されているアナウンスページなど (以下参照) を拝見していただくとして、
・Postfix feature overview
https://www.postfix.org/features.html
・Postfix Announcements
https://www.postfix.org/announcements.html
Postfix 3系に移行するにあたり、特筆すべき変更点の一つとして、国際化電子メールヘッダに対応するために導入された SMTPUTF8 拡張があります。
SMTPUTF8 拡張とは?
従来の E メール標準では、メールヘッダに使用できるのは ASCII 文字のみに制限されていました。
2012年に以下の RFC で定義された国際化電子メール “Internationalized Email” では、 UTF-8 エンコーディングを使用してメールヘッダに Unicode 文字を含めること、及びそれを SMTP プロトコルを介して転送することが許可されています。
(rfc6531) SMTP Extension for Internationalized Email
https://tools.ietf.org/html/rfc6531
(rfc6532) Internationalized Email Headers
https://tools.ietf.org/html/rfc6532
(rfc6533) Internationalized Delivery Status and Disposition Notifications
https://tools.ietf.org/html/rfc6533
Postfix の既存のバージョンでは、メールアドレスのローカルパート (@よりも前の部分) で使用される UTF-8 については既に対応していました。3系で実装された今回の SMTPUTF8 拡張では、メールアドレスのドメインパート (@よりも後ろの部分) で UTF-8 が使用できるよう対応されました。
(勿論 SMTP サーバ側・クライアント側の双方で SMTPUTF8 をサポートしている必要がありますがが)
これによって、「ユーザ@サイオステクノロジー.jp」のようにドメイン部に日本語を使用したメールアドレスを使用可能になります。
環境構成
RHEL8.0
postfix-3.3.1-8.el8.x86_64
ホスト名:RHEL8.example.com
動作検証
(参考)
Postfix SMTPUTF8 support
https://www.postfix.org/SMTPUTF8_README.html
SMTPUTF8 の有効/無効は smtputf8_enable で制御します。
デフォルト値は yes のため、まずは一旦 no を設定して、従来の動作を確認します。
/etc/postfix/main.cf (最下部に追記)
smtputf8_enable = no
設定を反映
# systemctl reload postfix
同一サーバ上で localhost の 25番ポートに telnet で接続し、UTF8 文字を
FROM に含むメールを送信してみましょう。従来の仕様では、MAIL FROM の
ドメインパートに UTF8 文字が含まれる場合、syntax エラーになります。
# telnet localhost 25 Trying ::1... Connected to localhost. Escape character is '^]'. 220 RHEL8.example.com ESMTP Postfix EHLO localhost.example.com 250-RHEL8.example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN MAIL FROM:ユーザ@サイオステクノロジー.jp 501 5.1.7 Bad sender address syntax MAIL FROM:ユーザ@サイオステクノロジー.jp SMTPUTF8 501 5.1.7 Bad sender address syntax
この時、maillog では「Illegal address syntax from~」の warning が出力されました。
warning: Illegal address syntax from localhost[::1] in MAIL command: ?????????@??????????????????????????????.jp
では、smtputf8_enable = no をコメントアウトし、SMTPUTF8 を有効化 (デフォルト) しましょう。
/etc/postfix/main.cf
# smtputf8_enable = no
設定を反映
# systemctl reload postfix
同様に telnet でメールを送信します。
# telnet localhost 25 Trying ::1... Connected to localhost. Escape character is '^]'. 220 RHEL8.example.com ESMTP Postfix EHLO localhost.example.com 250-RHEL8.example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 SMTPUTF8 .....(※1) MAIL FROM:ユーザ@サイオステクノロジー.jp SMTPUTF8 .....(※2) 250 2.1.0 Ok RCPT TO:mailuser@RHEL8.example.com 250 2.1.5 Ok DATA 354 End data with . メールテスト . 250 2.0.0 Ok: queued as 3F7A51129E19
(※1)Postfix SMTP サーバでは、SMTP クライアントからの EHLO に対して、
SMTPUTF8 をサポートしていることをアナウンスします。
(※2)SMTP クライアントから SMTPUTF8 リクエストを送信します。
SMTPUTF8 が使用できるのは MAIL FROM もしくは VRFY コマンドのみです。
→それ以外のコマンドで UTF8 を使用しようとすると、Unsupported option エラーになります。
RCPT TO:ユーザ@サイオステクノロジー.jp SMTPUTF8
555 5.5.4 Unsupported option: SMTPUTF8
この時、maillog には以下のように記録されます。無事、ローカルの mailuser ユーザへメール送信に成功しました。
Jun 6 15:51:12 RHEL8 postfix/smtpd[32131]: connect from localhost[::1] Jun 6 15:51:44 RHEL8 postfix/smtpd[32131]: 3F7A51129E19: client=localhost[::1] Jun 6 15:52:00 RHEL8 postfix/cleanup[32159]: 3F7A51129E19: message-id=<20190606065144.3F7A51129E19@RHEL8.example.com> Jun 6 15:52:00 RHEL8 postfix/qmgr[32024]: 3F7A51129E19: from=<ユーザ@サイオステクノロジー.jp>, size=377, nrcpt=1 (queue active) Jun 6 15:52:00 RHEL8 postfix/local[32209]: 3F7A51129E19: to=<mailuser@RHEL8.example.com>, relay=local, delay=24, delays=24/0.02/0/0, dsn=2.0.0, status=sent (delivered to mailbox) Jun 6 15:52:00 RHEL8 postfix/qmgr[32024]: 3F7A51129E19: removed
最後に
現時点では例えば myhostname や mydomain では UTF8 に対応していないなど、まだまだ制限の多い機能ですが、今後はこれも修正される可能性が示唆されています。(https://www.postfix.org/SMTPUTF8_README.html#enabling)
今後のアップデートに期待ですね。