もしGmailに届くメールを、自動でLINEへ転送できたら便利ですよね。
本記事では、GAS(Google Apps Script)とLINE Notifyを連携させて、新着メールをLINEに届ける仕組みを紹介します。
Gmailの新着メールをLINEに自動転送する方法
- 手順①LINE Notifyのトークンを取得する
- 手順②Google Apps Scriptを設定する
- 手順③Google Apps Scriptにデータへのアクセス権を付与する
- 手順④Gmail→LINEの自動転送を検証する
- 手順⑤Google Apps Scriptのトリガーを調整する
- 参考メール本文も含めLINEに転送する方法
- 参考Gmail以外のメールもすべてLINEに通知する方法
手順①:LINE Notifyのトークンを取得する
メールを通知させたいLINEアカウントで、LINE Notifyのトークンを発行します。
まずLINEアカウントのID・パスワードを確認して下さい。
次にLINE Notify公式ページで、ログイン よりLINEアカウントを入力し、
マイページ を開きます。
「アクセストークンの発行(開発者向け)」項目にて、トークンを発行する をクリック。
「トークン名」と「メールの通知を受け取るトークルーム」を選択します。
「トークン名」は何でもOKですが、メールがLINEへ通知される際のタイトルに表示されるため、分かりやすい&短い単語がオススメです。
「トークルーム」は既存のグループトークを選ぶこともできますが、個人で受け取るだけなら「1:1でLINE Notifyから通知を受け取る」でよいでしょう。
「トークン名」と「トークルーム」を選択できたら、発行する をクリック。
トークンが発行されます。
1度しか表示されないため、コピーしましょう。
手順②:Google Apps Scriptを設定する
新着メールをLINEに届ける仕組みを、GAS(Google Apps Script)で設定します。
まずGAS(Google Apps Script)へアクセスして、LINEへ転送したいGmailアドレスのアカウントでログインします。
ID・パスワードが分からない場合、解決策のヒントを関連記事【Googleアカウントを忘れた際の解決方法! 分からないID(Gmailアドレス)やパスワードを再設定しよう】で解説しています。
新規スクリプト を開きます。
デフォルトで下記コードが入っていますが、削除の上、
function myFunction() { }
下記コードをコピペします。
var lineToken = "xxxxxxxxxxxxxx"; //LINE notify token var get_interval = 5; //●分前~現在の新着メールを取得 #--トリガーの時間間隔をこれに合わせる 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); //秒にして+3秒しておく //検索条件指定 var strTerms = '(is:unread after:'+ time_term + ')'; //取得 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() + "/"+ 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(); } 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]) } } }
引用元 note – 親玉Gmailの新着通知をLINEで受け取る(by GAS)
なお、手順①で取得したLINE Notifyのトークンを、コード1行目の部分に書き換えるのを忘れずに。
var lineToken = "xxxxxxxxxxxxxx";
メニュー ファイル → 保存 より、コードを保存します。
GAS(Google Apps Script)で設定するコードは以上です。
手順③:Google Apps Scriptにデータへのアクセス権を付与する
GAS(Google Apps Script)がGoogleアカウントのデータへアクセスできるよう、初期設定が必要です。
スクリプト画面内で 関数を選択 より main へ切り替え、
▶実行をクリックすると(初回のみ)次のメッセージが表示されます。
Authorization required ●●(プロジェクト名) needs your permission to access your data on Google.
画面に従って 許可を確認 へ進み、
次の警告メッセージが表示されますが、詳細 をクリック。
このアプリは確認されていません このアプリは、Googleによる確認が済んでいません。 よく知っている信頼できるデベロッパーの場合に限り続行してください。
隠れていた「●●(安全ではないページ)に移動」リンクを開き、
許可 をクリックすればOK。
手順④:Gmail→LINEの自動転送を検証する
GAS(Google Apps Script)が機能するか検証しましょう。
テストメールをGmailで受信した後、スクリプト画面内の▶実行をクリックして下さい。
Gmailに届いたテストメールが、LINEに転送されていれば成功です!
手順⑤:Google Apps Scriptのトリガーを調整する
GAS(Google Apps Script)のスクリプト画面で▶実行をクリックせずとも、一定時間ごと自動起動するような設定をします。
メニュー 編集 → 現在のプロジェクトのトリガー より、
トリガーを追加 へ。
次の内容でトリガーを 保存 します。
- 実行する関数:main
- 実行するデプロイ:Head
- イベントのソース:時間主導型
- 時間ベースのトリガーのタイプ:分ベースのタイマー
- 時間の間隔:5分おき
これでGAS(Google Apps Script)のスクリプトが、5分おきに自動起動(=5分おきにGmailの新着メールをLINEに通知)するようになりました。
参考:メール本文も含めLINEに転送する方法
もしGmailに届いた新着メールの本文まで含めLINEに通知したい場合、GAS(Google Apps Script)のスクリプトを下記へ変更して下さい。
var lineToken = "xxxxxxxxxxxxxx"; //LINE notify token var get_interval = 5; //●分前~現在の新着メールを取得 #--トリガーの時間間隔をこれに合わせる 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); //秒にして+3秒しておく //検索条件指定 var strTerms = '(is:unread after:'+ time_term + ')'; //取得 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() + "/"+ 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[Message]\n"+ myMsgs[i].slice(-1)[0].getPlainBody(); } 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]) } } }
新着メールの本文まで含め、LINEに転送されることを確認できれば成功です。
参考:Gmail以外のメールもすべてLINEに通知する方法
もしGmail以外のメールもすべてLINEへ転送したい場合、次の仕組みを構築すれば実現できます。
- すべてのメールをGmailアドレスへ転送させる
- Gmailに届くメールをLINEへ転送させる
2については、ここまで紹介した手順の通りです。
1については、メールアドレスごと「自動転送」設定を施せば、Gmailアドレスへ転送できます。
例えばPOPアクセスが可能なメールアカウント(例:Yahoo!メール / Outlook)の場合、Web版Gmailにて 設定 → アカウントとインポート より メールアカウントを追加する と進めば、
Gmailアドレス(@gmail.com)で、他アカウント(例:Yahoo!メール / Outlook)のメールを受信できます。
参考 Gmailヘルプ – 他のアカウントのメールを確認する
補足:
そのほかLINEに通知をまとめる方法
自動化アプリIFTTTと連携することで、様々な通知をLINEへまとめることが可能です。
IFTTT
IFTTT無料posted withアプリーチ
本記事で取り上げた「メールをLINEへ自動転送する」設定も、以前までならIFTTTと連携すればカンタンに実現できました。
が、2019年3月末でサポート終了となったため、現在では対応していません。
IFTTTとLINEの設定パターンを紹介します。
2台持ちで不在着信をLINEに通知する方法
下記リンクをタップすれば、自動でこのレシピを設定できます。
レシピ IFTTT – 不在着信があったらLINEに通知する
詳細は関連記事【IFTTT – 2台持ちの着信通知を統一する方法! AndroidからiPhoneへ電話やSMSの知らせを転送するアプリ】で解説しています。
twitterのエゴサーチ結果をLINEに通知する方法
詳細は関連記事【IFTTTとLINEを連携させてtwitterのエゴサーチ結果を自動化に通知する方法 [iPhone/Android]】で解説しています。
雨の天気予報をLINEに通知する方法
詳細は関連記事【雨の天気予報をLINEに通知する方法! IFTTTと連携して天候の変化を自動で知らせる [iPhone/Android]】で解説しています。
その他LINE関連の便利な豆知識まとめ
本ブログでは他にもLINEをもっと上手に使う情報を沢山掲載しています。
例えば、LINEには下記原則がありますが、
- 同じ端末で複数LINEアカウントを運用できない
LINEアプリのバックアップ機能を応用すれば、トーク履歴を維持したまま同スマートフォン上で複数アカウントを切り替えることができます。
同様の裏ワザ的な豆知識をまとめて、関連記事【LINE関連の便利な豆知識まとめ! 裏ワザ的な方法でiPhone/Androidのラインを使いこなそう】で解説しています。
〆:LINEにメール通知をまとめよう!
以上、メールをラインに転送する方法! iPhone/AndroidのGmailを自動でLINEに通知しよう の說明でした。
Gmailをチェックするのが面倒であれば、今回紹介した設定によりLINEへ通知が集約できて便利ですよ。
ぜひ、お試しあれ。
コメント
新着メールってチェックするまで永遠通知来る気がするのですが、自分のやり方が悪いのでしょうか。
画像は転送できないのでしょうか。
私もこれにハマっておりましたが、LINE notifyを設定したルームに招待することで解決できました。一度試してみて下さい。
https://notify-api.line.me のリクエストに失敗しました(エラー: 400)。サーバー応答の一部: {“status”:400,”message”:”LINE Notify account doesn’t join group which you want to send.”}(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 12、ファイル「コード」)
このエラーが出てしまい、どうしていいかわかりません;;
ご教授お願いいたします。
私もこれにハマっておりましたが、LINE notifyを設定したルームに招待することで解決できました。一度試してみて下さい。
https://notify-api.line.me のリクエストに失敗しました(エラー: 400)。サーバー応答の一部: {“status”:400,”message”:”LINE Notify account doesn’t join group which you want to send.”}(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 12、ファイル「コード」)
上記が出て設定が進みません。
グループラインにLINE notifyを招待すれば解決しますか?
ご教示いただけますと幸いです。
すごく役に立ちました!
1000文字までしか転送できないのですが、どうしたら良いでしょうか?
(分割するなど)
とっても参考になりました。ありがとうございます。
一つ質問なのですが、「メール自動振り分け設定」したフォルダだけのMailをLINEに転送することは可能でしょうか?
アドバイスいただければ幸いです。
よろしく願いします。
私も、「メール自動振り分け設定」したフォルダだけのMailをLINEに転送と、添付ファイルの転送がしたいです。
お解りになる方がいましたら、ご教示のほど宜しくお願い致します。
ラベル付け(振り分け)をしたメールのみを通知するには「//検索条件指定」の部分にラベルを検索条件として追加すれば良いかと思います。
var strTerms = ‘(label:XXXXX is:unread after:’+ time_term + ‘)’;
大変参考になりました。有難うございます。
拝見しました。大変素晴らしいものだと思います。私は今グループラインでそのbotを使って私に送られてきたメッセージをグループの仲間に共有する、ということをしているのですが、その際に送られてくるメッセージの中の、メールアドレスを消去したいです。どうしたらよいでしょうか。私自身多少の経験はあるのですが、思いつかなかったため質問させていただきました。
大変参考になりました。ありがとうございます。
一点、getMonth()だけは0-11で返るということで、値を+1する必要があるかと思います。
月が1ヶ月ずれて送られてきます。
どうすればいいのでしょうか?
もう一点、受信時刻の「分」が1桁の場合に、ゼロ埋めされる方がいいかなと思います。
大変参考になりました。
一点気になるのが、1日に数回と頻度は低いのですが、
main サーバーエラーが発生しました。しばらくしてからもう一度試してください。
というエラーが発生することがあり、原因が分かりません。
お解りになる方がいましたら、ご教示のほど宜しくお願い致します。
アクセストークンの発行ボタンが出なくて困ってます。
トークルームまでは選択できますがその先に進めません。
何方か教えて下さい。
おかげ様で転送出来るようになりました。
ただ同じメールが何回も転送されて困ってます。
何か対策は有りますでしょうか?
宜しくお願いします。
大変勉強になりました、ただスレッドに複数ある場合にMAILを取得できずにずっとMAILが送られてきますがこれの対応できますか?
このサイトを参考に転送できるようになりました。
転送したGーMail側に既読を付けたいのですが中々上手くいきません教えて頂けませんでしょうか?
ほぼ同様のことをしたかったので、非常に参考になりました。ありがとうございます。
日時の部分は、下記のようにする方が自由度が高く簡単かと思います。
Utilities.formatDate(myMsgs[i].slice(-1)[0].getDate() , ‘Asia/Tokyo’, ‘MM/dd HH:mm’)
大変参考になりました。
最近のスマートウォッチはe-mail着信通知を装備していないものがあり、このスクリプトを実行することで補うことができ、大変ありがたく感謝しています。
そこで、お願いなのですが最初の [Gmail] は不要であります。
スマートウォッチには文字制限があるのでできるだけ表示を多くするためです。
また、[Gmail] がなくてもメールとわかるからです。
ぜひよろしくお願いします。
詳しいことはわからないので上記を丸々コピーして手順通りに設定したらラインに転送できるようになりましたが、日付が4/20になってしまいます。
コメントにも少しあるようですが、よくわからないため、どこをどう変えればなおるか教えていただけませんでしょうか。
こちらを参考にしばらく前より実行させていただいておりましたが
先日よりメール本文の改行全てに”>”が
挿入されるようになって見づらくなってしまいました。
これを表示させないにはどうしたらいいでしょうか?
そもそも改行を削除してしまっても読みずらくなってしまいます。
LineNotifyかGASのどちらかの仕様変更ではないかと思いますが
よくわかりません。
よろしくお願いいたします。