メール配送の仕組み
電子メールを取り扱うソフトウェアには MTA (Message Transfer Agent) や MDA (Mail Delivery Agent)、MUA (Mail User Agent) がある。
作成されたメールが相手に届くのは以下の流れとなる。
- MUA で作成されたメールは送信用 MTA(1) に送られる
- MTA(1) はメールアドレスから配送先メールサーバを調べ、メールを MTA(2) に配送する
- MTA(2) がメールを受け取ると、ローカル配送プログラムである MDA がメールの宛先となっているユーザーのメールボックスにメールを格納する
- 受取人側は POP サーバや IMAP サーバを経由して、自分のメールボックスからメールを取り出す
ここも参考にしたい。
MTA の起動
以下のように確認することで postfix が起動していることがわかる。
$ sudo netstat -antp | grep 25
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1551/master
tcp6 0 0 ::1:25 :::* LISTEN 1551/master
$ sudo systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2017-10-08 23:06:56 JST; 7 months 27 days ago
Main PID: 1551 (master)
CGroup: /system.slice/postfix.service
├─1551 /usr/libexec/postfix/master -w
├─1553 qmgr -l -t unix -u
└─2313 pickup -l -t unix -u
10月 08 23:06:55 localhost.localdomain systemd[1]: Starting Postfix Mail Transport Agent...
10月 08 23:06:56 localhost.localdomain postfix/master[1551]: daemon started -- version 2.10.1, configuration /etc/postfix
10月 08 23:06:56 localhost.localdomain systemd[1]: Started Postfix Mail Transport Agent.
メールの送信と確認
コマンドラインでメールを送信したり受信メールを確認するには mail コマンドを用いる。
$ mail -s samplemail user@example.com
Hello World.
.
EOT
$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/yuki": 2 messages
> 1 root Fri Sep 29 04:03 22/913 "testmail"
2 root Fri Sep 29 04:04 22/925 "testmail"
& 1
Message 1:
From root@server01.internal.example.com Fri Sep 29 04:03:49 2017
Return-Path: <root@server01.internal.example.com>
X-Original-To: yuki@internal.example.com
Delivered-To: yuki@internal.example.com
Date: Fri, 29 Sep 2017 04:03:49 +0900
To: yuki@internal.example.com
Subject: testmail
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@server01.internal.example.com (root)
Status: RO
a;lsdkjfa
メールの転送とエイリアス
ある宛先に届いたメールを別のメールアドレスで受け取ることができるようにするには /etc/aliases でエイリアスを設定する方法と、各ユーザーのホームディレクトリに .forward ファイルを用意する方法がある。
/etc/aliases
/etc/aliases を利用するとメールアドレスの別名を設定できる。例えば root 宛に届いたメールをユーザー admin と lpic でも受けられるようにする、など。
$ cat /etc/aliases | grep -v ^# | head -10
mailer-daemon: postmaster
postmaster: root
bin: root
daemon: root
adm: root
lp: root
sync: root
shutdown: root
設定を有効にするには newaliase コマンドを用いる。newaliases コマンドは /etc/aliases の設定をもとに MTA が実際に参照するデータベースファイルの /etc/aliases.db を更新する。
.forward
メールを転送するもう一つの方法は .forward ファイルを各ユーザーのホームディレクトリに配置する方法。
このファイルの中に転送先のメールアドレスを記述しておけば良い。
メールキューの操作
送信待ちのメールはメールキューに蓄えられていく。
送信先メールサーバが停止していて送信できないような場合は一旦メールキューに保存される。
また、宛先が DNS で検索できなかった場合なども同様。
メールキューの内容を表示するには mailq コマンドを用いる。
$ mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
457F342A3339 479 Wed Jun 6 16:55:01 yuki@localhost.localdomain
(connect to ALT3.ASPMX.L.GOOGLE.COM[173.194.219.27]:25: No route to host)
yuki@cns.s.u-tokyo.ac.jp
-- 0 Kbytes in 1 Request.