Linuxで一番シンプルにメールを送受信する(postfix on Ubuntu)

認証とかDNSサーバとかは考えずに、ただただLinux(CLI)でメールを送受信してみたい、という簡単手順

全体概要は以下の通り
Virtualbox上にVagrantを使ってUbuntu14(14.04.5 LTS)サーバを二つたて、相互にメールを送受信する
(VMは必ずしもVagrantで作らなくても良い)

VMの設定

送信側も受信側も同じ設定だが、わかりやすいように送信側を「smtpSv」、受信側を「smtpCt」というVM名とする
以下手順をそれぞれのVMに対して設定する

(下準備)VagrantでVM作成

Vagrantfileの中身は以下の通り
※”smtpSv”はサーバによって名前を変える

% cat Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.define "smtpSv" do |server|
    server.vm.network "private_network", ip: "192.168.33.100"
  end
end

VM起動

% vagrant up

VMへログイン

% vagrant ssh

$ sudo su
#

hostnameファイルとhostsファイル編集

ホスト名を設定
※「smtpSv.example.com」はサーバによって名前を変える

# vim /etc/hostname
# cat /etc/hostname
smtpSv.example.com
#

今回はDNSサーバを使わずにローカルのhostsファイルを見てメールを送る前提なのでhostsファイルに直接記載設定する

# vim /etc/hosts
# cat /etc/hosts
127.0.0.1 localhost
192.168.33.100 smtpSv
192.168.33.100 smtpSv.example.com
192.168.33.101 smtpCt
192.168.33.101 smtpCt.example.com

設定反映のためにリブートする

# reboot

再びログイン

% vagrant ssh
$ sudo su
#

postfixのインストールと設定

postfixをインストール

# apt-get install -y postfix

途中で「Please select the mail server configuration type that best meets your needs.」と出てきたら、今回は一番シンプルに行くので「No configuration」を選択

設定ファイルを適切な場所に持ってくる

# cp /usr/lib/postfix/main.cf /etc/postfix/main.cf

中身を編集
※「myhostname = smtpSv.example.com」はサーバによって名前を変える
「smtp_host_lookup = native」は、DNSではなくhostsファイルを見に行ってね(そこになければDNS)という意味

# vim /etc/postfix/main.cf
# diff /usr/lib/postfix/main.cf /etc/postfix/main.cf
59c59
< #mail_owner = postfix
---
> mail_owner = postfix
76c76
< #myhostname = virtual.domain.tld
---
> myhostname = smtpSv.example.com
83c83
< #mydomain = domain.tld
---
> mydomain = example.com
104c104
< #myorigin = $mydomain
---
> myorigin = $mydomain
118c118
< #inet_interfaces = all
---
> inet_interfaces = all
166c166
< #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
---
> mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
209c209
< #local_recipient_maps = unix:passwd.byname $alias_maps
---
> local_recipient_maps = unix:passwd.byname $alias_maps
268c268
< mynetworks = 127.0.0.0/8
---
> mynetworks = 127.0.0.0/8, 192.168.33.0/24
388c388
< #alias_maps = hash:/etc/aliases
---
> alias_maps = hash:/etc/aliases
399c399
< #alias_database = hash:/etc/aliases
---
> alias_database = hash:/etc/aliases
421c421
< #home_mailbox = Maildir/
---
> home_mailbox = Maildir/
557c557,558
< smtpd_banner = $myhostname ESMTP $mail_name (@@DISTRO@@)
---
> #smtpd_banner = $myhostname ESMTP $mail_name (@@DISTRO@@)
> smtpd_banner = $myhostname ESMTP
631c632
< sendmail_path =
---
> sendmail_path = /usr/sbin/postfix
636c637
< newaliases_path =
---
> newaliases_path = /usr/bin/newaliases
641c642
< mailq_path =
---
> mailq_path = /usr/bin/mailq
647c648
< setgid_group =
---
> setgid_group = postdrop
651c652
< html_directory =
---
> #html_directory =
655c656
< manpage_directory =
---
> #manpage_directory =
660c661
< sample_directory =
---
> #sample_directory =
664c665
< readme_directory =
---
> #readme_directory =
665a667,668
>
> smtp_host_lookup = native

設定を反映させて完了

# newaliases
# /etc/init.d/postfix restart
 * Stopping Postfix Mail Transport Agent postfix                                                               [ OK ]
 * Starting Postfix Mail Transport Agent postfix                                                               [ OK ]

もう一つのサーバについても同様に設定をする

動作確認

設定が完了したので動作確認

送信側のVMでメールを送信する
最後に「.」とEnterを押せばメールが送信される
(/var/log/mail.logや/var/log/syslogにログは出力される)
※今回は「smtpCt」サーバ、「example.com」ドメインの、「vagrant」というユーザーあてに送信。環境によって適宜変更ください)

※送信側のVM(smtpSv)で操作

# sendmail vagrant@smtpCt.example.com
Subject:Testmail
hogehoge
.

受信側のサーバでメールが受信できていることを確認

先ほど宛先に指定したユーザーのホームディレクトリ(/home/vagrant)に移動すると
Maildir/new/配下に新しくファイルができているので中身を確認する
※ファイル名は状況によって異なります
※受信側のVM(smtpCt)で操作

# cat Maildir/new/1589606349.V801I400c8M854242.smtpCt.example.com
Return-Path: <root@example.com>
X-Original-To: vagrant@smtpCt.example.com
Delivered-To: vagrant@smtpCt.example.com
Received: from smtpSv.example.com (smtpSv [192.168.33.100])
	by smtpCt.example.com (Postfix) with ESMTP id CF845400C4
	for <vagrant@smtpCt.example.com>; Sat, 16 May 2020 05:19:09 +0000 (UTC)
Received: by smtpSv.example.com (Postfix, from userid 0)
	id 62381400C4; Sat, 16 May 2020 05:19:09 +0000 (UTC)
Subject:Testmail
Message-Id: <20200516051909.62381400C4@smtpSv.example.com>
Date: Sat, 16 May 2020 05:18:55 +0000 (UTC)
From: root@example.com (root)

hogehoge

以上。