この記事ではPostfixでSMTPサーバを立ち上げて、メール送信する方法について記載します。Gmailにメール送信する方法も記載します。
Table of Contents
1 ローカルマシンや所属ネットワーク内でメール送信する
- ローカルマシンのみでメール送信する場合は、myhostnameをlocalhostに、mydomainをlocaldomainに設定します。
- 所属するネットワークドメインでメール送信する場合はmyhostnameをホスト名に、mydomainをドメイン名に設定します。この場合はDNSサーバを建てたり複数のマシンで共通の/etc/hostsを設定する必要があります。Postfixの設定は送信側と受信側で必要です。
以下のスクリプトを実行するとmyhostnameをlocalhostに、mydomainをlocaldomainに設定します。
#!/bin/sh set -e fedora_install_postfix() { sudo dnf install -y postfix # shellcheck disable=SC2016 cat <<EOF | sudo tee /etc/postfix/main.cf myhostname = ${1} mydomain = ${2} myorigin = \$myhostname.\$mydomain mydestination = localhost, localhost.\$mydomain, \$myhostname, \$mydomain, \$myorigin compatibility_level = 2 queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix inet_interfaces = all local_recipient_maps = unix:passwd.byname \$alias_maps unknown_local_recipient_reject_code = 550 mynetworks_style = subnet mynetworks = 127.0.0.0/8 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases smtpd_banner = \$myhostname ESMTP (\$mail_version) debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd \$daemon_directory/\$process_name \$process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop inet_protocols = ipv4 EOF sudo newaliases sudo systemctl restart postfix sudo firewall-cmd --add-service=smtp --permanent sudo firewall-cmd --reload sudo dnf install -y mutt } fedora_main() { fedora_install_postfix localhost localdomain # localhost only. # fedora_install_postfix ${YOUR_HOSTNAME} ${YOUR_DOMAIN} # your network. } fedora_main
2 Gmailにメール送信する
myhostnameとmydomainはローカルでも所属するネットワークドメインのどちらでも構いません。
Postfixに以下の設定を追加します。
$ cat <<EOF | sudo tee -a /etc/postfix/main.cf relayhost = [smtp.gmail.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_sasl_mechanism_filter = plain smtp_use_tls = yes EOF
/etc/postfix/sasl_passwdを作成します。GMAIL_ADDRにGmailのメールアドレスを(your@gmail.com)、GMAIL_PASSWDにGmailのパスワードを設定してください。
$ echo "[smtp.gmail.com]:587 ${GMAIL_ADDR}:${GMAIL_PASSWD}" | \ sudo tee /etc/postfix/sasl_passwd $ sudo chmod 600 /etc/postfix/sasl_passwd $ sudo postmap hash:/etc/postfix/sasl_passwd
Postfixを再起動します。
$ sudo systemctl restart postfix
このままではGmailの認証でエラーとなります。
postfix/smtp ... SASL authentication failed; server smtp.gmail.com...
2段階認証でアプリケーション用のパスワードを発行するのがより良い方法だとは思いますが、ここでは安全性の低いアプリの許可を有効にします。
https://myaccount.google.com/lesssecureapps
これでもGmailの認証でエラーとなる場合は、Googleアカウントへのアクセスのを許可が必要となるかもしれません。
https://accounts.google.com/DisplayUnlockCaptcha
以上の設定を済ませることで、インターネット側のメールはGmailに送信されます。メールの差出人はGmailのアドレスとなります。
postfix/smtp ... to=<yourgmail@gmail.com>,relay=smtp.gmail.com ...