メールで受け取ったファイルをSVNに登録する
まぁあんまり困る人はいないでしょうが、社外から社内へのアクセス方法がほぼメールだけとかに制限されている会社ってありますよね。メールで受信したファイルをSVNに自動で登録する仕組みを作ってみました。いつものように超プロトタイプレベルですので、自分で何とかできる人だけ参考にしてみて下さい。
大体受け取るメールというのはこういった形のものを想定しています。
TO:特別に用意したアドレスがおすすめ
SUB:svn-commit)120120進捗報告資料を送信します。
BODY: ProjectName:SampleProject
Path:/120120
Comment:refs #1 進捗報告資料を送信します。
メールのタイトルの先頭に"svn-commit"が入っていて、メールの本文にリポジトリの情報を引き出すためのプロジェクト名「ProjectName:」が指定していて,リポジトリ内の保存先のフォルダを「Path:」で指定し、,「Comment:」でコミット時のメッセージを書かいてあり、一つ以上の添付ファイルがついているメールに対しての未処理を行います。プロジェクト名とかメールアドレスはInitTracUsersで、プロジェクト名はInitTracReposで設定されているものである必要があり、リポジトリはチェックアウト済でなければなりません。 また、保存先に指定するパスは最低限1階層は指定してください。(svn addで面倒なことになるので、そうしてます)
ファイルとしては次の三つです
1. SVNUpdate.bas
「SVNUpdate.bas」をダウンロード
2. SVNClient.cls
「SVNClient.cls」をダウンロード
3. CommandLauncher.cls
「CommandLauncher.cls」をダウンロード
さすがにOutlookなので、ソースをそのまま貼り付けてもうれしい人もいないと思うのでファイルにしてますので、それをダウンロードしてインポートしてください。
その他の修正箇所ですが、まずは、
ThisOutlookSessionのApplication_NewMailExを次のようにしてください。
'メールを受信したとき
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim col As Variant
InitTracUsers
InitTracRepos'複数受信したときはカンマ区切りでメールのIDが入ってくる
If InStr(1, EntryIDCollection, ",") = 0 Then
Set col = New Collection
col.Add EntryIDCollection
Else
col = Split(EntryIDCollection, ",")
End If
For Each msgId In col
受信したメールの処理 msgId
Next
End Sub
次はSVNUpdateのInitTracUsersとInitTracReposを適切に書き換えてください。
Public Sub InitTracUsers()
Dim c As Collection
Set m_TracUsers = New Collection
Set c = New Collection
c.Add "admin", "name"
c.Add "admin", "password"
m_TracUsers.Add c, "admin@example.com"
Set c = New Collection
c.Add "admin2", "name"
c.Add "admin2", "password"
m_TracUsers.Add c, "admin2@example.com"
End SubPublic Sub InitTracRepos()
Dim c As Collection
Set m_TracRepos = New Collection
Set c = New Collection
c.Add "D:\SVN\SampleProject", "WorkingCopy"
c.Add "http://localhost/svn/SampleProject", "URL"
m_TracRepos.Add c, "SampleProject"
End Sub
あとは、SVNUpdateのsvn_commitの中にSVNのファイル名が書いてありますのでそこを書き換えておいてください
Dim colUser As Collection
Set colUser = m_TracUsers.Item(oMsg.SenderEmailAddress)
m_svn.init "c:\TracLight\CollabNetSVN\svn.exe", colUser.Item("name"), colUser.Item("password")
m_svn.Update svnRoot
次は上で書いたようにリポジトリをチェックアウトしておいてください。そうすると指定したアドレスから受信したメールの添付ファイルを適切な位置に保存してSVNにコミットしてれます。ZIPファイルの場合はファイルを展開して一階層のフォルダを捨てたうえで展開してコミットします。
いろいろエラー処理とか追加したほうがよいとも思うんですが、私自身が必要としている範囲を大きく超える必要もないかということで、こんなかんじかなぁ。本業がメールにおぼれてえらいことになったので作っただけなので、本業のほうがかたづけばそれでいいということで、必要な人がいなければ、ここまででいいのかなってことでお許しを…
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント