経緯
なぜか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