Gmail ‘별’표 메일을 자동으로 Omnifocus로 옮기기.

Inbox 한곳에 모아서 처리하기의 일환으로 주 업무 메일 (gmail)과 할일 목록을 단일 inbox로 만들어서 관리하자는 생각이 들었다.

Mailbox나 현재 OSX에서 사용하고 있는 Mail Pilot 등이 mail message를 할 일 목록으로 전환할 수 있도록 하곤 있지만, 내 경우 e-mail을 통하지 않은 project나 할일도 꽤 많은 편이다. 예전에 이러한 할일 목록을 본인에게 e-mail을 보내는 방법으로 관리한다는 것을 본적이 있기는 한데, 편의성이 있다고는 할 수 없는 방식으로 판단했다.

할일 목록 관리를 위한 생산성 도구를 쓰는 것이 제일 적합해보여서, 현재 사용하고 있는 Omnifocus를 주 inbox 관리 도구로 정하고, 어떻게 e-mail을 Omnifocus로 쉽게 보낼 수 있나를 고민했다*.
(* 런칭한지 좀 되기는 했지만, Handle (http://www.handle.com)이라는 서비스를 사용하면 두가지를 동시에 처리할 수 있기는 한데, 아직 완성도 등이 미흡한편. 하지만 계층 등의 복잡한 구조가 없이 할일 목록을 관리하고자 한다면 Handle도 꽤 괜찮은 선택일 것이다.)

가장 단순한 방법은, mail을 확인하고 직접 전달 (forward)하는 방법으로, Omnifocus의 경우 사용자의 계정에 할당된 e-mail 주소로 전달하면 바로 inbox로 mail이 전달되면서 할일 목록을 관리할 수 있게 된다. 이러한 방법은 계정별 mail 주소를 제공하는 Evernote나 Wunderlist 등에도 활용할 수 있을 듯 하다.

여기서, 일일이 전달하는 게 귀찮고, 그렇다고 모든 메일을 자동으로 전달시키는 것도 의미없는 일이라서 몇가지 꼼수를 생각하게 되었다. 제일 먼저 떠오른 생각은 IFTTT (http://ifttt.com/)의 gmail channel을 활용해서 receipe를 만들어보자 였는데, 이상하게도 내 경우 gmail channel 활성화가 항상 error가 나서 실패. 그래서 구글링 끝에 google script를 활용하면 해결된다는 것을 확인했다.

현재 사용하게된 procoess는,
1. Gmail 환경에서 할일 목록으로 넘길 메일에 ‘별’표를 한다. (1. 이것은 gmail의 ‘별’표를 지원하는 타 application에서도 할 수 있다. 2. label을 활용할 수 도 있으나 ‘별’표가 가장 단순한 방법일 것이다.)
2. ‘별’표가 된 메일을 자동으로 할일 목록 관리 도구의 메일 주소로 전달 (내 경우는 Omnifocus sync 메일 계정).
3. 전달된 메일은 읽음 표시 후 휴지통으로 이동 (원본 메일이 사라지더라도 보낸 편지함에 전달한 메일이 저장 되므로 차후에 follow up이 필요할 경우라도 문제가 없다.).
이러한 방법으로 mail 환경에서 처리 시간을 최소화하고, Omnifocus의 inbox에만 집중해서 관리하는 방법이 되겠다.

구글 검색을 통해, 아래의 사이트에서 (http://apple.stackexchange.com/questions/88221/automatically-forward-starred-in-gmail-messages-to-omnifocus) 적합한 Google Script 예제를 확인해서 적용해 보았다. 내용대로 Google Script (https://script.google.com)로 가서 상기의 process에 맞는 약간 수정된 Script를 입력 (맨 아래쪽에 기재) 및 저장 (중간에 permission 과정이 나오는데 허락하면 됨) 하고, 시계 모양 버튼을 눌러 실행 간격을 조정 (5분정도면 괜찮을 듯)하여 완료. Script 내용 중, cc, bcc의 경우는 다른 서비스나 mail 계정으로도 전달이 가능할 것이다. Script에 필요한 추가 정보 등은 Google Apps Script 사이트에서 (https://developers.google.com/apps-script/reference/gmail/) 확인 가능.


function TJ() { var threads = GmailApp.search(‘label:inbox is:starred’); for (var h = 0; h < threads.length; h++) { var messages = threads[h].getMessages(); for (var i = 0; i < messages.length; i++) { if (messages[i].isStarred()) { Logger.log(messages[i].getSubject()); messages[i].unstar(); messages[i].forward(“yourmail@yourdomain.com”, { // Advanced parameters: https://developers.google.com/apps-script/reference/gmail/gmail-message#forward%28String,Object%29 cc: “myboss@example.com”, bcc: “mybosses-boss@example.com,vp@example.com” }); messages[i].markRead(); messages[i].moveToTrash(); } }
}
}