〇問題と解決法
大学から配給されているメールアドレス(ラボメールと呼称します)をスマートフォンに登録して確認していますが、プッシュ通知にもかかわらずラボメールの受信時刻から2時間以上も後になってスマートフォンに通知がきます。しかし、ラボメールをGmailへの自動転送に設定してGmailへ迂回すると、なぜかラグなく受け取ることができます。なので、今までその自動転送設定で過ごしてきましたが、
Gmailの受信を見る
=>Gmailのメールを開いて既読にする
=>ラボメールを開く
=>ラボメールで返信する
とかなり手間なうえ、Gmailの受信ボックスに重複したメールが溜まっていく良くない状態だったため、メール環境を整えることにしました。
今回はGmailのメール設定とGoogle Apps Scriptを用いたLINEへの通知の設定をしました。
事後でこの記事を書いていますが、劇的に便利になったかというと正直そうでもないです。
〇参考にしたサイト
参考、というよりほとんどそこから拝借した形になります。
「【2020年版・iPhone向け】Gmailに届いた特定のラベルのメールをLINEに通知する方法|IFTTTではなくGASをつかいます。」
「Gmailの新着通知をLINEで受け取る by Google App Script」
〇やったこと
Gmail側の設定は
- ラボメールからGmailへの転送設定
- 転送されてきたメールのみをラベル付けしてアーカイブにいれる
です。
続いて、Google Apps Scriptを用いたLINEへの通知の設定ですが、1つ目の参考サイトをほとんどそのままやっただけです。なので、大半のことは割愛します。
Google Apps Scriptのコードのところは自分なりに色々いじってみました。
変更点は
- 取得間隔:3秒へ変更(2つ目の参考サイトに倣って)
- 検索条件指定をto:で指定(ここが重要だった)
- getMonthのずれ修正
- メールの本文を50字だけ表示
- 細かな誤字修正
です。
var lineToken = "********************"; //LINE notify token
var get_interval = 1; //1分前からの新着メールを取得
function send_line(Me){
var payload = {'message' : Me};
var options ={
"method" : "post",
"payload" : payload,
"headers" : {"Authorization" : "Bearer "+ lineToken}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
function fetchContactMail() {
//取得間隔
var now_time= Math.floor(new Date().getTime() / 1000) ;//現在時刻を変換
var time_term = now_time - (60 * get_interval + 3); //秒
//検索条件指定(未読で転送元のメールアドレス宛てのメール)
var strTerms = ('is:unread to:(転送元のメールアドレス)');
//取得
var myThreads = GmailApp.search(strTerms);
var myMsgs = GmailApp.getMessagesForThreads(myThreads);
var valMsgs = [];
for(var i = 0; i < myMsgs.length;i++){
valMsgs[i] = " " + (myMsgs[i].slice(-1)[0].getDate().getMonth()+1) + "/" + myMsgs[i].slice(-1)[0].getDate().getDate()
+ " " + myMsgs[i].slice(-1)[0].getDate().getHours() + ":" + myMsgs[i].slice(-1)[0].getDate().getMinutes()
+ "\n[From]" + myMsgs[i].slice(-1)[0].getFrom()
+ "\n\n[Subject]" + myMsgs[i].slice(-1)[0].getSubject()
+ "\n\n\n[Message]"+ myMsgs[i].slice(-1)[0].getPlainBody().slice(0,50);
myMsgs[i][0].markRead(); //メッセージを既読にする
}
return valMsgs;
}
function main() {
new_Me = fetchContactMail()
if(new_Me.length > 0){
for(var i = new_Me.length-1; i >= 0; i--){
send_line(new_Me[i])
}
}
}
これで、うまくいきました。しかし納得がいかないのが、受信時刻の分が1桁だと"14:06"が"14:6"になることです。getMinute()がよくわからなかったので断念。