CentOS 7 の Postfix で独自ドメインの設定

CentOS 7 の Postfix で独自ドメインのメールを送受信できるようにする必要最低限の設定についての解説。
巷の解説に多い過剰で不必要な設定を排除し、本当に必要な設定項目は何なのかを理解、把握する。

## Postfix とは
<img src="http://www.postfix.org/mysza.gif">

[Postfix](http://www.postfix.org/) は SMTP サーバーであり、いわゆるメール送信サーバーに当たる。また <dfn id="mta"><abbr title="Mail Transfer Agent">MTA</abbr></dfn> (Mail Transfer Agent) であり、 MTA 間のメール受信も行う。

他の MTA に Debian で採用されている [Exim](http://www.exim.org/) などがある。古くは [sendmail](http://ftp.sendmail.org/) や [qmail](http://cr.yp.to/qmail.html) があるが、いずれも近年の更新はない。

CentOS 7 のデフォルトでは、標準リポジトリの Postfix 2.10.1 が既にインストールされている。
[GhettoForge](http://ghettoforge.org/index.php/Main_Page) Plus リポジトリの [postfix3](http://ghettoforge.org/index.php/Postfix3) パッケージを利用すると 3.8.3 がインストールできる。

RHEL 8 で Postfix 3.3 が採用され、最新の RHEL 8 の BaseOS リポジトリおよび RHEL 9 の AppStream リポジトリでは Postfix 3.5 のパッケージが提供されている。

2023年12月時点の使用ソフトウェアを識別可能な48万台弱の MX サーバーの内、 Exim の56%に次いで Postfix は37%のシェアを占める。3位は Sendmail の3.5%で、Exim と Postfix だけでシェアの94%弱を占める。 [^securityspace]

[^securityspace]: <cite>[Mail (MX) Server Survey](https://www.securityspace.com/s_survey/data/man.202312/mxsurvey.html) - <i>www.securityspace.com</i></cite>

## リファレンス

* [Postfix Basic Configuration](http://www.postfix.org/BASIC_CONFIGURATION_README.html) - 公式の基本設定のリファレンス。
* [Postfix 基本設定](http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html) - 上記の日本語訳。ただし翻訳元のバージョンは 2.3 で、CentOS 7 の Postfix は 2.10 なのでバージョン違いに注意。
* [Postfix Configuration Parameters](http://www.postfix.org/postconf.5.html) - 公式の設定パラメーターのリファレンス。
* [Postfix 設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html) - 前述の基本設定と同様。


## DNS の設定
```
mail.example.jp.        IN      A               192.0.2.1
example.jp.             IN      MX      10      mail.example.jp
```
DNS の A レコードにメールサーバーの IP アドレスを、 MX レコードに FQDN を登録する。

## firewalld の設定
```bash
firewall-cmd --list-services && \
firewall-cmd --add-service=smtp --permanent && \
firewall-cmd --reload && \
firewall-cmd --list-services
```
SMTP では25番ポートを利用して通信を行うため解放する必要がある。
`firewall-cmd` コマンドの `--add-service` オプションでサービス名に `smtp` を指定すると25番ポートを開放できる。 [^firewall-cmd-add-service] [^firewall-cmd-add-service2]

[^firewall-cmd-add-service]: <q cite="https://firewalld.org/documentation/man-pages/firewall-cmd.html">Add a service for `zone`. If zone is omitted, default zone will be used. This option can be specified multiple times.</q><cite>[Documentation - Manual Pages - firewall-cmd | firewalld](https://firewalld.org/documentation/man-pages/firewall-cmd.html) - <i>firewalld.org</i></cite>

[^firewall-cmd-add-service2]: <q cite="https://firewalld.org/documentation/man-pages/firewall-cmd.html">The service is one of the firewalld provided services. To get a list of the supported services, use **`firewall-cmd --get-services`**.</q><cite>[Documentation - Manual Pages - firewall-cmd | firewalld](https://firewalld.org/documentation/man-pages/firewall-cmd.html) - <i>firewalld.org</i></cite>

## Postfix の基本設定
以下のコマンドは CentOS 7 において、メール送信サーバー `mail.example.jp` およびメールアドレス `test@example.jp` が設定されるために必要な最低限の内容。

記事によっては余計なパラメーターを指定をしていることが多いが、デフォルト値を再指定していたり必要のない項目を設定している場合がある。

```bash
DOMAIN=example.jp && \
postconf | egrep "^(home_mailbox|inet_interfaces|my(destination|domain|hostname|origin)) " && \
sed -i.org \
    -e "/#myhostname = virtual.domain.tld/a myhostname = mail.${DOMAIN}" \
    -e '/#myorigin = $mydomain/ s/^#//' \
    -e '/^inet_interfaces/ s/^/#/' \
    -e '/^mydestination/ s/^/#/' \
    -e '/#mydestination .* $mydomain$/ s/^#//' \
    -e '|#home_mailbox = Maildir/$| s|^#||' \
    /etc/postfix/main.cf && \
cat << _EOF_ >> /etc/postfix/main.cf
smtp_tls_CAfile = /etc/pki/tls/cert.pem
smtp_tls_security_level = may
smtp_tls_loglevel = 1
_EOF_
postfix check && \
postfix -vv && \
postfix reload && \
postconf | egrep "^(home_mailbox|inet_interfaces|my(destination|domain|hostname|origin)) "
```
`postconf` コマンドは、設定パラメーターの現在値を出力できる。 [^postconf]
`postfix check` コマンドは、不正なディレクトリ/ファイルの所有権やパーミションを警告し、見つからないディレクトリを作成する。ほぼ必ず文法チェックと紹介されているが誤り。 [^postfix-check]
`postfix reload` コマンドは、設定ファイルを再び読み込む。動作中のプロセスは早期の適切な時に停止が許される。 [^postfix-reload]

[^postconf]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postconf.1.html">`postconf`(1) コマンドは設定パラメータの現在の値を表示したり、設定パラメータの値を変更したり、Postfix メールシステムに関するその他の設定情報を表示します。</q><cite>[Postfix manual - postconf(1)](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.1.html) - <i>www.postfix-jp.info</i></cite>

[^postfix-check]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postfix.1.html">**`check`**  不正なディレクトリ/ファイルの所有権やパーミションを警告し、見つからないディレクトリを作成します。</q><cite>[Postfix manual - postfix(1)](http://www.postfix-jp.info/trans-2.3/jhtml/postfix.1.html) - <i>www.postfix-jp.info</i></cite>

[^postfix-vv]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postfix.1.html">**`-v`**      デバッグ目的の冗長ログモードを使用します。`-v` オプションを複数指定すると、冗長度が増します。</q><cite>[Postfix manual - postfix(1)](http://www.postfix-jp.info/trans-2.3/jhtml/postfix.1.html) - <i>www.postfix-jp.info</i></cite>

[^postfix-reload]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postfix.1.html">**`reload`**  設定ファイルを再び読み込みます。動作中のプロセスは早期の適切な時に停止が許されます。</q><cite>[Postfix manual - postfix(1)](http://www.postfix-jp.info/trans-2.3/jhtml/postfix.1.html) - <i>www.postfix-jp.info</i></cite>

* [配信中のメールの暗号化 – Google 透明性レポート](https://transparencyreport.google.com/safer-email/overview)
* [送受信時のメールの暗号化 - Gmail ヘルプ](https://support.google.com/mail/answer/6330403)
* [Gmail のメールが認証されているかどうかの確認 - パソコン - Gmail ヘルプ](https://support.google.com/mail/answer/180707)

## 設定パラメーター

### myhostname
```
myhostname = mail.example.jp
```

`myhostname` はこのメールシステムのホスト名。[^myhostname]
**SMTP サーバーの FQDN** を指定する。 [^myhostname3]
デフォルトでは `gethostname()` から得た FQDN を使うため、Web サーバーと兼用する場合など OS のホスト名（`hostname` コマンドで確認できる）と一致しない際は設定が必要。 [^myhostname2]
いわゆる「メール送信サーバー」のアドレスになる。

[^myhostname]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#myhostname">このメールシステムのインターネットホスト名。</q><cite>myhostname - Postfix main.cf ファイルフォーマット - [Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html) - <i>www.postfix-jp.info</i></cite>

[^myhostname2]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#myhostname">デフォルトでは `gethostname()` から得た完全修飾ドメイン名を使います。</q><cite>myhostname - Postfix main.cf ファイルフォーマット - [Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html) - <i>www.postfix-jp.info</i></cite>

[^myhostname3]: <q cite="https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html">SMTP サーバーの FQDN を指定します。</q><cite>[基本的な SMTP サーバーの設定](https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html) - <i>www.turbolinux.co.jp</i></cite>


### mydomain
`mydomain` はこのメールシステムの**ドメイン名**。デフォルトでは未指定で、 `$myhostname` から最初の要素（最初のピリオドまで）を引いたものを使う。 [^mydomain] [^mydomain2]

例えば `myhostname = mail.example.jp` の場合、`mydomain` が未指定であれば `$mydomain` は `$myhostname` から `mail.` を引いた `example.jp` になる。
従って、`$myhostname` にサブドメインを適切に指定している場合は **`mydomain` の設定は不要**。

[^mydomain]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#mydomain">このメールシステムのインターネットドメイン名。デフォルトでは `$myhostname` から最初の要素を引いたものを使います。</q><cite>[Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html)

[^mydomain2]: <q>デフォルトの設定は、`myhostname` で指定したホスト名から最初のピリオドまでを引いたものになります。</q><cite>[基本的な SMTP サーバーの設定](https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html) - <i>www.turbolinux.co.jp</i></cite>

### myorigin
```
myorigin = $mydomain
```

`myorigin` はローカルで投函されたメールがどのドメインから来るように見えるかを指定する。 [^myorigin] [^myorigin2]
サーバー上から直接メールをローカル配信した場合に自動的に補われるドメイン名を指定する。 [^myorigin4]
送信者と受信者アドレスの一貫性を保つために、修飾されていない受信者アドレスに付けられるドメイン名も指定する。 [^myorigin3]
デフォルト値は `$myhostname` になっている。
いわゆるメールアドレスの `@` の後ろの文字列になる。
前述の例では、デフォルト値が `$myhostname` なのでメールアドレスは `@mail.example.jp` になるが、 `$mydomain` を指定することで `@example.jp` にすることができる。

[^myorigin]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#myorigin">ドメイン名で、ローカルで投函されたメールはそこから来たように見え、またローカルで投かんされたメールはそこに配送されます。</q><cite>[Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html) - <i>www.postfix-jp.info</i></cite>

[^myorigin2]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#myorigin">`myorigin` パラメータにはローカルで投函されたメールがどのドメインから来るように見えるかを指定します。</q><cite>外行きのメールに使うドメイン名 - [Postfix 基本設定](http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html) - <i>www.postfix-jp.info</i></cite>

[^myorigin3]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#myorigin">送信者と受信者アドレスの一貫性を保つため、 `myorigin` は修飾されていない受信者アドレスに付けられるドメイン名も指定します。</q><cite>外行きのメールに使うドメイン名 - [Postfix 基本設定](http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#myorigin) - <i>www.postfix-jp.info</i></cite>

[^myorigin4]: <q cite="https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html">サーバー上から直接メールをローカル配信した場合に、自動的に補われるドメイン名を指定します。</q><cite>[基本的な SMTP サーバーの設定](https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html) - <i>www.turbolinux.co.jp</i></cite>

### inet_interfaces
```
inet_interfaces = all
```
`inet_interfaces` はメールを受け取るネットワークインターフェイスアドレス。 [^inet_interfaces]
リモートからの SMTP 接続要求に応答するネットワークインターフェースのアドレスを指定する。 [^inet_interfaces4]
Postfix のデフォルト値は `all` だが CentOS のデフォルト設定値は `localhost` になっているため、すべてのネットワークインターフェースでメールを受信するには CentOS のデフォルト設定をコメントアウトして、デフォルト値の `all` を有効にする必要がある。 [^inet_interfaces2] [^inet_interfaces5] [^inet_interfaces6]

このパラメータを変更したら Postfix を stop して start する必要がある。 [^inet_interfaces3]
検証した限りでは `postfix reload` で反映される。

[^inet_interfaces]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#inet_interfaces">このメールシステムがメールを受け取るネットワークインターフェースアドレス。</q><cite>inet_interfaces - [Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#inet_interfaces) - <i>www.postfix-jp.info</i></cite>

[^inet_interfaces2]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#inet_interfaces">すべてのネットワークインターフェースでメールを受信するには `"all"` を指定します (デフォルト)。</q><cite>inet_interfaces - [Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#inet_interfaces) - <i>www.postfix-jp.info</i></cite>

[^inet_interfaces3]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#inet_interfaces">注意1: このパラメータを変更したらPostfixを stop してから start する必要があります。</q><cite>inet_interfaces - [Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#inet_interfaces) - <i>www.postfix-jp.info</i></cite>

[^inet_interfaces4]: <q cite="https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html">リモートからの SMTP 接続要求に応答するネットワークインターフェースのアドレスを指定します。</q><cite>[基本的な SMTP サーバーの設定](https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html) - <i>www.turbolinux.co.jp</i></cite>

[^inet_interfaces5]: <q cite="https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html">ローカルホストからの要求にのみ応答するように初期設定されていますので、デフォルトでは、この SMTPサーバー宛てのメールを受信することはできません。</q><cite>[基本的な SMTP サーバーの設定](https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html) - <i>www.turbolinux.co.jp</i></cite>

[^inet_interfaces6]: <q cite="https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html">他のホストからのメールを受信するには、この SMTP サーバーがメールを受信するネットワークインターフェースを指定する必要があります。通常は、全てのインターフェースを対象とするため `ALL` を指定します。</q><cite>[基本的な SMTP サーバーの設定](https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html) - <i>www.turbolinux.co.jp</i></cite>

### mydestination
```
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
```

`mydestination` は `$local_transport` メール配送トランスポートを介して配信されるドメインの一覧。 [^mydestination]
このマシンが他のマシンに転送せずにローカルに配送するドメインを指定する。 [^mydestination5]
この SMTP サーバーが受信するドメイン名。 [^mydestination8]
`$local_recipient_maps` にリストアップされていない受信者宛のメールを拒否する。 [^mydestination2] [^mydestination3]
デフォルト値は `$myhostname, localhost.$mydomain, localhost` になっており、メール配送ループを避けるために `$mydomain` を含める必要がある。 [^mydestination4] [^mydestination6] [^mydestination7]

[^mydestination]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination">$local_transport メール配送 transport を使って配送されるドメインのリスト。</q><cite>[Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#mydestination) - <i>www.postfix-jp.info</i></cite>

[^mydestination2]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination">SMTPサーバは受信者アドレスを `$local_recipient_maps` で確認し、存在しない受信者を拒否します。</q><cite>[Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#mydestination) - <i>www.postfix-jp.info</i></cite>

[^mydestination3]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination">デフォルトでは、Postfix SMTPサーバは `local_recipient_maps` パラメータにリストアップされていない受信者宛のメールを拒否します。</q><cite>[Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#mydestination) - <i>www.postfix-jp.info</i></cite>

[^mydestination4]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination">デフォルトの `mydestination` 値はローカルマシンの名前だけを指定しています。メールドメインゲートウェイ上では、`$mydomain` も含むべきでしょう。</q><cite>[Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#mydestination) - <i>www.postfix-jp.info</i></cite>

[^mydestination5]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination">`mydestination` パラメータには、 このマシンが他のマシンに転送せずにローカルに配送するドメインを指定します。 デフォルトではマシン自身に対するメールを受け取ります。</q><cite>[Postfix 基本設定](http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination) - <i>www.postfix-jp.info</i></cite>

[^mydestination6]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination">マシンがドメイン全体に対するメールサーバの場合、 `$mydomain` もリストアップしなければいけません。</q><cite>[Postfix 基本設定](http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination) - <i>www.postfix-jp.info</i></cite>

[^mydestination7]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination">注意: メール配送ループを避けるため、`$myhostname` や `localhost.$mydomain` を含む、このマシンの 全てのホスト名をリストアップしなければいけません。</q><cite>[Postfix 基本設定](http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination) - <i>www.postfix-jp.info</i></cite>

[^mydestination8]: <q cite="https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html">この SMTP サーバーが受信するドメイン名をリストします。</q><cite>[基本的な SMTP サーバーの設定](https://web.archive.org/web/20180115190219/https://www.turbolinux.co.jp/products/server/11s/user_guide/postfixconf.html) - <i>www.turbolinux.co.jp</i></cite>

### home_mailbox
```
home_mailbox = Maildir/
```

`home_mailbox` はメールボックスファイルの local(8) ユーザーのホームディレクトリからの相対パス名。 [^home_mailbox]
デフォルト値は空で、mailbox 形式で `/var/spool/mail/<username>` がデフォルトメールボックスファイルになる。
なお、少なくとも CentOS 7 では `/var/mail` は `/var/spool/mail` にシンボリックリンクが張られている。

`Maildir/` を指定すると qmail-style delivery になり、デフォルトと異なりメールごとにファイルが生成される。
qmail-style delivery の方が新しい方式であり、管理上こちらに変更するのが望ましい。

[^home_mailbox]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#mydestination">オプションのメールボックスファイルの local(8) ユーザのホームディレクトリからの相対パス名。</q><cite>[Postfix設定パラメータ](http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#mydestination) - <i>www.postfix-jp.info</i></cite>

### smtp_tls_CAfile
`smtp_tls_CAfile` = `/etc/pki/tls/cert.pem`

### smtp_tls_security_level
`smtp_tls_security_level` = `may`

### smtp_tls_loglevel
`smtp_tls_loglevel` = `1`


## メールアドレスの作成
```bash
useradd test --shell /sbin/nologin --password $(openssl passwd -1 P@ssw0rd) --comment 'mail user'
```
`useradd` コマンドでユーザーを作成すればメールが受信可能になる。すなわちメールアドレスが作成される。

前述の例では `test@example.jp` が受信可能となる。

`--shell` または `-s` オプションで `/sbin/nologin` シェルを指定するとユーザーはシェルにログインできなくなる。 [^useradd-shell]

`--password` または `-p` オプションで、暗号化されたパスワードを指定すると対話式でパスワードを指定する必要がなくなる。プロセスや履歴で参照できるので注意。 [^useradd-password] [^useradd-password2]

`/etc/skel/Maildir/{new,cur,tmp}` ディレクトリの作成を指示する記事が散見されるが、メール受信時にユーザーディレクトリ配下に自動的に作成されるので一切不要。

[^useradd-shell]: <q cite="https://linux.die.net/man/8/useradd">**`-s`**, **`--shell`** *`SHELL`* The name of the user's login shell.</q><cite>[useradd(8) - Linux man page](https://linux.die.net/man/8/useradd) - <i>linux.die.net</i></cite>

[^useradd-password]: <q cite="https://linux.die.net/man/8/useradd">**`-p`**, **`--password`** *`PASSWORD`* The encrypted password, as returned by crypt(3).</q><cite>[useradd(8) - Linux man page](https://linux.die.net/man/8/useradd) - <i>linux.die.net</i></cite>

[^useradd-password2]: <q cite="https://linux.die.net/man/8/useradd">**Note:** This option is not recommended because the password (or encrypted password) will be visible by users listing the processes.</q><cite>[useradd(8) - Linux man page](https://linux.die.net/man/8/useradd) - <i>linux.die.net</i></cite>

## SMTP サーバー接続確認
```bash
curl --verbose telnet://mail.example.jp:25
```
```
QUIT
```
`telnet` コマンドは標準インストールされていないので、代替として `curl` コマンドを使用する。 [^telnet] [^telnet2] [^curl]

`--verbose` または `-v` オプションを指定すると、行頭に `*` が付いた補足情報が出力される。 [^curl-v]

[^telnet]: <q cite="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/5.9_technical_notes/telnet">Telnet is a popular protocol for logging in to remote systems over the Internet. The telnet service is disabled by default.</q><cite>[4.186. telnet Red Hat Enterprise Linux 5 | Red Hat Customer Portal](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/5.9_technical_notes/telnet) - <i>access.redhat.com</i></cite>

[^telnet2]: <q cite="https://access.redhat.com/ja/solutions/267353">Telnet を使用すると、パスワードはプレーンテキストで送信されます。そのためデフォルトでは root ユーザーが Telnet を使用して接続することは許可されません。</q><cite>[Telnet サービスを有効にする - Red Hat Customer Portal](https://access.redhat.com/ja/solutions/267353) - <i>access.redhat.com</i></cite>

[^curl]: <q cite="https://curl.se/docs/manpage.html">curl is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP).</q><cite>[curl - How To Use](https://curl.se/docs/manpage.html) - <i>curl.se</i></cite>

[^curl-v]: <q cite="https://curl.se/docs/manpage.html">Makes curl verbose during the operation. Useful for debugging and seeing what's going on "under the hood". A line starting with '`>`' means "header data" sent by curl, '`<`' means "header data" received by curl that is hidden in normal cases, and a line starting with '`*`' means additional info provided by curl.</q><cite>[curl - How To Use](https://curl.se/docs/manpage.html) - <i>curl.se</i></cite>

## メール送信テスト
```bash
echo "test mail" | sendmail -bv test@example.jp && tailf /var/log/maillog
cat /home/test/Maildir/new/*
```
メール送信には Postfix に含まれる `sendmail` コマンドが利用できる。 [^sendmail]
`-bv` オプションはメッセージを送信せずに受信者アドレスを検証した後でレポートを出力する。 [^sendmail-bv]
ログのフォローは <kbd>Ctrl</kbd> + <kbd>c</kbd> で中断できる。

[^sendmail]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/sendmail.1.html">Postfix sendmail(1) コマンドは Postfix に Sendmail 互換インターフェースを提供します。</q><cite>[Postfix manual - sendmail(1)](http://www.postfix-jp.info/trans-2.3/jhtml/sendmail.1.html) - <i>www.postfix-jp.info</i></cite>

[^sendmail-bv]: <q cite="http://www.postfix-jp.info/trans-2.3/jhtml/sendmail.1.html">**`-bv`**    メッセージを集めたり配送しません。代わりに受信者アドレスを検証した後でレポートをEメールで送ります。これはアドレス書き換えやルーティング設定のテストに便利です。</q><cite>[Postfix manual - sendmail(1)](http://www.postfix-jp.info/trans-2.3/jhtml/sendmail.1.html) - <i>www.postfix-jp.info</i></cite>




http://d.hatena.ne.jp/heihoo/20101208/p1
https://s.webry.info/sp/vogel.at.webry.info/201307/article_8.html
https://hacknote.jp/archives/26115/
http://next.matrix.jp/20130710.html
https://oxynotes.com/?p=4646
https://www.qoosky.io/techs/b2e869356c