:::: MENU ::::

C.a.T!

CATch a TAIL!

Japanese sub culture and tech.

  • 2018/03/17
  • 0
develop

OutlookのメールからGitlab Issueを作成するマクロ

渦高く積まれるタスク。

Outlookをマクロでちょっと便利にする第二弾です。

次は、タスク管理との連携。タスク管理機能は、Outlookにあったりするのですが、例によって使い勝手が悪いです。まず、情報を追加していったりしづらいのが致命的。あと、他の人との共有もしづらいです。ということで、タスク管理はGitlab Issueにまとめています。ただ、タスクの依頼自体はメールでやってくることが多いんですよね。タスク投げてくる人たちおじいちゃんが多いんで。そんなわけで、メールをそのままGitlab Issueに投げつけたくなるわけです。

Gitlab Issueに登録する形式は、タイトルはメールサブジェクト、説明は頭に『サブジェクト / 受信時間 @ 送信者』を書いてメールを検索しやすくしておき、その後ろにメール本文をくっつける仕様にします。表示が崩れないように、メール本文はコードブロックにしてあげます。ちなみに、Gitlab Issueは、markdown形式で書けるので、markdownで投げつけます。

コードはこんな感じ。

[code lang=”vb”]
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
[/code]

GITLAB_URLは、投げつける先のプロジェクトのURL、GITLAB_TOKENはAPIトークン、GITLAB_ASSIGNEEはIssueをアサインするユーザのIDです。アサインまでしなくていいなら、strParam作ってる部分から関係するところ消してしまえばいいです。

ポイントは、URIエンコードして送るというところあたりでしょうか。VBScriptに標準で関数がなかったので、頑張れば実装できるのですが、サボってJavaScriptに渡してしまってエンコードしてます。まあ、個人的に使うだけなのでこの辺のこだわりは捨ててます。

わりと簡単なので、Gitlab使ってる方はぜひ。多分、Githubでもおんなじ感じで飛ばせるんだと思います。

—–

Leave a comment