メール管理

June 06, 2018

メール配送の仕組み

電子メールを取り扱うソフトウェアには MTA (Message Transfer Agent) や MDA (Mail Delivery Agent)、MUA (Mail User Agent) がある。
作成されたメールが相手に届くのは以下の流れとなる。

  1. MUA で作成されたメールは送信用 MTA(1) に送られる
  2. MTA(1) はメールアドレスから配送先メールサーバを調べ、メールを MTA(2) に配送する
  3. MTA(2) がメールを受け取ると、ローカル配送プログラムである MDA がメールの宛先となっているユーザーのメールボックスにメールを格納する
  4. 受取人側は 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.  

 © 2023, Dealing with Ambiguity