Galaxy シリーズを中心としたAndroidのカスタマイズの覚書です。
現在のメイン機種はGalaxy Note 9(グローバル版)。
10年目を迎え、古い投稿を整理・改訂しました。
カスタマイズのまとめ(リンク集)はこちらです。

2015/09/03

Galaxy Note 5のRoot化(SM-N920S : 韓国SKテレコム版)


Galaxy Note 5(SM-N920S : 韓国SKテレコム版)を購入しましたので、早速、Root化してみました。

Galaxy Note 5(SM-N920)やGalaxy S6 edge+(SM-G928)をRoot化するには、Recoveryを挿し替えてSuper SUをインストールするだけでなく、KernelをカスタムKernelに差し替える必要があります。

XDAを見ると、Note 5の場合、9/2時点で、2つのカスタムのKernelの開発が進んでいます。

http://forum.xda-developers.com/note5/development

1) arter97 kernel
2) Noble Kernel

今回は、より安定しているとの評判の”arter97 kernel”を導入しました。

■Root化のリスクについて

a) カスタムKernelはそれぞれの機種(同じ"Note 5"でも機種毎に"SM-N920S", "SM-N920K"の様に末尾にキャリアを表すアルファベットが付きます)専用の物を使用します。異なる機種用のKernelを使うと無限ループに陥ることがありますので注意して下さい。

b) カスタムKernelは、付加機能がある反面、端末が安定しなかったり、一部機能が上手く動作しなかったりすることがあります。9/2時点では、"Noble Kernel"では通話中に再起動する等の問題が、"arter97 kernel"ではDT2W(Knock-On) が上手く動作しない等の不具合が指摘されています。(詳しくはXDAのそれぞれのKernelのスレッドを参照してください。)

c) root化すると(正確にはODINからRecoveryまたはKernelを一度でもフラッシュした時点で)KNOX counterが更新され、KNOX機能が使えなくなります。一度更新されたKNOX counterは基板交換(有償修理扱い)しないと元に戻せません。KNOXの意味や必要性が判らない場合は、Root化は避けた方が良いでしょう。

d) Note 5やS6 Edge+の目玉機能のひとつの"Samsung Pay"もRoot化済端末では機能しません。

e) ファームウェアを改変した時点で、端末の保証や修理が効かなくなる可能性があります。

こうしたリスクを理解した上で自己責任でお願いします。

■Root化用のファイル

PC側でODINが使えることが前提です。

http://www.mediafire.com/download/3ali333pqcr10g1/Odin3_v3.10.7.zip

以下はSM-N920S(韓国SKT版Note 5)用です。お使いの機種に合ったKernelを使用して下さい。

追記)arter97 kernelの7.0-alpha2以前のバージョンは一部機種で音声通話に問題があります。7.0-beta1以降を使用してください。

a) arter97 kernel

1. Kernel :
 http://arter97.com/browse/exynos7420/kernel/3.6/n920skl/
 arter97-kernel-n920skl-3.6.zip
2. Recovery :
 http://arter97.com/browse/exynos7420/kernel/3.6/n920skl/
 arter97-recovery-n920skl-3.6-philz_touch_6.59.0.tar.md5
3. SuperSU :
 https://www.androidfilehost.com/?fid=24052804347801932
 BETA-SuperSU-v2.49.zip

注)arter97 Kernelがサポートしているf2fsを使うためには、TWRPではなく、上記のPhilZ Touch recoveryを使用する必要があります。

b) Noble Kernel

http://forum.xda-developers.com/note5/development/dev-pre-root-firmware-twrp-testing-t3183877

1. Kernel :
 https://www.androidfilehost.com/?w=files&flid=37907
 Noble-Kernel-N920S_Alpha1.zip
2. Recovery :
 https://www.androidfilehost.com/?w=files&flid=37782
 TWRP-2.8.7.1-Alpha_N920T.tar.md5
3. SuperSU :
 https://www.androidfilehost.com/?w=files&flid=37782 
 BETA-SuperSU-v2.49.zip

■Root化手順



”arter97 kernel”を使いたかったのですが、9/2時点ではODINからカスタムKernelを先に焼かないとRecoveryを燒くことが出来ませんでしたので、下記の様な少し面倒な手順を踏みました。

1. 必要に応じて英語表示か日本語表示にします。(注1
2. OEM Unlock解除を有効にします。(注2
3. PC上で"Noble Kernel"(Noble-Kernel-N920S_Alpha1.zip)を解凍し".md5"ファイル(Noble-Kernel-N920S_Alpha1.tar.md5)を取り出します。
4. 端末をダウンロード・モードで立ち上げます。(注3、(注4
5. ODINからNoble Kernelを焼きます。
6. 同様に、お好みのカスタムRecovery(ZIPファイル)をODINから焼きます。
7. 端末に"arter97 kernel"(arter97-kernel-n920skl-3.6.zip)をコピーします。
8. 端末をリカバリ・モードで立ち上げ、カスタムKernelをフラッシュします。(注5
9. 必要に応じてSuperSUアプリを起動し、SUをアップデイトします。
10. 必要に応じて、Busy Boxをインストールします。(注6

注1) 日本語ロケールは標準でサポートされています。
注2) OEM Unlockを有効にするには、"設定"=>"端末情報"=>"ソフトウェア情報"で"ビルド番号"を7回タップして"開発者向けオプション"を有効にし、"開発者向けオプション"メニュー内の"OEMロック解除"を有効にします。
注3) ダウンロード・モードでの立ち上げは「電源+ボリュームダウン+ホーム」長押しです。
注4) ダウンロード・モードでハングアップした場合等のソフトウェア・リセットは「電源+ボリュームダウン」長押しです。
注5) リカバリ・モードでの立ち上げは「電源+ボリュームアップ+ホーム」長押しです。
注6) Busy Box : https://play.google.com/store/apps/details?id=stericson.busybox


2015/07/09

PushbulletのPushをワンクリックで一括削除するスクリプト(Chrome用)


PushbulletでAndroid端末にPush通知している(下記投稿参照)のですが、確認後のPushを一括削除出来ない点が少し不便なので、Chrome上で動くスクリプトを作ってみました。

(参考)Pushbullet APIでOutlookへの新規メール受信をAndroidにPush通知する
http://galaxy-shw-m110s.blogspot.jp/2014/12/pushbullet-apioutlookandroidpush_5.html

このスクリプトをPCのChromeのブックマークに登録しておくと、ワンクリックで全てのPushを一括削除出来ます。(Android端末側ではなく、PC側での操作になります。)
参考にしたサイト
以下を参考にしました。(参照先のスクリプトはPushbulletサイトの変更により動作しなくなっていますので、一部書き換えました。)
http://www.reddit.com/r/PushBullet/comments/2c93la/delete_pushes_from_queue_en_masse_if_thats_what/
スクリプト
javascript:(
function() {
    var counter = 0; /*Declare counter for how many pushes we've deleted*/

    var pushes = document.body.getElementsByClassName("pushbubble"); /*Get all push elements*/

    for (i = 0; i < pushes.length; i++) { /*Start the loop*/
        pushes[i].getElementsByClassName("x pointer")[0].click(); /*Click delete button*/

        counter++; /*Increment push delete counter*/
    }

    alert(counter + " pushes deleted"); /*Inform the user that we're done :D*/
}
)()
 

ブックマークへの登録方法
Chromeのメニューからブックマーク マネージャを開きます。


[管理][ページを追加]を開きます。


[名前]の欄に任意の名前(例:Delete All Pushes)を記入し、[URL]の欄に上記スクリプトを貼り付けてブックマークに登録します。




Pushbulletのサイトを開いた状態でこのブックマークをクリックするとPushが一括削除されます。



2015/05/06

Nexus 7(2012 WiFi)のAndroid 5.1.1(LMY47V)へのアップデイトとroot化


Nexus 7(2012)Wi-Fi モデル用のAndroid 5.1.1の公式ファームウェア(LMY47V)が配布されていますが、root化済みの端末ではOTAでのアップデイトは出来ませんので、ファクトリーイメージから更新し、再度root化しました。

【必要なファイル】

以下の3つのファイルを用意します。

1)ファクトリーイメージ

Android 5.1.1のファクトリーイメージを以下からダウンロードします。

 Factory Images for Nexus Devices
 https://developers.google.com/android/nexus/images?hl=ja
  "nakasi" for Nexus 7 (Wi-Fi) 5.1.1 (LMY47V)
 nakasi-lmy47v-factory-b48bd71d.tgz

2)CF-Auto-Root

 CF-Auto-Root-grouper-nakasi-nexus7.zip
 http://download.chainfire.eu/295/CF-Root/CF-Auto-Root/CF-Auto-Root-grouper-nakasi-nexus7.zip

3)カスタムリカバリー

 Clockworkmod
 http://www.clockworkmod.com/rommanager
 recovery-clockwork-touch-6.0.4.3-grouper.img

【アップデイト手順(ファクトリーイメージから)】

1)ファクトリーイメージから以下のファイルを取り出し、SDKの"/platform-tools/"にコピーします。

 system.img
 boot.img

 (参考)フォルダ構成は下記となっています。

 nakasi-lmy47d-factory-bc93dab8.tgz
    └ (略)
    └ image-nakasi-Lmy47y.zip
        └ boot.img
        └  (略)
        └ system.img

2)SDKから以下の操作をしてOSをUpdateします。

 adb reboot bootloader
 fastboot reboot-bootloader
 fastboot flash system system.img
 fastboot flash boot boot.img
 fastboot format cache
 fastboot reboot

【root化】

1)以下のコマンドで端末をbootloaderモードにします。

 adb reboot bootloader

2)CF-Auto-Rootを解凍して"root-windows.bat"をクリックします。

 (参考)フォルダ構成は下記となっています。

 CF-Auto-Root-grouper-nakasi-nexus7.zip
    └ (略)
    └ root-windows.bat

【カスタムリカバリーの導入】

1)以下のファイルをSDKの"/platform-tools/"にコピーします。

 recovery-clockwork-touch-6.0.4.3-grouper.img

2)SDKから以下の操作をしてカスタムリカバリーを導入します。

 adb reboot bootloader
 fastboot flash recovery recovery-clockwork-touch-6.0.4.3-grouper.img
 fastboot reboot


2014/12/05

Pushbullet APIでOutlookへの新規メール受信をAndroidにPush通知する


Last Update : 09/Jul/2015

Outlookへの新規メール受信時にPusubullet APIを使ってAndroid端末にPush通知するようにしてみました。


想定される環境
以下の様な環境下での使用を想定しています。

・職場のセキュリティ・ポリシーで受信メールそのものの自動転送は禁止されている。
・Gmail等のメールやSNSの使用もProxyで撥ねられる。
・モバイル端末からVPNやセキュアなクライアントアプリを利用したメール閲覧は許可されている。
・クライアントアプリへのメールのPushサービスが提供されていない。
・職場のメールはOutlook(Exchangeサーバー)でProxy環境下。

PCのバックグラウンドで動作しますので、PCは常に稼働したままで、Outlookも常に起動したままにしておく必要があります。

メール本文を通知する事も出来ますが、そうすると、実質、自動転送と同じになってしまいますので、表題と送信者名だけにしています。

(追記)ご要望がありましたので、Push通知に余計な空白文字や改行、改頁、タブ等を削除したメール本文を含めるオプションを追加しました。(本文の有無の設定や文字数の制限も可能です。)

*ご利用にあたっては各職場のセキュリティポリシーに抵触しないかをご確認ください。
全体の動作の流れ
・Outlookのマクロで新規メール受信時に表題・送信者名・本文をテキストファイルに書き出す
・Outlookのマクロからnodejsのスクリプトを起動
・nodejsのスクリプトでテキストファイルから表題・送信者名・本文を読み込む
・nodejsのスクリプトからPushbullet APIを使って端末にPush通知
必要なもの
・ nodejs本体
・ nodejs用Proxy tunnelモジュール (=tunnel:Proxy環境下で必要)
・ nodejs用encord/decodeモジュール(=iconv-lite:Unicode対応に必要)
・ Outlook用マクロ(自作、詳細下記)
・ nodejs用Pusubullet APIスクリプト(自作、詳細下記)
・ スクリプト起動用バッチファイル
・ スパムフィルタ用テキストファイル *2種類
・ Pushbulletアプリ(Android側:https://play.google.com/store/apps/details?id=com.pushbullet.android)
事前に調べておくこと
・Pushbullet Access Token(https://www.pushbullet.com/#settings/account)
・Pushbullet Device iden (https://www.pushbullet.com/?device_iden=)
・ProxyのURI(例:http://xxx.xx.xxx.x:8080)
nodejsの準備
1)nodeJS本体


nodejs
http://nodejs.org/

nodejsをインストールしたら、以下のコマンドでproxy環境下でもnpmが使えるようにしておきます。(XXX部分はProxyのURIに置き換えます。)

npm config set proxy http://xxx.xx.xxx.x:8080
npm config set https-proxy http://xxx.xx.xxx.x:8080
npm config set registry http://registry.npmjs.org/

2)nodejs用モジュール

2-1)Proxy通過用モジュール

tunnel
https://www.npmjs.org/package/tunnel
インストール方法:npm install tunnel

2-2)encode/decode用モジュール

iconv-lite
https://www.npmjs.org/package/iconv-lite
インストール方法:npm install iconv-lite

注)本家iconvやそのパッチ版のinconv-jsは当方の環境ではnpmからインストール出来ませんでしたので今回は使用しませんでした。

iconv
https://www.npmjs.org/package/iconv

iconv-js
https://www.npmjs.org/package/iconv-js
Outlook用マクロの作成
新規メール受信時にメールから表題・送信者名・本文をテキストファイルに書き出し、nodejsスクリプトを起動してその後の処理を引き継ぐマクロです。

' PushBullet連携マクロ Ver 1.08
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objItem
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    If objItem.MessageClass = "IPM.Note" Then
        AutoForward objItem
    End If
End Sub

Private Sub AutoForward(ByVal objMail As MailItem)
    '
    Dim strFileName As String
    Dim fwMail As MailItem
'   Dim i As Integer
    Dim strSenderName As String
    Dim strSenderEmailAddress As String
    Dim strSubject As String
    Dim strbody As String
'
    ' 受信メールの自動仕分けルールや迷惑メールフィルタと併用した場合のエラー対策
    On Error GoTo ErrorTrap
    '
    ' 受信メールから表題、送信者名、本文を取得
    strSubject = objMail.Subject    ' 表題を取得
    strSenderName = objMail.SenderName  ' 送信者名を取得
    strSenderEmailAddress = objMail.SenderEmailAddress  ' Emailアドレスを取得
    strbody = objMail.Body ' 本文を取得
    '
    ' 送信者名と送信者のEmailアドレスの表示処理
    ' 送信者名と送信者のEmailアドレスが同じ場合はEmailアドレスのみ表示
    If strSenderName = strSenderEmailAddress Then
        strSenderName = strSenderEmailAddress
    ' 送信者名と送信者のEmailアドレスが異なる場合は「送信者名+」で表示
    Else
        ' 送信者のメールアドレスがEmailの場合
        If InStr(strSenderEmailAddress, "@") Then
            strSenderName = strSenderName + "<" + strSenderEmailAddress + ">"
        ' 送信者のメールアドレスがExchangeの場合はSMTPアドレスを取得して表示
        Else
            strSenderEmailAddress = _
            objMail.Sender.PropertyAccessor.GetProperty("http://schemas." _
            & "microsoft.com/mapi/proptag/0x39FE001E")
            strSenderName = strSenderName + "<" + strSenderEmailAddress + ">"
        End If
    End If
    '
    ' ファイルの書込
    '
    ' 表題
    Dim txt1 As Object
    Set txt1 = CreateObject("ADODB.Stream")
    txt1.Type = adTypeText
    txt1.Charset = "utf-8"  ' 文字コードを指定
    txt1.Open
    txt1.WriteText strSubject, adWriteChar
    txt1.SaveToFile ("C:\Program Files\nodejs\titleutf8.txt"), adSaveCreateOverWrite
    txt1.Close
    Set txt1 = Nothing
    '
    ' 送信者名
    Dim txt2 As Object
    Set txt2 = CreateObject("ADODB.Stream")
    txt2.Type = adTypeText
    txt2.Charset = "utf-8"   ' 文字コードを指定
    txt2.Open
    txt2.WriteText strSenderName, adWriteChar
    txt2.SaveToFile ("C:\Program Files\nodejs\nameutf8.txt"), adSaveCreateOverWrite
    txt2.Close
    Set txt2 = Nothing
    '
    '本文
    Dim txt3 As Object
    Set txt3 = CreateObject("ADODB.Stream")
    txt3.Type = adTypeText
    txt3.Charset = "utf-8"   ' 文字コードを指定
    txt3.Open
    txt3.WriteText strbody, adWriteChar
    txt3.SaveToFile ("C:\Program Files\nodejs\mailutf8.txt"), adSaveCreateOverWrite
    txt3.Close
    Set txt3 = Nothing
    '
    ' Nodejsのスクリプトを起動
    Dim rc As Long
    rc = Shell("C:\Program Files\nodejs\Run.bat", vbHide)
'
ErrorTrap:
'
End Sub


このマクロは新規メール受信時に自動起動します。

Exchangeメールの場合はサーバーにアクセスして送信者のEmailアドレスを取得する処理も行っています。

日本語以外のUnicode文字(韓国語等)の文字化け防止の為、表題・送信者名・本文をテキストファイルに書き出す際に文字コードを指定する様にしています。

テキストファイルに書き出した後、マクロの最後の部分で実行用のバッチファイルからnodejsのスクリプトを実行して処理を引き継ぎます。

このマクロは初回実行時に"C:\Program Files\nodejs\"に以下の3つのテキストファイルを自動作成しす。

titleutf8.txt
nameutf8.txt
mailutf8.txt

OfficeのマクロからShift-JIS以外の文字コードでファイルを出力する為に、ADODB.Streamを使用しますので、Visual Basic Editorの[ツール][参照設定]から"Mctosoft Active data Object X.X Library"を有効にしておいてください。


マクロの登録やデジタル署名の仕方等は下記投稿を参照してください。(今回のマクロには下記のマクロの機能の一部を移植しました。)

Outlook自動転送マクロ
http://galaxy-shw-m110s.blogspot.kr/2013/02/outlook.html


Pushbullet API用のnodejsスクリプトの作成
以下のスクリプトを作成し、"Notify.js"というファイル名にして"C:\Program Files\nodejs\"に置きます。

このスクリプトではテキストファイルから表題・送信者名・本文を読み込んで、Pushbullet APIを使って端末にPush通知を送ります。


// Pushbullet連携スクリプト(本文サマリー転送) ver 1.13

// Proxy Tunnelの設定
var tunnel = require('tunnel');
var tunnelAg = tunnel.httpsOverHttp({
    proxy: {
        host: 'XXX.XX.XXX.X',
        port: 8080
    }
});

// PushBulletの設定
var https = require('https');
options = {
    host: 'api.pushbullet.com',
    port: 443,
    path: '/v2/pushes',
    method: 'POST',
    auth: 'XXXXX:',
    headers: { 'Content-Type': 'application/json' },
    agent: tunnelAg
};

var fs = require('fs');
var iconv = require('iconv-lite');

//送信者名をファイルから読み込みデコード
var name = fs.readFileSync('./nameutf8.txt');
var strname = iconv.decode(new Buffer(name), "utf8");

// 送信者名フィルタ
var strnamereplace = strname.replace(/(\s+)|(\(+)|(\)+)/g, "");
var spamlist = fs.readFileSync('./spamlist.txt');
var strspamlist = iconv.decode(new Buffer(spamlist), "utf8");
var strspamlistreplace = strspamlist.replace(/(\s+)|(\(+)|(\)+)/g, "");
var spamcheck = strspamlistreplace.search(strnamereplace);
if (spamcheck == -1) 
 {

//表題をファイルから読み込みデコード
var title = fs.readFileSync('./titleutf8.txt');
var strtitle = iconv.decode(new Buffer(title), "utf8");

//表題フイルタ
var strtitlereplace = strtitle.replace(/(\s+)|(\(+)|(\)+)/g, "");
var strtitlereplacesub = strtitlereplace.substring(0,8);
var keyword = fs.readFileSync('./keyword.txt');
var strkeyword = iconv.decode(new Buffer(keyword), "utf8");
var strkeywordreplace = strkeyword.replace(/(\s+)|(\(+)|(\)+)/g, "");
var keywordcheck = strkeywordreplace.search(strtitlereplacesub);
if (keywordcheck == -1) 
 {

// 表題と本文をファイルから読み込みデコード
var mail = fs.readFileSync('./mailutf8.txt');
var strmail = iconv.decode(new Buffer(mail), "utf8");

//本文から空白削除と文字数制限して送信者名と結合
var strsummary = strmail.substring(0,180);
var strsummaryreplace1 = strsummary.replace(/([ ]+)|(\r+)|(\t+)|(\n+)|(\f+)/g, "");
var strsummaryreplace2 = strsummaryreplace1.replace(/([  ]+)/g, " ");
var strbody = strname + strsummaryreplace2;

// Pushbullet APIに送信
var req = https.request(options, function (res) {
    body = ''
    res.on('data', function(chunk) {
        body += chunk;
    });
    res.on('end', function() {
    });
});
req.on('error', function (e) { console.error(e); });
var params = {
    device_id: "XXXXX",
    type: 'note',
    title: strtitle,
    body: strbody
};
req.write(JSON.stringify(params));
req.end();

}
else{
};
}
else{
};


以下の投稿を参考にさせて頂きましたが、pushbullet APIの仕様が変更されていますので、"hostname"と"path"の部分は修正しています。

Having trouble posting notifications with node.js
http://www.reddit.com/r/PushBullet/comments/18stku/having_trouble_posting_notifications_with_nodejs/

変更した箇所:
hostname: 'www.pushbullet.com', =>   host: 'api.pushbullet.com',
path: '/api/pushes', =>  path: '/v2/pushes',

また、"title"や"body"は外部テキストファイルから読み込む様に変更して、文字化け防止の為のdecode処理も追加しています。

簡易スパムフィルタ機能も追加しました。(設定方法等は【5】参照。)

以下の項目はご自分の環境に合わせて設定して下さい。

1)Proxy

"host: 'xxx.xx.xxx.x'"にお使いのProxyのURIを記入してください。

// Proxy Tunnelの設定
var tunnel = require('tunnel');
var tunnelAg = tunnel.httpsOverHttp({
    proxy: {
        host: 'xxx.xx.xxx.x',
        port: 8080


2)Pushbullet Access Token

"auth : 'xxxxx' "にPushbullet Access Token(32桁)を記入して下さい。

// PushBulletの設定
var https = require('https');
options = {
    host: 'api.pushbullet.com',
    port: 443,
    path: '/v2/pushes',
    method: 'POST',
    auth: 'xxxxx:',
    headers: { 'Content-Type': 'application/json' },Access Tokenは下記で確認出来ます。

Pushbullet Access Token
https://www.pushbullet.com/#settings/account


3)Device IDEN

"device_id:"xxxxx""に端末のiden(22桁)を記入してください。

// Pushbullet APIに送信
var req = https.request(options, function (res) {
    body = ''
    res.on('data', function(chunk) {
        body += chunk;
    });
    res.on('end', function() {
    });
});
req.on('error', function (e) { console.error(e); });
var params = {
    device_id: "xxxxx",
    type: 'note',

端末idenは下記のページで端末名をクリックするとブラウザのURL欄に表示されます。

Pushbullet Device iden
https://www.pushbullet.com/


4)本文の有無と文字数制限

"var strsummary = strmail.substring(0,180);"でPush通知に含める本文の文字数を指定します。

//本文から空白削除と文字数制限して送信者名と結合
var strsummary = strmail.substring(0,180);
var strsummaryreplace1 = strsummary.replace(/([ ]+)|(\r+)|(\t+)|(\n+)|(\f+)/g, "");
var strsummaryreplace2 = strsummaryreplace1.replace(/([  ]+)/g, " ");
var strbody = strname + strsummaryreplace2;

本文は余計な空白文字や改行、改頁、タブ等を削除して送信しますので、この文字数はそれらを除いた文字数になります。

この部分を"0(ゼロ)"にするとPush通知に本文が含まれなくなります。

当方の環境では端末の通知領域に表示されるのは送信者名を含めて200文字迄でしたので、添付の例では送信者名を差し引いて180文字にしています。(200字を超える文字数を送信した場合も、Pushbulletアプリを開けば見ることは出来ます。)

注)nodejsからのPushbullet APIを使ったPush通知によく使われるpushbulletモジュールは、自宅PCからは使えましたが職場のProxy環境下では上手く動作しませんでしたので、今回は使用しませんでした。

pushbullet(nodejsモジュール)
https://www.npmjs.org/package/pushbullet
スクリプト実行用バッチファイルを用意
NodejsスクリプトをOutlookのマクロから実行する為に、下記の2行だけのバッチファイルを作成して"C:\Program Files\nodejs\"に置きます。

Run.bat
cd C:\Program Files\nodejs
node Notify.js
スパムフィルタ用バッチファイルを用意
簡易スパムフィルタ用の下記2つのテキストファイルを"C:\Program Files\nodejs\"に置きます。

spamlist.txt
keyword.txt

文字コードはutf-8にしてください。

1)spamlist.txt

送信者名をこのファイルに記入しておくと、その送信者からのメールについては端末にpush通知は送られません。(送信者名は完全に一致する必要があります。)

送信者名毎の改行の有無は問いませんが、改行があった方が見やすいと思います。

PCのブラウザでpushbulletを開き、不要な通知の送信者名をこのファイルにコピペしておくと良いでしょう。

2)keyword.txt

キーワードをこのファイルに記入しておくと、表題がキーワードで始まる場合は端末にPush通知を送りません。(前方一致に近い動作になります。)

キーワード毎の改行の有無は問いませんが、改行があった方が見やすいと思います。

デフォルトでは表題の頭9文字(空白削除後)をキーワードリストと比較していますが、お好みに合わせて"var strtitlereplacesub = strtitlereplace.substring(0,8);"の部分を調整して下さい。

//表題フイルタ
var strtitlereplace = strtitle.replace(/(\s+)|(\(+)|(\)+)/g, "");
var strtitlereplacesub = strtitlereplace.substring(0,8);
var keyword = fs.readFileSync('./keyword.txt');

全体のファイル構成
全体のフォルダ構成は下記の様になります。

C:\Program Files\nodejs
     └ node_modules
             └ iconv-lite
             └ npm
             └  tunnel
             └ (略)
     └ keyword.txt
     └ mailutf8.txt
     └ nameutf8.txt
     └ node.exe
     └ Notify.js
     └ Run.bat
     └ spamlist.txt
     └ titleutf8.txt
     └ (略)
問題点・今後の課題
Outlookの仕分けルールを使って受信時に自動的にフォルダーに移動しているメールについても、マクロが仕訳ルールよりも先に動作してしまう為、端末に通知が送られてしまいます。

必要に応じて例外処理を追加すると良いでしょう。


(追記)Ver 1.09で簡易スパムフィルタ機能を追加しました。

また、Android用のPushbulletアプリ(~ver 15.2.5)では受信したnoteの一括選択が出来ず、溜まったnoteの整理が不便です。

アプリ側が改善される迄は、PCのブラウザからPushbulletにアクセスしてマウスでXボタンを連打して消去するのが良いでしょう。(一番良いのは、Pushbullet APIに古いnoteを整理する機能が追加されて自動化出来るようになる事ですが。)

(追記)PC用のChromeの拡張機能で[Select All][Delete Selected][Refresh Boxes][Delete All]の4ボタンを追加するものがありました。





Pushbully: Bulk Delete Pushes

https://chrome.google.com/webstore/detail/pushbully-bulk-delete-pus/kamddpgihdoijjoekiambdmbngpgiaoi

(追記)Pushbulletサイトの改変により上記Chromeの拡張機能が動作しなくなりましたので、以下のスクリプトを作成しました。

PushbulletのPushをワンクリックで一括削除するスクリプト(Chrome用)
http://galaxy-shw-m110s.blogspot.jp/2015/07/pushbulletpushchrome.html


システムの改竄やカスタマイズには端末が起動しなくなったり保証の対象外となるリスクが伴います。自己責任にてお願い致します。