min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

Windows10 Gmailで複数の宛先に(それぞれ違う添付ファイルつけて)メールを一括送信する

複数の宛先それぞれ違う添付ファイルをつけてメールを一括送信したい。

 

例えば

大阪事業所 には A添付ファイル

九州事業所 には B添付ファイル

のようなメールを一括で送信するようなケース。

 

WindowsバッチJScriptで実現する。

qiita.com

 

完成イメージはこれ。

f:id:min117:20190419012906p:plain

 my_GMAIL_DATA.csv に「件名,本文,宛先,BCC,添付ファイル名」を書いて

 my_GMAIL.bat を実行すれば

my_GMAIL.js がCALLされてメール送信し)

 宛先Gmailにメールが届く。

 送信ログも記録される。

 

 

 

ソースはこれ。

 

my_GMAIL.bat

f:id:min117:20190419013745p:plain



my_GMAIL.js

f:id:min117:20190419014828p:plain

f:id:min117:20190419014930p:plain

 

メール本文になるテキストファイルはこれ。

f:id:min117:20190419015152p:plain

 

自動でメールに添付されるファイル(test.txt)はこれ。

f:id:min117:20190419015316p:plain

宛先ごとに違うファイルを用意できる。

 

my_GMAIL_DATA.csv はこれ。

f:id:min117:20190419015529p:plain

件名,本文,宛先,BCC,添付ファイル名」が記載され、バッチで読み込まれる。

 

ログはこんな感じで出る。

f:id:min117:20190419015835p:plain

添付ファイルがなければエラーになってくれる。

 

届いたメールはこれ。

f:id:min117:20190419020540p:plain

 

本文もしっかり表示されているし、

f:id:min117:20190419020739p:plain

 

添付ファイルもバッチリついている。 

f:id:min117:20190419020642p:plain

完璧。

 

CSVのメンテにさえ集中すれば、複数の宛先にそれぞれ違った添付ファイルをつけて一括でメールを送信するという、地味でダルい作業がイッパツでできる。RPAやらAIやら色々言われてるけど、やっぱ自分で作るのが一番便利。

 

JScriptは枯れた技術だけど、Windowsなら7だろうが10だろうが動いてくれるので結局実用的だったりする。

 

RaspberryPi3 に Bitcoin Explorer と Bitcoin Core をインストールする

2018年末にメルカリで安く買えたこれ。

f:id:min117:20190103003653p:plain

testnet試してみたいけどなかなか向き合えずにいたが、少しでも進めたい。

 

環境は RaspberryPi 3。

f:id:min117:20190414201814j:plain

あとでどうせWindows10Armをインストールするので初期化するし

min117.hatenablog.com

その前に、試しにやってみる。

 

まずは Bitcoin Explorer をインストールする。

f:id:min117:20190414230939p:plain

 

$ mkdir -p ~/bx ; cd ~/bx

f:id:min117:20190414231021p:plain

 

$ wget https://github.com/libbitcoin/libbitcoin-explorer/releases/download/v3.2.0/bx-linux-x64-qrcode

f:id:min117:20190414231052p:plain

f:id:min117:20190414231103p:plain

バイナリの名前を直接変更。

$ mv bx-linux-x64-qrcode bx ; chmod 777 bx

f:id:min117:20190414231213p:plain

 

PATHの追加。

f:id:min117:20190414231258p:plain

f:id:min117:20190414231432p:plain

f:id:min117:20190414231513p:plain

 

必要なパッケージのインストール。

$ sudo apt-get -y install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils python3

f:id:min117:20190414232207p:plain

 

f:id:min117:20190414232307p:plain

f:id:min117:20190414233136p:plain

 

f:id:min117:20190414233243p:plain

f:id:min117:20190414233432p:plain

 

f:id:min117:20190414233545p:plain

 

f:id:min117:20190414233841p:plain

 

f:id:min117:20190414234014p:plain

 

f:id:min117:20190414234128p:plain

f:id:min117:20190414234200p:plain

 

$ sudo apt-get -y install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler

f:id:min117:20190414234405p:plain

f:id:min117:20190414235212p:plain

 

Bitcoin Core 0.16.0 のビルド。

書籍にしたがって、指定のバージョンをインストールすることにする。

f:id:min117:20190414235857p:plain

f:id:min117:20190415000504p:plain

 

あれ?githubが「detached HEAD」エラーを返してしまう。

f:id:min117:20190415000546p:plain


最新バージョンならいけるか?

f:id:min117:20190414235736p:plain

 

ダメ。やはり同じエラー。

f:id:min117:20190414235935p:plain

 

この記事を頼りに修正を試みる。

qiita.com

 

ダメ。今度は「Remove note about temporary file from release notes」でエラーになってしまう。

f:id:min117:20190415001305p:plain

f:id:min117:20190415001403p:plain

 

Remove note about temporary file from release notes」を調べる。

f:id:min117:20190415001605p:plain

 

$ git notes prune が効くとある。

f:id:min117:20190415001549p:plain

 

$ git notes prune 

f:id:min117:20190415001537p:plain

効かなかった…

 

これでは ./autogen.sh  も configure もできない。しばらく調べる。

 

 

 

RaspberryPi3 にインストール可能な「Windows10 Arm版」のISOファイルをダウンロードする

とても面白そうな記事。

gigazine.net

 

なんとRaspberryPi3 に Windowsをインストールして起動できるらしい。早速試す。

uepon.hatenadiary.com

 

RaspberryPi3 は余っているのを使うとして

f:id:min117:20190414201814j:plain

 

まずは Windows10 Arm版のISO を入手するのが先決だ。

 

上記記事によると、ISOを直接ダウンロードできるわけではなく、ISO作成用のcmdファイルをダウンロードして既存のWindows上で実行することでArm版のISOができるという流れらしい。

 

さっそくやってみる。まずは cmdをダウンロードできるサイトに行く。

https://uup.rg-adguard.net

uup.rg-adguard.net

ファイルを落とすところまではMacSafari)でやっても問題あるまい。

 

https://uup.rg-adguard.net

にいったらまず

Cumulative Update for Windows10 を選ぶ。

f:id:min117:20190414195501p:plain

 

[18762.53」で始まる KB4495666 の x64 版を選ぶ。

f:id:min117:20190414195412p:plain

 

ja-jp:Japanese を選ぶ。

f:id:min117:20190414195703p:plain

 

Windows 10 Professional を選ぶ。

f:id:min117:20190414195829p:plain

 

Download ISO compiler in OneClick!(run downloaded CMD-file) を選ぶ。

f:id:min117:20190414195916p:plain

 

ここまで選ぶと、右半分に creatingISO_18362...で始まる拡張子.cmd へのリンクができるのでクリックしてダウンロードする。

f:id:min117:20190414200059p:plain

ダウンロード完了。

f:id:min117:20190414200247p:plain

 

 

 

このcmdファイルを普段使っているWindows(7でも8でも10でもいいんだろうけど。念のため今回は10でやることにする)で実行すれば、Arm版のWindows10インストールバイナリ(ISOファイル)ができるはず。

 

自分の場合は、Windows仮想環境(VMware)にしか持っていないのでそこに今回のcmdファイルを持って行って実行することにする。

 

仮想環境を起動。

f:id:min117:20190414200538p:plain

 

今回のcmdファイルを移動して右クリックから「管理者として実行」する。

f:id:min117:20190414200708p:plain

 

処理開始。

f:id:min117:20190414200826p:plain

 

必要なフォルダができていく。

f:id:min117:20190414200834p:plain

C直下で実行してしまったが、専用のフォルダを作ってその中で実行すべきだったか。まあいいや。

 

この「uup」なるフォルダがどうやら大事みたい。

f:id:min117:20190414200918p:plain

しばらく放っておく。

 

1時間ほど放ったまま(食事から戻ってきたら)エラーが出てしまっていた

f:id:min117:20190414201041p:plain

ERROR: UUP Edition file is not found in specified directory

「UUPエディションファイルはご指定のディレクトリには見当たりません」

 

いやいや、「uup」ってフォルダがあるじゃん…

 

Windowsは大文字と小文字を区別しないんだから「uup」ないし「UUP」フォルダがあれば問題ないはず。

 

たぶんuupフォルダへの書き込み権限が足りてないんだろうと思う。デスクトップで実行しなおしてみることにする

 

※ そもそもダウンロードしたcmdファイルが違っていた可能性も無いではないが、あまりそんな気はしない。

 

 

気を取り直してやりなおす。

 

まずは デスクトップに作業用のフォルダ(Win10Arm)を作り

f:id:min117:20190414204109p:plain

 

その中で、今回のcmdファイルを右クリックから「管理者として実行」する。

f:id:min117:20190414204116p:plain

 

今度はうまくいきそうな予感。

f:id:min117:20190414204122p:plain

 

ファイルも順当にダウンロードされている。

f:id:min117:20190414204145p:plain

 

これもしばらく待ってみる。

f:id:min117:20190414204153p:plain

f:id:min117:20190414204201p:plain

 

CABファイルとディレクトリからESDファイルを作るところまで来た。

f:id:min117:20190414204917p:plain

ESDはたしか「まんまISOになる」ファイルだったはず。ISOの原型ファイルだったはずだ。

 

かなりいい感じ。

f:id:min117:20190414204929p:plain

 

OpenSSH-Client が標準で入ってるのか。

f:id:min117:20190414205123p:plain

 

Media Layoutを作るところまできている。これはISO(からメディアに焼くとき)のレイアウトを決めているのでは、と想像。

f:id:min117:20190414205143p:plain

 

boot.wimファイルの作成を経て

f:id:min117:20190414205316p:plain

 

1049MB(約1GB)のファイルを書き出すところまで来た。

f:id:min117:20190414205328p:plain

f:id:min117:20190414205504p:plain

f:id:min117:20190414205526p:plain

f:id:min117:20190414205545p:plain

f:id:min117:20190414205734p:plain

f:id:min117:20190414205902p:plain

f:id:min117:20190414205927p:plain

f:id:min117:20190414210840p:plain

 


 


 

PHP で作った文字列を javascript の alert に表示する

PHPで作った一覧画面がある。

チェックを入れて「削除する」ボタンを押したら

f:id:min117:20190414131449p:plain

 

「本当に削除しますか?」のアラート画面を出したい。

f:id:min117:20190414131839p:plain

 

javascript詳しくない。そもそもが<head>タグに書くべきなのか<body>でいいのかからわからない。

teratail.com

f:id:min117:20190414134132p:plain

記事によればjavascript別にどこに書いても動くことは動くみたいだけど、表示速度向上のためには末尾(bodyタグ終了直前)に書いたほうがいいらしい。

 

 

 

書いてみた。

f:id:min117:20190414132328p:plain

一覧のファイル名はGET文でPHP配列 $mySELECTED で渡ってくるようにしたので

 

まずはimplode関数を使って配列から文字列に変換する。文字列の区切り文字には改行(¥n)を指定した。

f:id:min117:20190414133046p:plain

webkaru.net

f:id:min117:20190414132701p:plain

 

それをjavascript のアラートにセットする。

f:id:min117:20190414133139p:plain

 

PHPからjavascriptを呼び出す。

f:id:min117:20190414133210p:plain

teratail.com

 

結構カンタンにできた。

f:id:min117:20190414133709p:plain

次回は「閉じる」を「OK」「キャンセル」に変えてみる。javascriptの(alertではなくて)confirmを使うとできるらしい。

 

Outlookのデータ(.pstファイル)をテキストに変換する(readpstコマンド利用)

6年前の古いOutlookのデータ(.pst)が出てきた。

f:id:min117:20190413074934p:plain

6年前、自分はどんなメールをしていたんだろう…と。

 

開いて中を見たいけどWindowsで開くと

f:id:min117:20190413074853p:plain

現在のOutlookにインポートされちゃって、リアルに使っているメールと混じってしまう心配がある。

 

なのでLinuxOutlook(.pst)ファイルを読めないかを考えてみる。

 

 

 

読めたreadpstという素晴らしいコマンドを作っている人がいた。

www.systutorials.com

 

さっそくインストールする。環境は RaspberryPi 3

$ sudo apt-get -y install readpst

f:id:min117:20190317015029p:plain

 

読み込みたいOutlookデータファイル(.pst)を用意する。

$ ls | grep pst

f:id:min117:20190413080247p:plain

 

使い方を調べる。

$ readpst -h

f:id:min117:20190413081424p:plain

読み取ったメールをファイルに書き出すには -Mオプションをつけるようだ。

 

読み取ってみる。

$ readpst -M hoge@test.jp.pst

f:id:min117:20190413082044p:plain
すっげ。

海外の人が作ったコマンドなのに日本語のメールフォルダも全く問題なくそのまま取り出せている。

 

できたフォルダを見てみる。

 hoge@test.jp.pst  というファイルを読み取った場合は

 hoge@test.jp というフォルダができて、その中にメールが書き出されるようだ。

 

$ ls hoge@test.jp

$ tree hoge@test.jp

f:id:min117:20190413082610p:plain

連番のファイルになるようだ。

 

取り出せたメールファイルを開いてみる

$ cat hoge@test.jp/受信トレイ/1

f:id:min117:20190413083645p:plain

スゴすぎる。日本語メール本文も全く問題なく読み取れた。6年前のメールが一瞬で復活する。

 

ただし、件名だけが文字化けている。これはソフトウェアのバグではなくて、メールの仕様(エンコード)のせいだろうと思う。

 

試しに nkf に通してみる。

$ cat hoge@test.jp/受信トレイ/1 | nkf

f:id:min117:20190413084314p:plain

完璧。件名(Subject)のみならず、Message-id も日本語で復元された。

 

for文で全メールをなめて件名だけ読み取ってみる。

 

for i in hoge@test.jp/受信トレイ/*; do echo "$i"; cat "$i" | grep Subject | nkf; echo '---------------------------' 

f:id:min117:20190413085257p:plain


読めた。素晴らしすぎる。

f:id:min117:20190413085117p:plain

しばらく過去のファイルを漁ってみるか。

 

WindowsならPowerShellを使って添付ファイルも復元できるらしい。今度試す。

kapibara-sos.net

 

bash curl -sSオプション で「URLのタイトル要素を取得できないときにエラー」を出す

以前作った「URLからPDFを作成するスクリプト」を改良する。

min117.hatenablog.com

 

例えばこういう記事

https://www.buzzfeed.com/jp/saoriibuki/tokyo-uni

「がんばっても報われない社会が待っている」東大の入学式で語られたこと【全文】

 

f:id:min117:20190413053324p:plain

 

のURLを貼り付けると

f:id:min117:20190413054350p:plain

 

PDFになって

f:id:min117:20190413053415p:plain

 

「タイトル名.pdf」で保存される。

f:id:min117:20190413054651p:plain

気になる記事はどんどんスクラップできるうえ、サーバ上の一箇所にまとまって保存されていくので最高に使いやすい。自分の興味一覧。

 

 

 

しかし、URLのタイトル要素を取得できないケースがある。上記の記事だと curl -s が戻りを返さない

$ curl -s https://www.buzzfeed.com/jp/saoriibuki/tokyo-uni

f:id:min117:20190413055054p:plain

何かエラーが起きている。

 

この場合は curl -sS オプションをつけると良いようだ。

qiita.com

f:id:min117:20190413055305p:plain

 

やってみる。

$ curl -shttps://www.buzzfeed.com/jp/saoriibuki/tokyo-uni

f:id:min117:20190413055457p:plain

certificate probrem(証明書関連のエラー)が起きていた。httpsだからか。証明書を読めないと(?)うまくhtmlを取ってこれないようだ。

 

エラーを出せることがわかったので、以前作ったスクリプトを改良する。

$ vim mywkhtmltopdf.sh

f:id:min117:20190413060040p:plain
58行目と59行目を -sS オプションにした。

 

タイトル要素が無いときは「EMPTY_TITLE_」という名前のファイルができるようにする。

f:id:min117:20190413060108p:plain

f:id:min117:20190413060233p:plain

f:id:min117:20190413060311p:plain

wkhtmltopdf コマンドの単なるラッパーでしかないけど、自動タイトル名付与機能はかなり便利。やはり名前は大事だ

 

 

それにしても、冒頭記事の、なんと素晴らしいこと。

https://www.buzzfeed.com/jp/saoriibuki/tokyo-uni

 

時勢を捉えた、痛烈な批判。

f:id:min117:20190413061115p:plain

 

社会を見る目。

f:id:min117:20190413061152p:plain

 

f:id:min117:20190413061219p:plain

 

怒り。

f:id:min117:20190413061333p:plain

 

現実。

f:id:min117:20190413061420p:plain

 

寛容。

f:id:min117:20190413061507p:plain

弱さを認める強さ。

RaspberryPi3 x265コーデックを有効にしてHandBrakeCLI をビルドする

RaspberryPi3 で HandBrakeCLI を使いたくなった。以前もやった。

min117.hatenablog.com

同じ手順でやってもいいけど、せっかくなら最新のx265コーデックを使えるようにしたい。

f:id:min117:20190407122218p:plain

4k8ktv.jp
4k8ktv.jp

 

 

 

調べたらあった。RaspberryPi3 で x265を有効にしてHandBrakeCLI をコンパイルする手順を公開してる人がいる。

github.com

 

さっそくやってみる。sudoして進めることにする。

$ sudo -s

f:id:min117:20190407122332p:plain

 

まずは依存性関連(dependencies)をインストールする。

f:id:min117:20190407122604p:plain

# sudo apt-get install git autoconf automake build-essential cmake libass-dev libbz2-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libharfbuzz-dev libjansson-dev liblzma-dev libmp3lame-dev libogg-dev libopus-dev libsamplerate-dev libspeex-dev libtheora-dev libtool libtool-bin libvorbis-dev libx264-dev libxml2-dev m4 make patch pkg-config python tar yasm zlib1g-dev libvpx-dev xz-utils bzip2 zlib1g

f:id:min117:20190407122356p:plain

f:id:min117:20190407122504p:plain

f:id:min117:20190407123319p:plain

完了。

 

次は nasm を最新にする。

f:id:min117:20190407123352p:plain

# sudo curl -L 'http://ftp.debian.org/debian/pool/main/n/nasm/nasm_2.14-1_armhf.deb' -o /var/cache/apt/archives/nasm_2.14-1_armhf.deb && sudo dpkg -i /var/cache/apt/archives/nasm_2.14-1_armhf.deb

f:id:min117:20190407123509p:plain

完了。

 

githubから必要なファイルを clone する。 

f:id:min117:20190407123551p:plain

# git clone https://github.com/HandBrake/HandBrake.git && cd HandBrake && git checkout c7119499f5a2da7e5be0afd50a6757778fed53e7

f:id:min117:20190407123646p:plain

f:id:min117:20190407123813p:plain

 完了。

 

X265モジュールを有効にするための設定を追記する。

f:id:min117:20190407123834p:plain

その前に、今いる場所に「contrib」フォルダがあるか調べておく。

# pwd

# ls | grep contrib

# ls contrib/ | grep x265_

f:id:min117:20190407123948p:plain

あった。

 

echoコマンドで contrib配下にあるファイルに設定を追記する。

echo "X265_8.CONFIGURE.extra += -DENABLE_ASSEMBLY=OFF -DENABLE_PIC=ON -DENABLE_AGGRESSIVE_CHECKS=ON -DENABLE_TESTS=ON -DCMAKE_SKIP_RPATH=ON" >> ./contrib/x265_8bit/module.defs \ && \

echo "X265_10.CONFIGURE.extra += -DENABLE_ASSEMBLY=OFF -DENABLE_PIC=ON -DENABLE_AGGRESSIVE_CHECKS=ON -DENABLE_TESTS=ON -DCMAKE_SKIP_RPATH=ON" >> ./contrib/x265_10bit/module.defs \ && \

echo "X265_12.CONFIGURE.extra += -DENABLE_ASSEMBLY=OFF -DENABLE_PIC=ON -DENABLE_AGGRESSIVE_CHECKS=ON -DENABLE_TESTS=ON -DCMAKE_SKIP_RPATH=ON" >> ./contrib/x265_12bit/module.defs \ && \

echo "X265.CONFIGURE.extra += -DENABLE_ASSEMBLY=OFF -DENABLE_PIC=ON -DENABLE_AGGRESSIVE_CHECKS=ON -DENABLE_TESTS=ON -DCMAKE_SKIP_RPATH=ON" >> ./contrib/x265/module.defs

f:id:min117:20190407124225p:plain

完了。

 

configureする。

# ./configure --launch-jobs=$(nproc) --disable-gtk --disable-nvenc --disable-qsv --enable-fdk-aac

f:id:min117:20190407124902p:plain

f:id:min117:20190407125056p:plain 完了。

 

f:id:min117:20190407125426p:plain

f:id:min117:20190407125524p:plain

f:id:min117:20190407125647p:plain

 

./contrib/x265/x265_3.0/ 配下にファイルができるとあるが…

f:id:min117:20190407125950p:plain

できない。

 

もう一つコンソールをあげてモニタリング。

f:id:min117:20190407130020p:plain

やはり「./contrib/x265/x265_3.0/ 」なんてフォルダは作られない。

 

最後まで流してみるが

f:id:min117:20190407130135p:plain

やはり ./contrib/x265/x265_3.0/ フォルダはできなかった。

 

いったん仕切り直しが必要。

あとで調べる。
 

参考) 

rigaya34589.blog.fc2.com

logmi.jp

 

www.84kure.com

 

www.84kure.com

 

x265.org