【自動化】Gmail迷惑メールボックスからSPAMメールを自動でゴミ箱に移動/1時間ごとに定期実行

※自己責任でお願いします

AmazonとPayPayを騙るSPAMメールの数が半端ない…。1日で100近く。

GmailのSPAM判定精度はかなり高いけど、AmazonとPayPay銀行は利用しているので、万が一正規のものがまざっていると困るので目視チェックに時間をとられる。

Gmailの自動振り分けルールだと細かい設定ができないので、どうしようかと思ってChatGPTに聞いたらGAS（Google Apps Script）でできることを教えてもらった。

# コード

以下はAmazonをかたるSPAMメールを迷惑メールボックスから削除するコード。

これを GAS（[https://script.google.com](https://script.google.com/)）で、新規プロジェクトとして作成してコピペする。
その後、`保存` > `実行` > `実行権限`を付与して、動作確認。

[![Image from Gyazo](https://i.gyazo.com/58fae639276493d51d841ec7b84cf661.png)](https://gyazo.com/58fae639276493d51d841ec7b84cf661)

※実行権限付与には、数STEP必要です。スクショを後述

動作確認（＝意図せぬものまで削除されていないか）できたら、以下のコメントを外す。これでゴミ箱移動が有効になる。

```js
// threads[i].moveToTrash();  // ゴミ箱に移動
```

さらに`トリガ`を使って定期実行（１時間ごとの例を後述）させる。

すっきり！！

```js
function deleteAmazonDKIMErrorEmailsFromSpam() {
    var target = 'in:spam from:amazon*';
    var threads = GmailApp.search(target);  // 迷惑メールフォルダ内のAmazonメールを検索
    Logger.log("target:" + target + " 件数: " + threads.length);
    for (var i = 0; i < threads.length; i++) {
        var messages = threads[i].getMessages();
        for (var j = 0; j < messages.length; j++) {
            var message = messages[j];
            var headers = message.getRawContent();  // メールのヘッダー情報を取得
            
            if ((!headers.includes("dkim") || headers.includes("dkim=fail") || headers.includes("dkim=none")) &&
                !headers.includes("Return-Path: <*@amazon.com>") &&
                !headers.includes("From: .*@amazon.com")) {  
                // DKIMがエラー（fail）または署名なし（none）のメールを判定
                // threads[i].moveToTrash();  // ゴミ箱に移動
                Logger.log("削除: " + message.getSubject());
            }
        }
    }
}
```

# 参考情報

## ゴミ箱行きの条件の解説

以下の両方が成立した場合にゴミ箱に移動させる。

- DKIMがパスしていること
- 送信元ドメインが`amazon.com`でないこと

AWSイベントの受付メール等は`amazon.com`ではない（例えば以下の場合は`awsevents.com`）けど、DKIMはパスしてくるので、迷惑メールに振り分けられていても削除されない。

[![Image from Gyazo](https://i.gyazo.com/c73e07227c9e1ff94ec75748ed682a88.png)](https://gyazo.com/c73e07227c9e1ff94ec75748ed682a88)

[![Image from Gyazo](https://i.gyazo.com/0fdee23b540c00bbfcf86e10735a4624.png)](https://gyazo.com/0fdee23b540c00bbfcf86e10735a4624)

## トリガ設定例/1時間おきに定期実行

[![Image from Gyazo](https://i.gyazo.com/5e9a3c8ce173c61ce4ff06ec33668765.png)](https://gyazo.com/5e9a3c8ce173c61ce4ff06ec33668765)

[![Image from Gyazo](https://i.gyazo.com/0d1f0f0468b83c4bd3ffacc90ec4e8d9.png)](https://gyazo.com/0d1f0f0468b83c4bd3ffacc90ec4e8d9)

## 実行権限付与手順

スクリプトの`実行`を行った場合、当方の場合は以下のような流れでした。

[![Image from Gyazo](https://i.gyazo.com/55a81cf623f84f071aec9a83a56babdc.png)](https://gyazo.com/55a81cf623f84f071aec9a83a56babdc)

[![Image from Gyazo](https://i.gyazo.com/19e973c6027e9baaf4c48750a70dbb06.png)](https://gyazo.com/19e973c6027e9baaf4c48750a70dbb06)

[![Image from Gyazo](https://i.gyazo.com/0acaf69152c555fdc580690b3c71be46.png)](https://gyazo.com/0acaf69152c555fdc580690b3c71be46)

`続行`で権限付与完了

[![Image from Gyazo](https://i.gyazo.com/402b168f4303a06b58718d1859300f3a.png)](https://gyazo.com/402b168f4303a06b58718d1859300f3a)

Gmailのセキュリティ通知

[![Image from Gyazo](https://i.gyazo.com/a7635f894b9975ecee9bd1af949c6f28.png)](https://gyazo.com/a7635f894b9975ecee9bd1af949c6f28)