ubuntuサーバー で Postfix(SMTPメールサーバー)を設定し、Gmailへメール送信するまで
Postfixを自前のSMTPサーバーとして運用し、GmailなどのSMTPサーバーを使わずにメールを送信する場合、自分のドメインから直接メールを送信するためにいくつかの設定と構成を行う必要があります。以下の手順で、Postfixを自前のSMTPサーバーとして設定し、メールを送信できるようにします。
Postfixのインストールと基本設定
まず、Postfixをインストールし、基本設定を行います。
sudo apt update
sudo apt install postfix libsasl2-modules mailutils
インストール中に「インターネットサイト」を選択し、システムメール名を設定します(例:example.com)。
/etc/postfix/main.cfの編集
次に、/etc/postfix/main.cfを編集して、基本的な設定を行います。
sudo vi /etc/postfix/main.cf
以下のように設定しました。
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
さらに、/etc/mailname には自分のドメイン名を追記します。ドメイン管理のDNSは適宜設定しておきます。
Postfixの再起動
すべての設定が完了したら、Postfixを再起動して設定を反映させます。
sudo systemctl restart postfix
テストメールの送信
自前のPostfixサーバーを使用してテストメールを送信します。
echo "Test email body" | mail -s "Test Email" sender@example.com
これで、自前のPostfixサーバーを使ってメールを送信できるようになります。設定の詳細については、必要に応じて調整してください。
送信元アドレスを明示的に設定
メール送信できたのですが、送信先のアドレスがさくらサーバーのホスト名になっており、設定した独自ドメインが反映されていませんでした。そこで、Postfixが送信するメールの送信元アドレスを明示的に設定します。これを行うには、generic マッピングを使用します。
/etc/postfix/generic を作成または編集
sudo vi /etc/postfix/generic
以下のように設定します:
xxxxxx@xxxxxxxxxxxxx.sakura.ne.jp yourname@yourdomain.com
generic マッピングをPostfixに適用
generic マッピングをPostfixに適用するために、以下の設定を行います。generic マッピングデータベースを作成します。sudo postmap /etc/postfix/generic
smtp_generic_maps = hash:/etc/postfix/generic
設定を反映させるために、Postfixを再起動します。
sudo systemctl restart postfix
これで、Postfixが送信するメールの送信元アドレスが独自ドメインを使用するようになりました。
日本語でメールを送信する
日本語でメールを送信するためには、mailコマンドと適切なエンコーディングを使用する必要があります。以下は日本語のメールを送信するための手順です。
日本語メールの内容をファイルに保存
まず、日本語のメール内容をファイルに保存します。例えば、email.txtというファイルに以下の内容を保存します。
From: sender@example.com
To: 宛先のメールアドレス
Subject: テストメールです
Content-Type: text/plain; charset=UTF-8
これはテストメールです。日本語で送信されています。
sendmailコマンドを使用してメールを送信
sendmailコマンドを使用して、日本語のメールを送信します。sendmail -t < email.txt
暗号化して安全にメールを送信する
Gmailなどへメールを送信した際に「このメールはvs.sakura.ne.jp で暗号化されませんでした」と表示されます。
以下の手順に従って、Postfixで Let's Encrypt の証明書を使用して暗号化メールを送信する設定を行います。
証明書の確認
まず、Let's Encryptの証明書が正しい場所に存在するか確認します。通常、以下のパスに証明書が格納されます。
/etc/letsencrypt/live/your_domain/fullchain.pem
/etc/letsencrypt/live/your_domain/privkey.pem
証明書がなければ適宜、cerbotを使って発行しておきます。
Postfix設定ファイルの編集
次に、/etc/postfix/main.cfを編集して、Let's Encryptの証明書を使用するように設定します。
sudo vi /etc/postfix/main.cf
以下の行を追加または修正します。
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/your_domain/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your_domain/privkey.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_loglevel = 1
# Recommended settings for TLS security
smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtp_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_ciphers=high
smtp_tls_ciphers=high
設定を反映させるためにPostfixを再起動します。
sudo systemctl restart postfix
メール送信後、ログファイルを確認してTLSが使用されていることを確認します。
sudo tail -f /var/log/mail.log