LoginSignup
10
14

More than 5 years have passed since last update.

(VIMから)OutlookにPythonでTask登録 or Notification

Last updated at Posted at 2017-03-09

社内プロキシきつくて、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()
"}}}

10
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
14