1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Gmail】メールの宛先から自分のメールアドレスを取り除く

Posted at

経緯

なぜかGmailには再送する機能がないので、定例のメールを楽にするべく自動作成用のツールを作って利用していた。1
そしてせっかく作ったので共有しようとした。

そこで、例えば自分の所属するチーム全員に定時で送るメールがあったとして、そのひな形をみんなで使いまわせるようにしたいとする。
宛先を自分も含めチーム全員にするなら、いちいち自分にも送られてきて邪魔だ

ということで、メールアドレスのリストから自分のアドレスを取り除くための関数を作った。2

作った関数3

/**
 * 宛先のアドレスから実行ユーザーのアドレスを削除するための関数
 * @param {string} emails - csv形式のメールアドレス
 * @return {string} csv形式のメールアドレス 引数から実行ユーザーのアドレスを取り除いたもの 
 */
function removeActiveUserEmail(emails){

    // ユーザーのアドレスを取得
    const activeUserEmail = Session.getActiveUser().getEmail();

    // 正規表現をもちいるため、探したいアドレスのピリオドをエスケープする。
    const escapedEmail = activeUserEmail.replace(/\./g, "\\.");

    // 後述のメールのフォーマットに合うような正規表現の文字列を作成
    let pattern = "^\s*(?:" + escapedEmail + "|.+<" + escapedEmail + ">)$";
    let re = new RegExp(pattern);

    // カンマで区切られた文字列を配列にし、自分のアドレスのみ取り除き他は元のcsv形式に戻す。
    // replace は改行の半角スペースへの置き換え。ひな形を Spreadsheet で管理しており、その視認性の関係で改行を入れていることがあるので
    const splitedEmails = emails.replace(/[\r\n]/g, " ").split(",");
    let resultEmails = [];
    for (const email of splitedEmails){
      if(!email.match(re)){
        resultEmails.push(email);
      };
    };
    return resultEmails.join(",");
  };

以降は補足
といっても処理についてはコメントにある通りなので、

補足

メールの宛先(CC)のフォーマット

メールのあて先は以下のようなcsv風な形式になっている。(Gmailの宛先をコピーして確認)
山田太郎 <yamada.taro@example.com>, 山田花子 <yamada.hanako@example.com>, noname@example.com
名前の情報がある人は 名前 <アドレス>、ない人は アドレスそのままで、宛先が複数ある場合はカンマで区切られているらしい。

おそらく正規表現で直接置換をすることも可能だとは思うが、今回はそこまで正規表現にこだわる理由もなかったので、先にカンマ区切りで配列に分け、そこから1件ずつテストして、ヒットした要素だけ除外するという処理にした。

参考

正規表現 - JavaScript | MDN
Googleスプレッドシートでの改行方法と、改行の検索 & 置換方法 | WWWクリエイターズ
GAS で呼び出し元のアカウントを判定して処理を振り分ける - Qiita

  1. Spreadsheetに書いたテンプレから毎日Gmailの下書きを作成するというもの。こういうのは探せばいくらでも記事が出てきそうなのでこれについては省略。

  2. どのみ現状では「お疲れ様です、〇〇です」みたいな文頭の挨拶とか署名は手動で追加するか、ツール自体をコピーして自分用に書き換えてもらう必要があるのでこの関数の必然性はかなり怪しいのだが...。Contact経由でユーザーの名前も取ってこれればいいのだが未検証。

  3. 実際の運用では関数ではなく自作の'DraftTemplate'クラスの静的メソッドにして呼び出している。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?