2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

問合せフォームから送信された定型メールを自動で取り込むには

Last updated at Posted at 2020-02-02

ホームページの問い合わせフォーム(WordPress だと ContactForm7 プラグインが有名)で登録を受け付けると、双方確認のため、関係者にメールで自動送信するようなシステムを組んでいるかと思う。
その後のフローはと言えば大抵、メール記載内容を元に、顧客管理簿にちまちまと入力したり、販促用メーリングリストに追加したりと、担当者が手作業で進めることになる。

・・・・じつに面倒くさい :weary:

この手のメールは「決まったフォーマット」で送られてくるのが保証されているわけで、それこそコンピュータにやらせれば良いのである。
ということで、簡単なスクリプトを書いてみた。毎日何十通と問い合わせメールが来るような現場なら、ぜひ試してみて欲しい。

メールフォーマット

ここでは、次のような定型メールを想定する。
Google Apps Script で処理するので、メールは G Suite(無料版のGmailを含む)で受信する前提だ。

メール件名
【〇〇〇】お問い合わせありがとうございます
メール本文
〇〇〇〇〇です。
この度は弊社にお問い合わせいただき誠にありがとうございました。

---------------------------------------------
★ 貴社名
株式会社山田ソリューションズ

★ ご担当者名
山田 太郎

★ ご連絡先メールアドレス
yamada@example.co.jp

★ ご連絡先電話番号
090-1234-5678

★ お問い合わせの種類
△△管理システムについて

★ お問い合わせ内容
〇〇について△△としていただくことは可能でしょうか。
その場合、3月末の納期でも間に合いますでしょうか。
---------------------------------------------

2営業日以内に担当よりご連絡させていただきます。
よろしくお願い申し上げます。

「貴社名」は6行目、「ご担当者名」は9行目、「ご連絡先メールアドレス」は12行目、「ご連絡先電話番号」は15行目、「お問い合わせの種類」は18行目、「お問い合わせ内容」は21行目から「-----」までの間すべての行を取得すれば良いことが分かる。

スクリプト

次のスクリプトを Google Apps Script のトリガに登録する。トリガとは任意のイベントでスクリプトを実行できる仕組みだ。

/**
 * 受信したメールをGoogleスプレッドシートに登録
 * @author MindWood
 */
function createEntryList() {
  var sheet = SpreadsheetApp.getActiveSheet().clear();
  var messages = [['送信日時', '貴社名', 'ご担当者名', 'ご連絡先メールアドレス', 'ご連絡先電話番号', 'お問い合わせの種類', 'お問い合わせ内容']];
  
  GmailApp
  .search('subject:【〇〇〇】お問い合わせありがとうございます', 0, 500)  // 件名で絞り込み
    .forEach(function (thread) {
      thread.getMessages().forEach(function (message) {
        var from = message.getFrom();       // 送信者
        var date = message.getDate();       // 送信日
        var body = message.getPlainBody();  // 本文
        
        if (from.match('@ourcompany.co.jp>$')) {  // 社内の人間からなら除外
          return;
        }
        var lines = body.split("\r\n");  // 本文を改行コードで分割
        
        var comment = '';  // 「お問い合わせ内容」のみ複数行で入力される可能性がある
        for(var i = 20; lines[i] != ''; i++) {
          if (lines[i].indexOf('-----') == 0) {  // 「お問い合わせ内容」の終わり?
            break;
          }
          comment = comment + lines[i] + "\n";  // 「お問い合わせ内容」を改行で結合
        }
        messages.push([date, lines[5], lines[8], lines[11], lines[14], lines[17], comment.slice(0, -1)]);
      });
    });

  if (messages.length === 0) return;

  sheet.getRange('A:A').setNumberFormat('yyyy/mm/dd hh:mm');
  sheet.getRange('C:C').setNumberFormat('@');
  sheet.getRange('A1:G' + messages.length).setValues(messages);
}

/**
 * Googleスプレッドシートからメーリングリストに登録
 * @author MindWood
 */
function addMembers() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
 
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    try {
      var res = AdminDirectory.Members.insert({name: row[2], email: row[3], role: 'MEMBER'}, 'ml@ourcompany.co.jp');
    } catch(error) {
      Logger.log('name:' + error.name);
      Logger.log('message:' + error.message);      
    }
  }
}

このスクリプトを毎日決まった時刻に起動するトリガとして設定すれば、自動で管理簿を作成したり、メーリングリストを自動でメンテナンスできるようになる。

例では問い合わせフォームとして扱ったが、他にも求人募集の登録とか、無料メルマガの配信とか、コンテンツを差し替えるだけでいくらでも応用がきくスキームなので、自由にカスタマイズして活用して欲しい。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?