Help us understand the problem. What is going on with this article?

[GAS]クライアントにInvoice添付してメール送る面倒な作業を自動化したレシピ

やりたかったこと

僕の部署では毎月複数のクライアントにInvoiceを添付したメールを送っているんですが、前任から引き継いだ際に毎回フルマニュアルで送っていたことが発覚し、手頃な外部サービスもなかったのでGASで自作してみました。

材料

  • Google Spreadsheet 1枚
  • Google Apps Script 35行程度
  • Google Drive(添付ファイルを置いておくため)

※請求書ファイルや送付先のクライアントのリストはすでに用意できている前提です。

1. Google Spreadsheetの準備

必要なのは4カラム。何だったらFlagも不要ですね(うちでは一部クライアントが郵送必須なので明示的にFlagカラムを作っています)。
scr.png

A列のInvoiceはユニークな名前である必要があります。

2. Google Driveにファイルをアップロード

上記SpreadsheetのA列に記載した画像名と同じ名前でGoogle Driveにファイルをアップロードします。
ファイル名がユニークであれば、パスを指定しなくてもGoogleが勝手に検索してくれます。かしこき。

3. Google Apps Scriptを書く

肝心のGASコードは下記。

function send_invoice() {
  var spreadsheet = SpreadsheetApp.openById('{speadsheet_id_here}'); //SpreadsheetのID
  var sheet = spreadsheet.getSheetByName('send'); //シート名
  var lastRow = sheet.getLastRow();
  for(var i = 2; i <= lastRow; i++) {
    //getRangeの第1引数は行(1,2,3..)、第2引数はカラム(A,B,C...の順番を数値にしたもの)
    var filename = sheet.getRange(i,1).getValue() 
    var report = DriveApp.getFilesByName(filename).next();
    var to = sheet.getRange(i,2).getValue();
    var name = sheet.getRange(i,3).getValue();
    var flag = sheet.getRange(i,4).getValue();
    if (flag != "NO"){
      var title = "Invoice送付";
      var content = 
      name + "\n" +
      "いつも大変お世話になっております。\n"  + 
      "添付にて、今月分のInvoiceをお送りいたします。\n\n" + 
      "どうぞよろしくお願いいたします。"
      ;
      GmailApp.sendEmail(
        to,
        title,
        content,
        {attachments: [report],
         //fromをGmail以外にする際は紐付けが必要。下記で説明。
         from: 'email@example.com', 
         cc: 'email@example.com',
         replyTo: 'email@example.com', 
         name: 'My name here'
        }
      );
      if (to == "") {
        break;
      }
    }
  }
}

最後に、GASのページから実行ボタンを押すだけです。いくつかPermissionのポップアップが出てくると思いますので許可してください。

Gmail以外からメールを送信したい時

Gmailアドレスではなく、外部メールアドレス(例えば会社ドメイン)で送信したい場合、Googleアカウントへの紐付けが必要。

https://www.appsupport.jp/gmail/mail-fetcher/

上記を設定していないと、GmailApp.sendEmail関数呼び出しの際にfromオプションが設定されていても、Gmailから送られてしまいます。
会社間のやりとりだとGmailが好まれないかもしれないのでお気をつけください。

終わりに

上記でだいたい基本的な処理はカバーしているはず。
送信処理が完了したらSpreadsheet側にステータスを書き加えていく、等の処理も追加すればより確実かと思います。

あとこの業務をそのまま他人に引き継ぎたいというケースもあると思いますが、上記だと送信元メールアドレスが自分のGmailに紐づいてしまっているので、外部変数化したいなとも思っています。ご存知の方いれば教えてください。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away