以前の版
2022-06-18 17:43 時点における版
---
parent: ShellScript
title: gmailを経由してsendmailでメール送信
date: 2018-11-26
tags: ShellScript, メール送信
---
ここでは, `sendmail`コマンドを利用した, メール送信の方法について説明する.
通常, 25番ポートに対するメール送信には制限があるため, gmailを利用して,
サブミッションポートでのメール送信を行った.
===
# 背景と問題
____________________
ubuntuなどのターミナル上でメールを送信する際, よく使うコマンドとして`sendmail`があります.
`sendmail`は, メール転送エージェント(MTA: Mail Transfer Agent)と呼ばれるもので,
ネットワーク上でメールを転送また配送するソフトウェアです^[mta-url-1].
`sendmail`は標準でメールを送信する際, 送信先のメールサーバのポート25へメールを送ります.
ですが, このように直接送信先サーバのポート25に接続することは, 外向き25番ポートのブロック機能(OP25B)の対象になり,
正常に送ることができません. OP25Bとは, TCPの宛先が25番になっているISP外への接続をブロックする機能です^[op25b-url-1].
そこで, ここではサブミッションポートを使用して目的のメールサーバへ送信を行います.
つまり, 通常の25番ポートを使用するのではなく, サブミッションポート(587番)を使用してメールを送信します.
また, 送信元が送信先に信頼される, 送信履歴が残る点からgmailを経由して送ります.
# 解決
___________________
# gmailの設定
# googleアカウントを作成します
# アプリケーションパスワードの生成
[アカウントページ](https://myaccount.google.com/)->"ログインとセキュリティ"->パスワードとログイン方法
->二段階認証プロセス と行き, 二段階認証を有効にします^[gaccount-setting-url-1].
[もし二段階認証を有効にしないと]
=======
二段階認証を使用しない, つまりgoogleアカウントのパスワードをそのまま後述するアカウント認証ファイルで使用すると,
googleから"重大なセキュリティ通知"としてブロックされます.
=======
再度"パスワードとログイン方法"へ行き, "アプリパスワード"からパスワードを生成します.
生成したパスワードは記録しておきます.
# sendmailの設定^[conf-setting-url-1]
ubuntuを想定しています.
# `sendmail`のインストール
```bash
sudo apt install sendmail
```
# gmailアカウント認証ファイルの作成
```bash
sudo mkdir /etc/mail/authinfo/
cd /etc/mail/authinfo/
sudo touch gmail-auth
```
`gmail-auth`に以下を書きます.
```bash
AuthInfo: "U:root" "I:YOUR GMAIL EMAIL ADDRESS" "P:YOUR PASSWORD"
```
"YOUR GMAIL EMAIL ADDRESS"には, gmailのアカウント(メールアドレス)を,
"YOUR PASSWORD"には, 生成したアプリパスワードに置き換えます.
最後に, ハッシュマップを作成します.
```bash
sudo makemap hash gmail-auth < gmail-auth
```
# 設定ファイルの変更と反映
# ディレクトリの移動
```bash
cd /etc/mail
```
[変更の前にバックアップを::CAUTION]
============================
以下から設定ファイルを変更していきますが, 前の状態に戻せるように,
バックアップを取ることをお勧めします.
```bash
sudo cp sendmail.mc sendmail.mc.1
```
============================
# 変更
以下のコードを`sendmail.mc`にある**一番初めにでるMAILER definitionの行の上**に加えます.
```bash
define(`SMART_HOST',`[smtp.gmail.com]')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash -o /etc/mail/authinfo/gmail-auth.db')dnl
```
# 反映
以上の設定を反映します.
```bash
sudo make -C /etc/mail
```
sendmailサービスをリロードします.
```bash
sudo /etc/init.d/sendmail reload
```
ここで, グーグルアカウントのページからアプリパスワードの紐づけがされているようでしたら問題ないでしょう.
# 確認
以下のコマンドで動作を確認します.
問題なければ, 終わりです.
```bash
sendmail "送り先のメールアドレス"
```
上のコマンド実行後, 本文を入力.
```bash
Subject: Hello
Hello there!
.
```
`sendmail`のログは, `/var/log/maillog`で確認できます.
無ければ, `/var/log/`以下から"mail"を含むファイルを検索してください.
# 参考文献
_____________________
[mta-url-1]: [MTA 【 Mail Transfer Agent 】(accessed: 2018/11/26)](http://e-words.jp/w/MTA.html)
[op25b-url-1]: [スパム・メールの送信を制限するOutbound Port 25 Blockingとは (accessed: 2018/11/26)](http://www.atmarkit.co.jp/fwin2k/win2ktips/797op25b/op25b.html)
[conf-setting-url-1]: [Configuring Gmail as a Sendmail email relay(accessed: 2018/11/26)](https://linuxconfig.org/configuring-gmail-as-sendmail-email-relay)
[gaccount-setting-url-1]: [sendmailコマンドのsmtpサーバの設定 (accessed: 2018/11/26)](http://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=sendmail%A5%B3%A5%DE%A5%F3%A5%C9%A4%CEsmtp%A5%B5%A1%BC%A5%D0%A4%CE%C0%DF%C4%EA)