GASで簡単!メールから名前を自動取得する方法
GASを使って、メールアドレスから名前を自動取得する方法ってあるのかな?メールが増えると大変で…

猫男

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
問題ない、次はその方法を示すぞ…。
名前部分だけを抽出する方法
メールのアドレスと名前がセットになっている場合、その文字列から名前部分だけを切り取って抽出する方法をコードで示す。
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()でログに出力する。