[RaspberryPi]msmtp+gmailでメール送信する方法

:::note warn
個人メモ
:::

## 前提
Raspberry PiにてWEBサーバ構築に、セキュリティ対策としてLogwatchの導入を検討。
Logwatchではメールで通知できるというので、メール送信用のツールが必要。
メールサーバ（postfix/exim）等もあるが、現状メール送信できればいいのでmsmtpを導入する。

以下で、msmtpにてgmailのsmtpを使用してメールを送るための手順をメモとして記しておく。

## ０．GMailでアプリパスワードを発行しておく

### ２段階認証を設定
:::note warn
すでに設定済みの場合、この手順は不要
:::

#### Googleアカウントにログイン

https://myaccount.google.com/

#### セキュリティ画面を開く
メニュー -> セキュリティ　または　下記リンクから

https://myaccount.google.com/security

#### 「Googleにログインする方法」 -> 「２段階認証プロセス」
2つ目の手順のいずれかを設定し、「2段階認証プロセスを有効にする」ボタンを押下

:::note info
2つ目の手順で「認証システム」を利用する場合（PC上で認証が完結するため楽）
認証システムを使用する場合、Google Chromeの拡張機能を使用する
1. Google Chromeで下記URLにアクセスし、「Authenticator」を追加
https://chromewebstore.google.com/detail/authenticator/bhghoamapcdpbohphigoooaddinpkbai
2. 2つ目の手順にて「認証システム」をクリック
3. 「認証システムを設定」をクリック
4. QRコードが出てきたらウィンドウ右上の拡張機能のアイコンをクリックし、「Authenicator」を起動
5. 「QRコードをスキャン」で画面上のQRコード範囲を選択しスキャンし、表示された６桁数字をコピー
6. 画面の「次へ」ボタンを押下し、コピーした６桁数字を貼り付けて「確認」

以降、ログインするときは「Authenicator」で数字をコピーして使用すればOK
:::

### アプリパスワードの発行
#### 下記URLからアプリパスワードの発行画面を表示
> 2024.4.21時点で、この画面に遷移するメニュー等がない

https://myaccount.google.com/apppasswords

#### アプリパスワードの作成
名前を設定し「作成」ボタンを押下

#### 表示されたパスワードをコピー
パスワードは二度と見られないのでコピーしておく
コピーしたパスワードは以降の手順で使用

## １．インストール
```shell:コマンド
$ sudo apt-get install msmtp msmtp-mta
```

> インストールすると/usr/sbin/sendmailが作成される
> 中身はmsmtpコマンドへのショートカットなので
> sendmailコマンドを実行するとmsmtpコマンドを実行してくれるようになる
> （sendmailを標準採用しているアプリへの対応）

## ２．設定ファイル作成
設定ファイルはインストール時に勝手に作られないので自分で手作り
（一応サンプルとかは、/usr/share/doc/msmtp/examples/ にある）

```shell:コマンド
$ sudo vi /etc/msmtprc
```

```conf:msmtprc
# Generic
defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        /var/log/msmtp.log（任意）

# Gmail
account        gmail
host           smtp.gmail.com
port           587
from           xxxxx@gmail.com
user           xxxxx@gmail.com
password       [コピーしたアプリパスワード（空白削除）をここに貼り付ける]

# Set a default account
account default : gmail
```

上記でログファイルを設定した場合はあらかじめ作成しておく
```shell:コマンド
$ sudo touch /var/log/msmtp.log
$ sudo chmod 777 /var/log/msmtp.log
```

## ３．テスト送信
下記コマンドでメール送信できるかテスト

```shell:コマンド
$ echo "TestMailSend" | msmtp xxxxx@gmail.com
```

メールがくれば成功

ログも確認
```shell:コマンド
$ cat /var/log/msmtp.log
```
```text:msmtp.log
Apr 21 16:09:39 host=smtp.gmail.com tls=on auth=on user=xxxxx@gmail.com from=xxxxx@gmail.com recipients=xxxxx@gmail.com mailsize=73 smtpstatus=250 smtpmsg='250 2.0.0 OK  1713683379 t9-20020a634609000000b005df58c83e89sm5635667pga.84 - gsmtp' exitcode=EX_OK
```
とかなんとか出てればOK


## 追加．logwatchの設定

### インストール
```shell:コマンド
$ sudo apt-get install logwatch
```
> インストール時に、/etc/cron.daily/00logwatch が作成され
> 毎日、`logwatch --output mail`コマンドを実行するように構成されている

### 構成ファイルの作成
構成ファイルは勝手に作られないので、サンプルの構成ファイルをコピーして作成する
```shell:コマンド
$ sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
$ sudo vi /etc/logwatch/conf/logwatch.conf
```

```diff_conf:logwatch.conf
出力をメール送信する
- Output = stdout
+ Output = mail

メールの送信先
- MailTo = root
+ MailTo = xxxxx@gmail.com（msmtpにて設定したメールアドレス）

メールの送信者名
- MailFrom = Logwatch
+ MailFrom = logwatch@yyyy.yyy（ここは適当に）
```

上記設定ファイルにある`TmpDir = /var/cache/logwatch`のディレクトリを作成する
```shell:コマンド
$ sudo mkdir /var/cache/logwatch
```

以上