GMailで受信したメールを翻訳して転送

GMail
05 /09 2015
Google Apps Scriptというものを使えば、GMailをいろいろ操作できることが最近分かった。
詳しくは「初心者のためのGoogle Apps Scriptプログラミング入門」などを参照。

さて、最近RWatchというApple WatchのAndroid版かつ劣化版を買ったのだが、さすが安物、中国製なのに漢字が表示できない。
いろいろ試してみたが、どうやらRWatch自体が、(ごく一部の記号を除いて)マルチバイト文字を持っていないようだ。
「カタカナは表示できる」とか「漢字の一部が文字化けするがそこそこ表示できる」という情報もあったが、私のRWatchは運悪く、ほとんどの全角文字が表示できない。
これだと、せっかくRWatchがメール着信をお知らせしてくれても、送り主も件名も全く読めない。
そこで、RWatchで日本語を表示するのは諦め、メールを日英翻訳して、RWatchに英語メールをお知らせしてもらうようにすればいいと考えた。

流れとしては以下の通り。
1. GMailがメールを受信する。
2. あらかじめGMail側でフィルタを作っておき、特定の発信者からのメール(または特定のキーワードを含むメール)には、ラベル「R」が付くようにしておく。
3. スクリプトが作動し、ラベル「R」が着いているメールに対して、以下の処理を行う。
(1) 件名と本文を日英翻訳。
(2) 翻訳結果を別のメールアドレスに転送。
(3) ラベル「R」を剥がす。(無限ループ回避のため)
4. スマホ上のメール受信アプリ(GMailではないもの。私はK-9Mailというアプリを使用した)にて、別アドレスのメールを受信する。
5. スマホ上のRWatch用アプリにて、予め「Notification app」の設定をしておく。
これはつまり、スマホのステータスバーに表示されるメッセージの内、どれをRWatchに転送するかを選択するもの。
「GMail」の転送をOFFにして、その代わりに「K-9Mail」の転送をONにしておく。
これによって、K-9Mailで受信したメールが、スマホのステータスバーに表示されると同時に、RWatchにも表示される。

ということで、Google Apps Scriptで、3.の機能を実装できればOKという事になる。
以下がそのスクリプト。


function Gmail_translate(){
// 転送先アドレス
var fw_addr = 'hoge@hoge.jp';
// ラベル"R"
var labelR = GmailApp.getUserLabelByName("R");
// ラベル"R"が付いたメールスレッド
var threads = labelR.getThreads();
//Logger.log("threads.length = " + threads.length);
for (var i in threads) {
// スレッド表示がONになっているかもしれないので、スレッド毎に各メールを取得する
var messages = threads[i].getMessages();
for (var j in messages) {
var message = messages[j];
// 既読メッセージに対しては何もしない
if (!message.isUnread())
continue;
// 発信者, 件名, 本文, 送信日時を得る
var from = message.getFrom();
var subject = message.getSubject();
var body = message.getPlainBody().replace(/\r/g, "").replace(/\n\n/g, "\n").replace(/\n\n/g, "\n");

// 日英変換
var from_en = LanguageApp.translate(from, 'ja', 'en');
var subject_en = LanguageApp.translate(subject, 'ja', 'en');
var body_en = LanguageApp.translate(body, 'ja', 'en');
// bodyを加工
// ">"で始まる行はカット
//#body_en = body_en.replace(/^>.*$/mg, ""); //←これだと空行が残る
body_en = body_en.replace(/>[^\n]+\n/g, "");
// From:を偽装することはできないので、本文の1行目にFromを入れる
// ついでに件名を2行目に入れる
var body_en = "From:" + from_en + "\n" + "Subj:" + subject_en + "\n\n" + body_en;

// メール送信
GmailApp.sendEmail(fw_addr, subject_en, body_en);
}
// スレッドの全メールからラベル"R"を剥がす
threads[i].removeLabel(labelR);
}
}


セットアップの手順:
1. `PCで、GMailにログインした状態で、Googleドライブを開く。
2. 左メニューから [新規]-[その他]-[Google Apps Script]を選ぶ。
[Google Apps Script]が選べないときは、[新規]-[その他]-[+ アプリを追加]を選び、検索窓に"Google Apps Script"を入力して検索し、インストールする。
3. 「空のプロジェクト」を選ぶ。
→「無題のプロジェクト」が開き、コード.js というファイルの画面になる。
4. function myFunction() を function Gmail_translate() に書き換えて、 関数の中身を上述のソースの通りにして、保存する。
→ファイル名を聞かれるので、"Gmail_translate.js"にする。
5. [リソース]-[現在のプロジェクトのトリガー]。
→ダイアログが開くので、以下のように設定する。
Gmail_translate_trigger.gif

これで分かるように、スクリプトが作動するトリガーは「メールを受信したとき」ではなく、「1分ごと」である。
したがって、GMailにメールが届いてからスクリプトが作動するまで、最大1分待つことになる。
「1分ごと」でなく「5分ごと」の方が、GMail的には負荷が減って良いと思うが、デバッグ段階では1分の方が良い。




スポンサーサイト

Paq

忘れっぽい中年プログラマが、日々の開発作業の中で、忘れると困ることを書き留めています。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。