OutlookのメールからGitlab Issueを作成するマクロ
渦高く積まれるタスク。
Outlookをマクロでちょっと便利にする第二弾です。
次は、タスク管理との連携。タスク管理機能は、Outlookにあったりするのですが、例によって使い勝手が悪いです。まず、情報を追加していったりしづらいのが致命的。あと、他の人との共有もしづらいです。ということで、タスク管理はGitlab Issueにまとめています。ただ、タスクの依頼自体はメールでやってくることが多いんですよね。タスク投げてくる人たちおじいちゃんが多いんで。そんなわけで、メールをそのままGitlab Issueに投げつけたくなるわけです。
Gitlab Issueに登録する形式は、タイトルはメールサブジェクト、説明は頭に『サブジェクト / 受信時間 @ 送信者』を書いてメールを検索しやすくしておき、その後ろにメール本文をくっつける仕様にします。表示が崩れないように、メール本文はコードブロックにしてあげます。ちなみに、Gitlab Issueは、markdown形式で書けるので、markdownで投げつけます。
コードはこんな感じ。
Private Const GITLAB_URL = "http://example.com/api/v4/projects/project_id/" Private Const GITLAB_TOKEN = "api_token" Private Const GITLAB_ASSIGNEE = "user_id" Sub CreateIssueFromMail() Dim xmlHttp As Object Dim url As String Dim strParam As String Dim objMail As MailItem Dim title As String Dim body As String Dim objSC As Object Dim js As Object Dim ret As String Set objMail = getCurrentMailItem() title = objMail.Subject body = title & " / " & CStr(objMail.ReceivedTime) & " @ " & objMail.SenderName & vbCrLf & vbCrLf & "```" & vbCrLf & objMail.body & vbCrLf & "```" Set objSC = CreateObject("ScriptControl") objSC.Language = "JavaScript" With objSC.CodeObject strParam = "title=" & . encodeURIComponent(title) & "&description=" & . encodeURIComponent(body) & "&assignee_ids[]=" & GITLAB_ASSIGNEE End With Set objSC = Nothing Set xmlHttp = CreateObject("MSXML2.XMLHTTP") url = GITLAB_URL & "issues" With xmlHttp .Open "POST", url, False .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" .SetRequestHeader "PRIVATE-TOKEN", GITLAB_TOKEN .Send (strParam) ret = .responseText End With Set xmlHttp = Nothing End Sub Private Function getCurrentMailItem() As MailItem If TypeName(Application.ActiveWindow) = "Inspector" Then Set getCurrentMailItem = ActiveInspector.CurrentItem Else Set getCurrentMailItem = ActiveExplorer.Selection(1) End If End Function
GITLAB_URLは、投げつける先のプロジェクトのURL、GITLAB_TOKENはAPIトークン、GITLAB_ASSIGNEEはIssueをアサインするユーザのIDです。アサインまでしなくていいなら、strParam作ってる部分から関係するところ消してしまえばいいです。
ポイントは、URIエンコードして送るというところあたりでしょうか。VBScriptに標準で関数がなかったので、頑張れば実装できるのですが、サボってJavaScriptに渡してしまってエンコードしてます。まあ、個人的に使うだけなのでこの辺のこだわりは捨ててます。
わりと簡単なので、Gitlab使ってる方はぜひ。多分、Githubでもおんなじ感じで飛ばせるんだと思います。
Leave a comment