社内プロキシきつくて、Outlookしか使えない人のために
Outlookのタスク機能は、めちゃくちゃ凄い
- Todoixxだー、Wundexxxだー言うまえに、Outlookつかいこなせてる?
- どうせ会社は、Outlook強制だろ?!
- Outlookのタスク登録って、めっちゃ高機能!
- めっちゃ凄いけど、登録が面倒くさくて誰も使ってない
Pythonの身軽さを利用
- Pythonでソース作れば、色々連携できるしアイデア次第で自由
- Notificationみたいにも使える
- 期限つきもPostも設定可能(期限は、手動で設定すればいいけど)
Vimmer?
- VimからPython呼びだして、OutlookにTask登録できるよ
- Vimじゃなくても、Python実行すればできる
今回の例はVimをインターフェースにタスクを流し込む
- Vimで何かを書く
- [:PostOutlookTask]すると、書いてる文章をOutlookのTaskに登録する
- filenameにPathつっこめば、Pythonだけでも実行できる
win32com.client
- Outlook操作するwin32com.client準備してください
- Anaconda環境ならデフォルトで入っているから大丈夫death
ソース
Outlook_alert_vim.py
# coding: utf-8
import pytz
import sys
from datetime import datetime, timedelta
import win32com.client as wcl
def win_time_norm(d):
'''
OutlookのTimeFormatに変換
:param d: Datetime
:return: Type pytx Datetime
'''
date = pytz.utc.localize(d)
return date
def post_outlook_task(task_list):
'''
Outlookにタスク登録をする
・win32com.clientを準備すること
・Anacondaならデフォルトで入っている
out_task.DueDate = s_win_day
・日付を今日にすればNotificationがわりにも使える
・期限をしていする場合は、e_win_dayを登録
・edday(5日)で5日後アラートにしてる
:param task_list: VIMのText 1行目をSubject
'''
stday = datetime.today()
edday = datetime.today() + timedelta(days=5)
s_win_day = win_time_norm(stday)
e_win_day = win_time_norm(edday)
outlook = wcl.Dispatch("Outlook.Application")
for task in task_list:
out_task = outlook.CreateItem(3)
out_task.Subject = task[0]
out_task.Body = task[1]
out_task.StartDate = s_win_day
out_task.DueDate = s_win_day
# out_task.DueDate = e_win_day
out_task.ReminderSet = True
out_task.Save()
def main(args):
filename = str(args[0])
with open(filename, mode="r", encoding='utf-8') as fh:
data = fh.readlines()
data = [t.strip().strip('\n') for t in data if t]
# 連続登録できるようにしてる(今回の例ではいらないけど)
task_list = []
task_list.append((data[0], "\n".join(data)))
# task_list.append(("test subject","body row1 \n body row2"))
post_outlook_task(task_list)
if __name__ == "__main__":
main(sys.argv[1:])
s:python_fileの場所は、自分で指定してね。
_vimrc
"outlook_task_vim"{{{
function! s:outlook_posttask_vim()"
let s:python_file = "D:/Outlook_alert_vim.py"
let s:file = tempname()
silent execute ":write " . s:file
silent execute "!python " . s:python_file . ' ' . s:file
call delete(s:file)
unlet! s:file
unlet! s:py_script
endfunction augroup END"
command! -nargs=0 PostOutlookTask call s:outlook_posttask_vim()
"}}}