これは、さまざまな方法で行うことができます。テレフォニーの世界では、この動作はハント グループと呼ばれます。ここでは、その概念を借りて開始するための 1 つの提案を示します。
仮定:
- Gmail を使用しています。
- スクリプトは、Gmail アカウントと同じアカウント所有者に属します。
アプローチ:
Gmail でフィルターを設定して、基準を満たす受信メッセージ (「エレファント」メール) を識別します。
このフィルターでは、"elephant" というラベルを新しい電子メールに適用します。このラベルはスクリプトによって "作業" を識別するために使用されます。
スプレッドシートを使用して、「elephant」ラベルに関連する未読メッセージをスキャンして転送するスクリプトを含めます。
スクリプトは、適切な間隔でタイマーイベントでトリガーするように設定されます。
スプレッドシートには、(適切にフォーマットされた) 送信先の電子メール アドレスのリストが含まれます。ジョー、エイミー、タミー。スクリプトはこれらを読み取り、順番に使用します。
電子メールが処理されると、「既読」としてマークされます。必要に応じて、ラベルの解除、再ラベル付け、アーカイブ、またはゴミ箱に入れることができます。
スクリプト
このスクリプトは、ScriptProperties を使用して、次の転送メッセージを受け取る受信者を追跡します。非常に多数のメッセージが予想される場合は、バッチでのメッセージの取得をサポートするように拡張する必要があります。
labelName
適切に変更することを忘れないでください。
スクリプトはいくつかのエラー チェックを行いますが、電子メール アドレスを検証しません。そのため、メッセージが転送操作に失敗する可能性があります。買い手責任負担。
これはgist としても利用できます。
/**
* Retrieves a given user label by name and forwards unread messages
* associated with that that label to a member of the Hunt Group.
*/
function huntGroupForward() {
// get the label for given name
var labelName = "elephant"
var label = GmailApp.getUserLabelByName(labelName);
if (label == null) throw new Error("No messages for label "+labelName);
// get count of all threads in the given label
var threadCount = label.getUnreadCount();
if (threadCount == 0) return; // quick exit if nothing to do.
var threads = label.getThreads();
var messages = [];
for (var i in threads) {
if (threads[i].isUnread()) {
messages = messages.concat( threads[i].getMessages() );
}
}
for (var i = 0; i < messages.length; i++) {
if (messages[i].isUnread()) {
messages[i].forward(nextHuntGroupMember());
messages[i].markRead();
}
}
};
/*
* Global object to store working copy of the Hunt Group
*/
var huntGroup = { next : 0, members : [] };
/*
* Get the email address of the next Hunt Group Member
* to forward a message to.
*/
function nextHuntGroupMember() {
if (huntGroup.members.length == 0) {
// Load members
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
huntGroup.members.push(data[i][0])
}
// Make sure we have members
if (huntGroup.members.length == 0) {
throw new Error("Found no email addresses");
}
}
// Retrieve next index. Properties are always stored as strings, so
// we need to parse the retrieved value to use it as a Number.
var next = parseInt(ScriptProperties.getProperty("nextHuntGroupMember"));
if (next != null) {
huntGroup.next = next;
}
else {
next = 0;
}
// get next member to be used
var nextMember = huntGroup.members[next];
// ... then move on to new next (increment modulo list length)
next = ++next % huntGroup.members.length;
// store the new next value
ScriptProperties.setProperty("nextHuntGroupMember", next);
return nextMember;
}
引き金
スクリプトに満足したら、定期的に実行するように設定します。これは、1 時間ごとに実行するように設定する方法です。