Postfix.adminでのメールエイリアス管理支援ツールをExcel-VBAで作ってみました。


作成経緯

メールサーバにpostfixを使用しており、そのアカウント管理にpostfix.adminを使用しています。

社員数が十数人、エイリアスが数個レベルの時は手動でも良かったのですが、社員数が50人、100人を超え、エイリアスも30個、70個と増えてきて、毎日のように頻繁にエイリアスの更新依頼が来るようになると、とても手で作業していられません。

そこで、postfix.adminのエイリアス画面にペタっとコピペできる形でメールアドレスのリストを自動で生成できるExcel-VBAを考えました。

動作環境

Microsoft製の有償純正Excel
オープンオフィス系や、MSの無料プレビュー版を使うと、VBAマクロが壊れてしまう現象を確認しています。

管理シートのフォーマット

登録内容管理シート

シート名は後述のマクロで見つけられる様に「mailalias」とします。
A列3行目から下にズラーっと氏名
B列3行目から下にズラーっと所属名
C列3行目から下にズラーっとメールアドレス
D列2行目から右にズラーっとエイリアス名
D列3行目から下と右にズラーっと、プルダウンメニュー形式で「O」を選べるように入力規則を設定。

上記の様なシートを作成し、更新はエイリアスを更新したくなった各プロジェクトのリーダーに「O」をポチポチ入れて貰ったり、追加したい場合はD列以降2行目にエイリアス名を入れて貰って、「O」をポチポチ付けてもらうだけです。
「○」じゃなくて「O」にしているのは、前者が英語版Macで使えなくてマクロが動かなかったからです。
私のインフラチーム内に外国籍メンバーが数人居るので、必要な措置でした。

そしてこのシートには後述するマクロを実行するボタンをどこかに付けておきます。
インフラ担当者はそのボタンを押すだけです。

エイリアスリストのシート

シート名は後述のマクロから見つけられる様に「LIST」とします。
B列1行目から右にズラ~っとエイリアス名が入ります。
B列2行目から下にズラ~っとエイリアスメンバーのメルアドが入ります。
C列以降も同様です。

ボタンを押すと上記フォーマットでリストが出来上がるので、それをコピペしてpostfix.adminのエイリアス管理画面にコピペするだけです。

コード

createList.vba
Sub createList()

  Dim linenumber As Integer
  Dim colnumber As Integer
  Dim reslinenumber As Integer
  Dim rescolnumber As Integer
  Dim chkmark As String

  linenumber = 3
  colnumber = 4
  reslinenumber = 2
  rescolnumber = 2
  chkmark = "O"
  i = 1
  j = 2

  ' 一旦クリア
  Worksheets("LIST").Select
  Do Until Worksheets("LIST").Cells(i, j).Value = ""
    Do Until Worksheets("LIST").Cells(i, j).Value = ""
      Worksheets("LIST").Cells(i, j).Value = ""
      i = i + 1
    Loop
    i = 1
    j = j + 1
  Loop

 ' 列のループ
 Worksheets("mailalias").Select
  Do Until Cells(2, colnumber).Value = ""
    ' 行のループ
    Do Until Cells(linenumber, 3).Value = ""
      If Cells(linenumber, colnumber).Value = "O" Then
        If (Worksheets("LIST").Cells(1, rescolnumber).Value = "") Then
          Worksheets("LIST").Cells(1, rescolnumber) = Cells(2, colnumber)
        End If
        Worksheets("LIST").Cells(reslinenumber, rescolnumber) = Cells(linenumber, 3)
        reslinenumber = reslinenumber + 1
      End If
      linenumber = linenumber + 1
    Loop
    linenumber = 3
    reslinenumber = 2
    colnumber = colnumber + 1
    rescolnumber = rescolnumber + 1
  Loop
  Worksheets("LIST").Select

End Sub

まとめ

この管理シートを作るだけで、かなりエイリアス管理業務が楽になり、且つ正確になりました。

mailaliasシートは、利用者にやさしくマルをつけるだけ。
LISTシートはインフラーにやさしくコピーするだけ。

このマクロがpostfix.adminのエイリアス管理をされている方のお役に立てれば幸いです。