メール配送の仕組み
電子メールを取り扱うソフトウェアには 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.