Googleクラウドサービスを利用して時間指定メール送信システムを作る（その５）

***
＜[前へ](http://qiita.com/matsuhandy/items/0c1bf9e673412dac5135)＞　＜[次へ](http://qiita.com/matsuhandy/items/cbebcfebd73b62ddd7f8)＞
　GASでメール送信を試してみます。
***
#1. Google Apps Scriptでのメール送信
* GASの関数として，`MailApp.sendEmail()`等が用意されている。これはnewでオブジェクト（インスタンス）を作成する必要がない，スタティック（いつでも実行可能）な`クラス.メソッド`である。 
* 詳しくは，[GASマニュアル](https://developers.google.com/apps-script/reference/mail/mail-app)を参照。
* 引数を渡してメールを送る次のメソッドでも良いが，一般には`sendEmail(message)`を使用するのが楽。
    sendEmail(recipient, subject, body)
    sendEmail(recipient, subject, body, options)
    sendEmail(to, replyTo, subject, body)

* `sendEmail(message)`は，一番フレキシブルで使いやすく，たくさんのオプションが利用できる。`message`は`{}`でくくることで，[Advanced parameters](https://developers.google.com/apps-script/reference/mail/mail-app#sendEmail(Object))が利用できる。
* Advanced parametersの使用例は，下のサンプルプログラムを参照。to, cc, bcc, name subject, body等の便利なパラメータが利用できる。
* サンプルプログラムでは，添付ファイルを送信する準備のため，`new Array()`で添付ファイルを格納する配列を用意しているが，使っていない。
* ループを組んで一度にメール送信することは，スパムメールになるのでやってはいけない。
* GASで1日に送信できるメール通数に限界があり，50通程度で出せなくなる。
* toAdrにメールアドレス，その他も適当に代入すれば，メール送信テストができる。
* メール本文に，getDateAndTime()関数により，送信日時を入れている。
* 実行時には，承認が必要になるので，確認して，許可する。

![画像1.png](https://qiita-image-store.s3.amazonaws.com/0/146927/a8aa60eb-c46c-96f0-8dec-8d8e34b8e6d9.png)
![画像1.png](https://qiita-image-store.s3.amazonaws.com/0/146927/935f5864-90f5-82e6-4d33-5411a0a6d6ae.png)



```java:GASでメール送信
logID= "**********";//手動でDocumentを新規作成しIDを調べておく

function main(){
  var log = new Doc(logID);
  log.print("送信先等の設定\n");
  var toAdr = "xxxxx@gmail.com";//送り先アドレス
  var ccAdr = "";//Ccアドレス
  var bccAdr = "";//bccアドレス
  var subject = "GASからメール送信";//メールの題目
  var name = "";//送り主の名前
  var files = new Array();//添付ファイル，どんな型でも，いくつでも格納できる配列，
  //場所は確保してないのでpushメソッドで格納する
  var body =
    "メール送信テスト\n" +
    "送信日時：" + getDateAndTime(0) + "\n"
    "メール本文" + "\n";
  MailApp.sendEmail({to:toAdr, cc:ccAdr, bcc:bccAdr, subject:subject, name:name, body:body, attachments:files});
  log.print("メール送信完了\n");
}

function getDateAndTime(data){// 引数がゼロなら現在日時そうでなければ指定日時をyyyymmdd_hhmmssで返す
  if(data==0) var now = new Date();
  else        var now = new Date(data);
  var year = now.getYear();
  var month = now.getMonth() + 1;
  var day = now.getDate();
  var hour = now.getHours();
  var min = now.getMinutes();
  var sec = now.getSeconds();
  return (""+year).slice(0,4) + ("0"+month).slice(-2) + ("0"+day).slice(-2) +'_'+ 
    ("0"+hour).slice(-2) + ("0"+min).slice(-2) + ("0"+sec).slice(-2);
}

//////////Docクラスの定義開始（コンストラクタとメンバ関数で構成）
//Docクラスのコンストラクタの記述
Doc = function(id){
  this.ID = id;
  this.doc = DocumentApp.openById(this.ID); 
  this.body = this.doc.getBody();
  this.docText = this.body.editAsText();
}
//Docクラスのメンバ関数の定義開始
//メソッドprintの定義，テキスト追加
Doc.prototype.print = function(str){
  this.docText.appendText(str);
}
//メソッドreplaceの定義，文字列置き換え
Doc.prototype.replace = function(src,dst){
  this.body.replaceText(src,dst);
}
//メソッドclearの定義，全消去
Doc.prototype.clear = function(){
  this.body.clear();
}
//メソッドgetIDの定義，ファイルIDを返す
Doc.prototype.getID = function(){
  return this.ID;
}
//////////Docクラスの定義終了
```


***
　次は，フォームを使った時間指定メール送信システムのインターフェース作りです。
＜[前へ](http://qiita.com/matsuhandy/items/0c1bf9e673412dac5135)＞　＜[次へ](http://qiita.com/matsuhandy/items/cbebcfebd73b62ddd7f8)＞
***