Todo管理アプリとして、Todoistを使用しています。
4月頃から使い始めてようやく慣れてきたので、
仕事のタスクもTodoistに集約して管理しようと考えました。
しかし、職場のブラウザではフィルタリングによって
Todoistのサーバへアクセスすることができません。
かといって、セキュリティの穴を突いて
フィルタリングを越えてしまうのは
さすがにルール違反ですし、何より時間もかかります。
そこで、Todoistのプレミアムアカウントが持つ
「新たなタスクをメールによって追加する」機能を利用することにしました。
しかし、複数のタスクをまとめて登録したいときに
一通一通メールを作成して送信する、という操作をするのが面倒……
Excelとかでまとめといた情報を一気に送れればいいのに……
……というわけで、職場のOA端末にOutlookが入っていることを利用して、
TSVファイルから読み込んだ情報をまとめて送信するスクリプトを書きました。
PowerShellやWSHならスクリプトファイル1本で処理できそうですが、
私自身がそのあたりのスクリプトにまだ不慣れなため、制作効率を優先して
メール送信処理のみをPowerShellで書き、情報の読み込み等はバッチで書いています。
以下に中身のコードを記載しますが、
Todoistに関する考慮を全く入れていないため、
「メールをまとめて送る」という用途なら転用できると思います。
ただし、誤送信防止のチェック等を全く入れていないので、
そのあたりは注意して運用するか、追加した上で使用してください。
◆使用するファイル
.\maillist.tsv
→送信するメールの情報を記載したタブ区切りテキストファイル(TSV)。
1列目はToメールアドレス、2列目は件名、3列目は本文となります。
.\MailBatchSend.bat
→ファイル読み込み処理等を記載したWindowsバッチファイル。
.\bin\sendEmail.ps1
→メール送信処理を記載したPowerShellスクリプトファイル。
◆MailBatchSend.batの中身
rem 送るメールの情報を記載したTSVファイル
set maillist=%~dp0maillist.tsv
rem TSVファイルを読み込んでループしながらメール送信していく
for /f "eol=# tokens=1,2,* delims= " %%a in ( %maillist% ) do (
rem echo 送信先: %%a 件名 : %%b 本文 : %%c
powershell %~dp0bin\sendEmail.ps1 "%%a" "%%b" "%%c"
)
exit /b 0
◆sendEmail.ps1の中身
##オブジェクト取得
$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
##第1引数か第2引数が空だったらエラーレベル1で終了
if ( `
($Args[0] -eq $null) `
-Or`
($Args[0] -eq "") `
-Or`
($Args[1] -eq $null) `
-Or`
($Args[1] -eq "") `
){
exit 1
}
##引数として受け取った情報をメールのオブジェクトに格納
# 第1引数 Toアドレス
$Mail.To = $Args[0]
# 第2引数 件名
$Mail.Subject = $Args[1]
# 第3引数 本文
$Mail.Body = $Args[2]
## メール送信 してエラーレベル0で終了
# 問答無用で送信します
$Mail.Send()
exit 0
……上記のスクリプトは実は最終版ではありません。
本来の目的である「Todoistに一括登録する」という点を踏まえて
さらにいくつか手を加えているのですが、情報を回収し損ねてましたてへぺろ。
機会があればまたご紹介しようとおもいます。
Outlookのオブジェクトしらべたときに
いくつか面白そうなものを見つけていて、そちらで遊んだときのスクリプトとか。
あとPowerShellもっと遊びたいです。
終わりや終わり! 終了!!
書いた人: 久世うりう (kuzeuriu) お問い合わせ
コメント