はけた(@excelspeedup)氏のツイートで、GASでメールのMessage-IDヘッダーが取得できるのか?といった内容のものがありました。
GASでメール受信に連動して処理をする仕組みを構築しようとしたときに、GASで「Message-Id」も取得できるのかな?
重複処理を防ぐにはその欄を見るのが一番無難な気がする— はけた@Excel最高の学び方発売中 (@excelspeedup) 2018年8月27日
たしかメールヘッダーも取得するメソッドが用意されていたはずなので、さっそく試してみました。
//メールからMessage-IDヘッダーを取得
function getMessageIdHeader() {
var msg = GmailApp.getInboxThreads(0, 1)[0].getMessages()[0];
var content = msg.getRawContent();
var matches = content.match(/^Message-ID:.*$/gim);
if (matches !== null) {
for (var i = 0; i < matches.length; i++) {
Logger.log(matches[i]);
}
}
}
コードは非常にシンプルで、GmailMessage.getRawContentメソッドでメールのソースを文字列として取得し、matchメソッドで「Message-ID」を抜き出しているだけです。
(一つのメールにMessage-IDヘッダーが複数あることは無いので、ループさせる必要はありませんが、確認のためにループで回しています。)
また逆に、「rfc822msgid:」検索演算子を使うことで、Message-IDヘッダーからメールを検索することもできるので、そのためのスクリプトもついでに書いてみました。
function sample() {
var msg = getMessageFromMessageID("Message-IDヘッダー");
if (typeof msg !== "undefined") {
Logger.log(msg.getSubject());
}
}
//Message-IDヘッダーを指定してメッセージ取得
function getMessageFromMessageID(msgId) {
var q = "rfc822msgid:" + msgId;
var threads = GmailApp.search(q);
if (threads.length > 0) {
var messages = GmailApp.getMessagesForThread(threads[0]);
if (messages.length > 0) {
return messages[0];
}
}
}
中々使用する機会は無いと思いますが、ご参考まで。
2019/5/21 追記:
2019/5/20付で追加されたGmailMessage.getHeaderメソッドを使うことで、ヘッダー名を指定するだけで値を取得できるようになりました。

![[Google Apps Script]ヘッダー名を指定してRFC 2822ヘッダーの値を取得する](https://www.ka-net.org/blog/wp-content/uploads/eyecatch-Google-120x120.png)
















この記事へのコメントはありません。