[アドカレ2025] Ansibleでゼロから作るメールサーバー構築自動化

おはよう世界。どうも若林です。

なんだかんだもう12月、あと少しでクリスマスですね。
毎年ディズニーランドでクリスマス仕様のデコレーションがされていて、楽しそうですね。
しかし友達が少なく、居てもクリスマスは全員予定があったりデートしたりで誰とも予定が合わず、一人で行く勇気もありませんので毎年行けてないんですよね。。。そもそもクリスマスって平日ですので私はその日仕事中でした。しょぼん

この孤独感、つまり「チキンが冷めちゃった」ってことですね。(元ネタあまり知りませんが・・・)

さて、今回はメールサーバーを自動で構築してみました。
当初メールの認証をOpenDKIMにしようと思ったのですが、、調べたらOPENDKIMがAlmaLinuxの9系だと対応してないらしい(8系だったら対応してるみたい)で仕方なく別のDKIMにします。
一応使おうと思えば使えるみたいなのですが、やり方が少し特殊で変なエラーになりたくないのとOpenDKIMじゃなくても良いので今回はRspamdの方を使います。

それと今回スクリプトの記述内容は殆どコピペで動くようになっておりますが、一部ご自身の環境に合わせて変更する箇所もございます。
見出し部分に「内容変更アリ」と記載しますので、見逃さないようにしていただければと思います。

前準備

今回メールサーバーを立てるにあたって以下のものが必要になります。

  • AWSアカウント
  • EC2インスタンス一台
  • EC2の25番ポートの制限解除申請(ローカル運用の場合は不要)
  • Ansibleサーバー
  • あれば所有している独自ドメイン(今回用意できませんでした・・・)

Ansibleサーバーの構築方法は前回私が投稿したブログにありますのでそちらをご覧ください。(ついでにEC2サーバーを作成する方法のリンクもございます。)
EC2でAnsibleサーバー構築~ミドルウェア導入までやってみた

独自ドメインは外部にメール送信する場合は必要になりますのでお持ちでしたら用意します。
Route 53に独自ドメインを登録(AWS以外で取得された場合は移管してください)するとホストゾーンが作成されます。
今回サーバーから外部ドメインにもメール送信するため、EC2の25番ポートの制限を解除する申請もします。不要でしたらこの工程は飛ばして大丈夫です。
25番ポート解除申請フォームはこちら

ここからはEC2のターゲットサーバーとRoute 53にホストゾーンを作成後、ポート25の制限解除完了の前提でお話しします。
本当は独自ドメインを取得して外部ドメインにも送信しようと思ったのですが、独自ドメインが用意できませんでした・・・。

ですので、今回はローカルのみ(+Gmailに送信)でテストをしたいと思います。

一応Ansibleの内容的には外部でも送信できるように組んでありますので、お持ちの方はそちらに記述をお願い致します。(ある想定で進めさせていただきます)

Route 53のホストゾーン・逆引きDNS

まずはRoute 53の中にある既に登録してあるホストゾーンを選択して、レコードの設定を進めていきます。
ドメインをお持ちでない方は、取得予定(もしくは取得してから)のドメインをホストゾーンとして登録していただければと思います。
Route53でドメインを取得されるとホストゾーンが自動生成されますので重複にはご注意を。
今回後述しますが、ユーザー名はmailtestとしますので、それに合わせた設定を行います。

少しわかりづらいと思いますが、ほとんどがドメイン名ですので隠れております。

こちらで以上となります。
DKIMの公開鍵は後程書きますので一旦スルーで大丈夫です。

次はElasticIPに逆引きDNSレコードを追加します。
EC2に割り当てているElasticIPを開いていただくと逆引きDNSレコードというものがあると思います。

こちらを更新していきます。
アクション→逆引きDNSの更新を押してください。
こちらはRoute53のホストゾーンと同じ名称で大丈夫です。
逆引きDNSと正引きDNSを一致させるためです。

ロールディレクトリの作成

次はロールディレクトリを作っていきます。
今回のディレクトリ構成は以下のようになっております。

黒いファイルがディレクトリになっております。
本当はmailディレクトリ配下(templates・vars・tasks)の中にもいろいろ入っているのですが、ごちゃごちゃになってしまったため、一旦ここまで書きました。

構成図を確認したところで、ここからは実際にAnsibleサーバー内にログインして作業していきます。
今回Ansible公式が出しているロールの雛型作成コマンドを叩きます。

ansible-galaxy init mail

今回ロール名は「mail」とさせていただきました。
こんなコマンドがあったんですね。感動しました。
使わないディレクトリも生成されますが、特に影響はないので削除でも放置でも問題ございません

次は/root/ansible内のディレクトリを作成していきます。
以下のコマンドを叩きます。

mkdir -p ~/ansible/{inventory,playbooks}

以前のブログでLAMP環境まで作成された方は既にあると思います。まだ作成されてない方は今回新たに作ってください。

Ansible動作環境構築

では作成したファイルの中にいろいろ書いていきます。

殆どコピペでOKですが、一部ご自身の環境に合わせて修正する箇所もございますのでお気をつけて進めてください。

inventoryを作成(※内容変更アリ)

まずはinventoryを作成していきます。

~/ansible/inventory/hosts.ini

こちらをvimコマンドなどで開きます。
開いたら以下を記述してください。

[mailservers]
mail1 ansible_host=***.***.***.*** ansible_user=[ログインするユーザー名] ansible_ssh_private_key_file=/root/.ssh/[キーペア名] ansible_become=true

こちらの「...」の部分は、ご自身のターゲットサーバーのIPアドレスを入力してください。
AnsibleサーバーのIPアドレスではございませんので注意してください。
ansible_user=[ログインするユーザー名]の部分もご自身のユーザー名を入力します。私は今回AlmaLinuxですので「ec2-user」でログインします。
最後にSSH接続するための鍵ですが、AWSで作成した場合、ターゲットサーバーでログインするキーペア名を入力してください。
もしまだAnsibleサーバー内に公開鍵を記述してなければ、AnsibleがSSH接続するユーザーにターゲットサーバーの公開鍵を記入してください。
今回私の場合はec2-userでSSH接続しますので、そのユーザーディレクトリ内に公開鍵を置いています。

Playbookを作成

次はPlaybookを作成していきます。
これは今回メールサーバーを構築するために必要不可欠な部分です。

/root/ansible/playbooks/mail-server.yml

- hosts: mailservers
  become: true
  roles:
    - mail

短いですね。
これは膨大な量のYAMLファイルをロールとしてまとめているからです。
ロールに分割することで、次回別の事をAnsibleで実行するとき、Playbookの中にあるrolesの部分を書き換えるだけで済みます。

varsディレクトリを作成(※内容変更アリ)

次はロール内にあるそれぞれのディレクトリ配下のファイルを書いていきます。
全て解説するととてつもない量になりますので、軽く何をするために必要なのかだけお伝えしていきます。
まずはvarsディレクトリから作成していきます。

/root/ansible/roles/mail/vars/main.yml

---
hostname: "mail.example.com"
domain: "example.com"
dkim_selector: "mail"

mail_users:
  - name: mailtest

maildir_sub:
  - cur
  - new
  - tmp
  - .Drafts
  - .Sent
  - .Trash
  - .Archive

ここではメールサーバーで必要な情報を入力していきます。

hostname: "mail.example.com"
こちらは今回作成するメールサーバーのホストネームを入力していきます。

domain: "example.com"
こちらはお持ちの独自ドメインを入力していきます。

mail_users:
こちらはメールユーザー名を指定します。何でもいいですが、今回はmailtestとします。

maildir_sub:
こちらはMaildir内のファイルを作成します。要はメールの受信ボックスです。

tasksディレクトリ

次はtasksディレクトリ内の設定ファイルを作成していきます。
Ansibleを動かす際、ここは必須ですので、間違えないように気を付けてください。

/root/ansible/roles/mail/tasks/main.yml

---
- include_tasks: install.yml
- include_tasks: user.yml
- include_tasks: dkim.yml
- include_tasks: postfix.yml
- include_tasks: dovecot.yml
- include_tasks: certbot.yml
- import_tasks: firewalld.yml

こちらは実行するタスクを書いております。
一つ注意ですが、実行する際の順番がおかしいとエラーが起こることがございます。
この順番にしておけば問題ないとは思います。

/root/ansible/roles/mail/task/certbot_dovecot.yml

---
- name: Install Certbot
  package:
    name: certbot
    state: present
  become: true

- name: Obtain Let's Encrypt certificate for mail server
  command: >
    certbot certonly --non-interactive --agree-tos --email admin@{{ mydomain }}
    --standalone -d {{ hostname }}
  args:
    creates: "/etc/letsencrypt/live/{{ hostname }}/fullchain.pem"
  become: true

- name: Ensure Dovecot SSL directory exists
  file:
    path: "/etc/dovecot/conf.d"
    state: directory
    mode: '0755'
  become: true

- name: Deploy Dovecot SSL config
  template:
    src: 10-ssl.conf.j2
    dest: /etc/dovecot/conf.d/10-ssl.conf
    mode: '0644'
  notify:
    - restart dovecot
  become: true

- name: Ensure Dovecot is enabled and started
  service:
    name: dovecot
    state: started
    enabled: true
  become: true

このタスクファイルは、DovecotのTLS設定を自動化するためのものです。
Certbotを使用してLet's Encryptの証明書を取得し、その証明書を利用するようにDovecotの設定をテンプレートから生成して配置します。

/root/ansible/roles/mail/tasks/dkim.yml

---
- name: Ensure DKIM directory exists
  file:
    path: /var/lib/rspamd/dkim
    state: directory
    owner: _rspamd
    group: _rspamd
    mode: '0750'
  become: true

- name: Generate DKIM private key if not exists
  command: >
    rspamadm dkim_keygen
    -d {{ domain }}
    -s {{ dkim_selector }}
    -b 2048
    -k /var/lib/rspamd/dkim/{{ dkim_selector }}.key
  args:
    creates: "/var/lib/rspamd/dkim/{{ dkim_selector }}.key"
  become: true
  become_user: _rspamd

- name: Set DKIM private key permissions
  file:
    path: "/var/lib/rspamd/dkim/{{ dkim_selector }}.key"
    owner: _rspamd
    group: _rspamd
    mode: '0600'
  become: true

- name: Generate DKIM public key for DNS (Rspamd 3.x)
  command: >
    rspamadm dkim_keygen
    -d {{ domain }}
    -s {{ dkim_selector }}
    -k /var/lib/rspamd/dkim/{{ dkim_selector }}.key
    -f
  register: dkim_pub_raw
  become: true
  become_user: _rspamd

- name: Save DKIM public key to file
  copy:
    content: "{{ dkim_pub_raw.stdout }}"
    dest: "/var/lib/rspamd/dkim/{{ dkim_selector }}.pub"
    owner: _rspamd
    group: _rspamd
    mode: '0644'
  become: true

- name: Deploy dkim_signing.conf
  template:
    src: dkim_signing.conf.j2
    dest: /etc/rspamd/local.d/dkim_signing.conf
    mode: '0644'
  notify: restart rspamd
  become: true

- name: Deploy milter_headers.conf
  template:
    src: milter_headers.conf.j2
    dest: /etc/rspamd/local.d/milter_headers.conf
    mode: '0644'
  notify: restart rspamd
  become: true

- name: Show DKIM public key for DNS
  debug:
    msg: "{{ dkim_pub_raw.stdout | default('DKIM public key not found yet') }}"

このタスクでは、Rspamdを使ってDKIM の秘密鍵と公開鍵を自動生成し、DKIM署名を行うための設定ファイルをAnsibleで自動配置しています。

本来ここをOpenDKIMとして設定する予定でしたが、AlmaLinuxだとちょっと大変だったのでRspamdを採用しております。

/root/ansible/roles/mail/tasks/install.yml

---
- name: Enable EPEL repository
  dnf:
    name: epel-release
    state: present

- name: Install base packages
  dnf:
    name:
      - postfix
      - dovecot
      - redis
      - certbot
      - s-nail
    state: present

- name: Add Rspamd official repository
  yum_repository:
    name: rspamd
    description: Rspamd Stable
    baseurl: https://rspamd.com/rpm-stable/centos-9/x86_64/
    gpgcheck: no
    enabled: yes

- name: Install Rspamd
  dnf:
    name: rspamd
    state: present

- name: Enable and start Redis
  systemd:
    name: redis
    state: started
    enabled: yes

- name: Enable and start Rspamd
  systemd:
    name: rspamd
    state: started
    enabled: yes

ここでメールサーバーに必要なミドルウェアやパッケージをインストールします。
EPELとかがありますので、これはmain.ymlの順番的には一番上がよいと思います。

/root/ansible/roles/mail/tasks/user.yml

---
- name: Create mail users
  loop: "{{ mail_users }}"
  user:
    name: "{{ item.name }}"
    shell: "{{ item.shell | default('/sbin/nologin') }}"
    create_home: yes

- name: Ensure Maildir base exists
  loop: "{{ mail_users }}"
  file:
    path: "/home/{{ item.name }}/Maildir"
    state: directory
    owner: "{{ item.name }}"
    group: "{{ item.name }}"
    mode: "0700"

- name: Create Maildir subfolders
  loop: "{{ mail_users | product(maildir_sub) | list }}"
  loop_control:
    loop_var: pair
  file:
    path: "/home/{{ pair.0.name }}/Maildir/{{ pair.1 }}"
    state: directory
    owner: "{{ pair.0.name }}"
    group: "{{ pair.0.name }}"
    mode: "0700"

- name: Fix Maildir permissions recursively
  loop: "{{ mail_users }}"
  file:
    path: "/home/{{ item.name }}/Maildir"
    owner: "{{ item.name }}"
    group: "{{ item.name }}"
    mode: "0700"
    recurse: yes

このuser.ymlは、メールサーバーのユーザー環境をAnsibleで自動構築するためのタスクです。
PostfixとDovecotを組み合わせてメールサーバーを運用する場合、OSユーザーの作成やMaildirの準備、フォルダ権限の調整は非常に重要ですが、手作業で行うとミスが起きやすく、後から「メールが届かない」「ログインできない」といった問題の原因になりがちです。
そこで、このタスクでMaildirの初期構築から権限周りの設定まで自動化して構築します。

/root/ansible/roles/mail/tasks/postfix.yml

---
- name: Deploy Postfix main.cf
  template:
    src: main.cf.j2
    dest: /etc/postfix/main.cf
    owner: root
    group: root
    mode: '0644'
  notify: restart postfix
  become: true

- name: Configure Dovecot auth socket for Postfix
  blockinfile:
    path: /etc/dovecot/conf.d/10-master.conf
    marker: "# {mark} ANSIBLE MANAGED: Postfix SASL"
    block: |
      service auth {
        unix_listener /var/spool/postfix/private/auth {
          mode = 0660
          user = postfix
          group = postfix
        }
      }
  notify:
    - restart dovecot
    - restart postfix
  become: true

postfix.ymlでは、Postfixのメイン設定をテンプレートとして配置し、SMTP AUTHの認証処理をDovecotに委譲するための連携設定を行っています。

/root/ansible/roles/mail/tasks/certbot.yml

---
- name: Install Certbot
  package:
    name: certbot
    state: present
  become: true

- name: Obtain Let's Encrypt certificate for mail server
  command: >
    certbot certonly --non-interactive --agree-tos
    --email admin@{{ domain }}
    --standalone -d {{ hostname }}
  args:
    creates: "/etc/letsencrypt/live/{{ hostname }}/fullchain.pem"
  become: true

- name: Ensure Dovecot SSL directory exists
  file:
    path: "/etc/dovecot/conf.d"
    state: directory
    mode: '0755'
  become: true

- name: Deploy Dovecot SSL config
  template:
    src: 10-ssl.conf.j2
    dest: /etc/dovecot/conf.d/10-ssl.conf
    mode: '0644'
  notify:
    - restart dovecot
  become: true

- name: Ensure Dovecot is enabled and started
  service:
    name: dovecot
    state: started
    enabled: true
  become: true

こちらはLet’s Encryptに対して証明書の発行を自動的に要求しています。
TLS証明書を自動で取得して、Dovecotに適用してくれます。

/root/ansible/roles/mail/tasks/firewalld.yml

---
- name: Ensure firewalld is installed
  dnf:
    name: firewalld
    state: present

- name: Ensure firewalld is started and enabled
  systemd:
    name: firewalld
    state: started
    enabled: yes

- name: Open SMTP ports in firewalld
  firewalld:
    port: "{{ item }}/tcp"
    permanent: true
    state: enabled
    immediate: yes
  loop:
    - 25
    - 465
    - 587
    - 143
    - 993
    - 110
    - 995

- name: Reload firewalld to apply changes
  command: firewall-cmd --reload

- name: Enable Submission (587) and SMTPS (465) in Postfix master.cf
  blockinfile:
    path: /etc/postfix/master.cf
    marker: "# {mark} ANSIBLE MANAGED MAIL PORTS"
    block: |
      submission inet n       -       n       -       -       smtpd
        -o syslog_name=postfix/submission
        -o smtpd_tls_security_level=encrypt
        -o smtpd_sasl_auth_enable=yes

      smtps     inet  n       -       n       -       -       smtpd
        -o syslog_name=postfix/smtps
        -o smtpd_tls_wrappermode=yes
        -o smtpd_sasl_auth_enable=yes
  notify:
    - restart postfix

- name: Ensure Postfix is enabled and started
  systemd:
    name: postfix
    state: started
    enabled: yes

メール送信に必要なポート開放とSMTPサービスの待ち受け設定を同時に自動化しています。
Submission(587)およびSMTPS(465)ではTLSとSMTP AUTHを必須とし、セキュアなメール送信環境を実現しています。
IMAP(143)、IMAPS(993)、POP3(110)、POP3S(995)はGmailやThanderbirdでメール受信する場合開放する必要があります。ローカルのみの運用の場合は外しても大丈夫です。

以上でtasksディレクトリは終了です。

templatesディレクトリの作成

次はtemplatesディレクトリの中身を作成していきます。

/root/ansible/roles/mail/templates/main.cf.j2

myhostname = {{ hostname }}
mydomain = {{ domain }}
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:11332
non_smtpd_milters = inet:localhost:11332
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/letsencrypt/live/{{ hostname }}/fullchain.pem
smtpd_tls_key_file  = /etc/letsencrypt/live/{{ hostname }}/privkey.pem
smtpd_tls_auth_only = yes
smtpd_sasl_auth_enable = yes
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_recipient_restrictions = reject_unauth_destination

templatesディレクトリには、PostfixやDovecotなどの設定ファイルをJinja2テンプレートとして配置しています。
Ansibleの変数を利用することで、環境ごとに異なるホスト名やドメインを柔軟に反映でき、再現性の高いメールサーバー構築を実現しています。

/root/ansible/roles/mail/templates/10-ssl.conf.j2

ssl = required
ssl_cert = </etc/letsencrypt/live/{{ hostname }}/fullchain.pem
ssl_key  = </etc/letsencrypt/live/{{ hostname }}/privkey.pem
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes

こちらはセキュリティ的に非常に重要なテンプレートです。
DovecotのTLS設定では、暗号化通信を必須とし、Let’s Encryptの証明書を用いて安全なIMAP/POP3接続を提供しています。

/root/ansible/roles/mail/templates/dkim_signing.conf.j2

path = "/var/lib/rspamd/dkim/{{ dkim_selector }}.key";
selector = "{{ dkim_selector }}";
domain = "{{ domain }}";
allow_envfrom = true;
allow_username_mismatch = true;
sign_local = true;

こちらはDKIM設定用のテンプレートです。
自サーバーから送信されるメールに対してのみ電子署名を付与し、受信側が送信ドメインの正当性と改ざんの有無を検証できるようにしています。

/root/ansible/roles/mail/templates/dovecot.conf.j2

listen = *
protocols = imap pop3 lmtp

mail_location = maildir:~/Maildir

disable_plaintext_auth = yes

auth_mechanisms = plain login

!include conf.d/*.conf

!include_try conf.d/10-ssl.conf

こちらでは、IMAP/POP3/LMTPを有効化し、Maildir形式でユーザーごとにメールを管理しています。また、暗号化されていない認証を禁止することで、セキュアなメールアクセスを実現しています。

/root/ansible/roles/mail/templates/master.cf.j2

smtp      inet  n       -       n       -       -       smtpd
  -o smtpd_milters=inet:localhost:11332

submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_milters=inet:localhost:11332

こちらはPostfixのサービス定義ファイルのテンプレートです。
Postfixのmaster.cf.j2では、25番ポートはメールサーバー間通信用、587番ポートはクライアント送信用としてTLSとSASLを必須化しています。

/root/ansible/roles/mail/templates/milter_headers.conf.j2

se = ["authentication-results"];

これはやらなくてもいい任意のものです。
こちらはRspamdがメールに付与するヘッダを制御し、DKIM、SPF、DMARCの結果をメールヘッダーで確認できるようにするための設定です。

オプション:handlersディレクトリの作成

こちらもやらなくても問題ないものになっております。

/root/ansible/roles/mail/handlers/main.yml

---
- name: restart rspamd
  systemd:
    name: rspamd
    state: restarted

- name: restart postfix
  systemd:
    name: postfix
    state: restarted
    enabled: yes

- name: restart dovecot
  systemd:
    name: dovecot
    state: restarted

こちらを作成することで、設定変更後に必要なサービスの再起動処理をまとめてくれます。
Ansibleを実行する度にターゲットサーバー内で一つ一つにrestartをかけたくない為、私は作成しております。
必須ではございませんが、あると便利ぐらいに思ってください。

以上でAnsibleの設定ファイル内容は終了です。長かったですね・・・。

Ansible実行

さて、いよいよAnsibleを実行してみましょう。
今回playbookの名称がmail-server.ymlですので、以下を叩きます。

ansible-playbook playbooks/mail-server.yml

こちらでAnsibleが実行されます。
結果が出力されますので、少し待ちます。

PLAY [mailservers] ********************************************************************************************************************
・
・
・
中略
・
・
・
PLAY RECAP ****************************************************************************************************************************
mail1                      : ok=44   changed=16   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

特にエラーが無ければfailed=0と表示されるはずです。
途中でエラーが起きてAnsibleが止まったらどこか間違えています。

DKIMの公開鍵の確認

ターゲットサーバー内にログインしていただいたら、まずRspamdで生成したDKIMの公開鍵を確認しに行きます。

cat var/lib/rspamd/dkim/[dkim_selector].pub

今回varsディレクトリ内でdkim_selectorをmailにしましたので、今回の場合はmail.pubですね。
その中にDKIMの公開鍵が入っていますので、残りのRoute53内のDKIMレコードに登録しましょう。

これで全ての作業が終わりました。

メール送信してみた

さていよいよメールの送信をしてみましょう。
同じサーバーのローカル内でメール送信してみました。

echo "本文です" | mail -s "件名です" mailtest

こちらを叩いてみましょう。
本文と件名は何でも良いので適当に入力してます。
送信したら、Ansibleで作成したMaildir内にメールが届いているはずですので確認します。

#メールを確認
ls -l /home/mailtest/Maildir/new/

#メールファイルが入っているはずですので、そちらを開く(ユーザー名を変えたらコピペでOK)
s-nail -f /home/[作成したユーザー名]/Maildir
N  1 root                  2025-12-16 09:45   26/1210  "件名です                   "

#開きたいメールの数字を選択 今回は1
p 1

メールを確認して開いてみると先程送信した件名と本文があるはずです。
AnsibleでS-nailをインストールしてますのでコマンドを叩いていただくと送信されたメールを見ることが出来ます。
ローカルの送受信は完了です。ローカルで送信できていればDNSの設定と相手サーバーの受信許可設定を変更すれば別のEC2サーバーにもメール送信できますので是非お試しください。
条件付きではありますが、アカウントやリージョンが違っても送受信できるみたいです。

最後に25番ポートの制限を解除してたらGmailに送信は出来ますので、それだけ試したいと思います。
Gmailへ送信するために、以下のコマンドを叩いてください。

su -s /bin/bash mailtest -c 'echo "本文です" | mail -s "件名" example@gmail.com

本文と件名は適当に入れてください。
後ろにあるexample@gmail.comは送信先のメールアドレスを入力してください。
ではGmailの受信ボックス(初回送信ですと多分迷惑メール)に入っていると思いますので、確認してみましょう。

お、届いてますね。これで送信は完了しました。

ちなみに余談ですが、ドメインが無い状態でgmailでサーバーにメール送信を行うとこうなります。

「ドメインが無いからメール送信できなかったよ、このドメインで本当に合ってるの?」って言われました。
用意できなかったんだからしょうがないじゃん・・・。

これでメールサーバーのテストは終了となります。お疲れ様でした。

最後に

いかがだったでしょうか。
当初の予定とは大きくずれましたが、最後まで見ていただきありがとうございます。
今回検証できませんでしたが、独自ドメインをお持ちでしたら外部からメールサーバーへ送信したり、Thanderbird等のメールソフトにもログインして使えるようになります。

本当は外部から送信されたメールを受け取ったりAnsibleサーバーからRoute 53のホストゾーンにレコードを登録できるようにして完全にAnsibleのみ(25番解除申請を除く)で外部にもメール送信できるサーバーを作りたかったのですが、時間が無かった&複雑そうだったため、断念しました・・・。

あまり触れませんでしたが、Ansibleでインストールしたパッケージやミドルウェアの設定ファイルも一緒に入っていますのでご自身の環境に合わせて配置を最適化したり内容変更していただければと思います。(ポートの再確認やAnsibleで導入した設定の確認もお忘れなく)

それではまたどこかでお会いしましょう。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA