どうもこんにちは🙋♂️
メール通知は必須ですが、数が多くなってくると管理大変になってきますよね。私がそうです。
ネットサーフィンしているときに、GmailのメッセージをDiscordへ転送するアプローチを試されている方がいまして、私も試してみました。
概ね、上記の記事通りで期待通りに動作しますがすべてのメールが流れ込んでくるため何らかのルールで分けたいと考えました。
知らない方も多くいらっしゃると思いますが、Gmailはメールエイリアスという機能を持っており、一つのGoogleアカウントで複数のメールアドレスを利用できる機能があります。
次のような方法で現在利用中のメールアドレスに対してメールエイリアスを設定することができます。
元々のメールアドレスのexample
のあとに+
を付けて任意の文字列を追加することで別のメールアドレスとして利用することができます。
その他詳しい解説については下記のサイトを参考にしてください。
本題
Gmailのエイリアスを設定したら、参考コードを次のように変更してみましょう。
本のコードとの違いは下記の点です。
const alias = "example+dev";
で対象のエイリアスを指定します。 複数のエイリアスを指定する場合は、const alias = "example+dev|example+wordpress";
のように、パイプ(|
)で区切ります。GmailApp.search(
label:unread to:${alias});
で、未読のメールの中で、指定したエイリアス宛のメールのみを取得します。getWebhookUrl
関数で、スプレッドシートのアクティブシートのA1セルからWebhook URLを取得します。
今回解説していませんが、スプレッドシートに複数のエイリアスとWebhookアドレスを設定することで、それぞれのエイリアス宛のメールを対応するWebhookアドレスに送信できるようになります。
またDiscord想定で作成していますが、SlackやChatworkなどWebhookを使えるものならどのサービスでも運用可能です。
我が社ではこんな風にカスタムしたいんだ!など相談あればぜひお問い合わせください😉
現場からは以上です。
24.06.10 追記
たまにエイリアス宛のメールではないメールも流れてくるような場合があったため、hook
関数のみアップデートしてみました。
const alias = "example\\+dev";
のように、正規表現でエイリアスを指定する際に、+
記号をエスケープしています。GmailApp.search
(label:unread to:me {${alias}});
のように、検索クエリを変更しました。to:me
を使用して自分宛のメールに限定し、{${alias}}
を使用して正規表現でエイリアスを指定しています。messages.map
内で、message.getTo()
を使用してメールの受信者を取得し、正規表現でエイリアスが含まれているかどうかを確認しています。エイリアスが含まれていない場合は、null
を返すようにしています。filter(payload => payload !== null)
を使用して、null
を除外しています。
※getWebhookUrl
関数は前回までのものを使ってください。
もし利用していて、不具合や気になる動作ありましたらお知らせください🙇♂️
😇 Nobuhiro Kumagai
いつか海外で余生を過ごすため頑張るフロントエンドエンジニアです。Webに関わることなら大体経験済みで守備範囲は広め、お気軽にお声がけください 😄
- 💻 Web Creator [Director, Front-end, etc]
- 📍 宮城県仙台市在住
- 📕 私についての記事
連絡とりたいかたはお気軽に絡んでください
📮 Contact us
If you have a project or general questions for us, please contact us using the form below.
Note: It may take our team time to reply to your message depending upon the content.
📧 Talk to REACTER
© 2020 ULTRA9MA