GASで簡単!メールから名前を自動取得する方法

GASを使って、メールアドレスから名前を自動取得する方法ってあるのかな?メールが増えると大変で…
猫男
猫男
catman
catman
おお、それは便利だぞ。catmanが「GASでメールアドレスから名前を自動取得する方法」を教えてやろう!

GASでメールから名前を取得する基本

GASを使えば、Gmailのメールから簡単に名前を取得できるのだ。以下のコードがその基本だ。


function getNameFromEmail() {
 var threads = GmailApp.search('from:someone@example.com');
 var messages = threads[0].getMessages();
 var from = messages[0].getFrom();
 Logger.log(from);
}

このコードは、Gmailの検索機能を使って、特定のメールからアドレスと名前を取得するものだ。

GmailApp.search()メソッドでメールスレッドを取得し、その中のgetMessages()メソッドでメールを取り出す。

スレッドやメッセージ、アドレスの詳細

ここでは、GASの各メソッドについてもう少し詳しく説明しよう。

GmailApp.searchメソッド

GmailApp.search()メソッドは、Gmail内で指定の条件をもとにスレッドを検索するために使われる。この場合、『from:』に続けてアドレスを指定している。

getMessagesメソッド

search()で取得したスレッドの中身を、getMessages()メソッドで取り出す。

getFromプロパティ

getFrom()プロパティを利用すると、メールの送信元情報 – すなわちメールアドレスと名前を含む文字列 – が取得される。

これでメールアドレスから名前を取り出せるんだね。でも、もっときれいに名前だけが欲しいな。
猫男
猫男
catman
catman
問題ない、次はその方法を示すぞ…。

名前部分だけを抽出する方法

メールのアドレスと名前がセットになっている場合、その文字列から名前部分だけを切り取って抽出する方法をコードで示す。


function extractName() {
 var threads = GmailApp.search('from:someone@example.com');
 var messages = threads[0].getMessages();
 var from = messages[0].getFrom();
 
 var nameMatch = from.match(/"(.*?)"/);
 var name = nameMatch ? nameMatch[1] : "(名前を取得できませんでした)";
 Logger.log(name);
}

正規表現を使って、名前部分(ダブルクォーテーションに囲まれた部分)を抽出する方法だ。

match()メソッドでダブルクォーテーションで囲まれた部分を取り出し、三項演算子で判定して結果を表示する。

練習問題

Gmail内の特定の送信元からのすべてのメールの件名を取得し、それをログに出力するスクリプトを書いてみてください。

 

解答・解説


function getSubjectFromEmails() {
 var threads = GmailApp.search('from:someone@example.com');
 for (var i = 0; i < threads.length; i++) {
 var messages = threads[i].getMessages();
 for (var j = 0; j < messages.length; j++) {
 var subject = messages[j].getSubject();
 Logger.log(subject);
 }
 }
}

GmailApp.searchメソッドでメールスレッドをすべて検索し、それぞれのスレッドからメッセージを取り出す。

各メッセージのgetSubject()メソッドで件名を取得して、Logger.log()でログに出力する。