maildir_create_from_csv.py(Maildir 一括作成)

maildir_create_from_csv.py は、Postfix + Dovecot のメール環境で使用する Maildir を CSV から一括作成するスクリプトです。

create_students.py と同じ CSV を使用できるため、 訓練枠アカウント方式 に完全対応しています。

本スクリプトは、本サイト管理者と AI(Microsoft Copilot)との共同制作教材として作成されました。

maildir_create_from_csv.zip をダウンロード

最終更新:

目次

1. このスクリプトが必要になる場面

  • メール環境(Postfix + Dovecot)を再構築したいとき
  • Maildir が壊れた・消えたユーザーを復旧したいとき
  • create_students.py を実行したが Maildir が作成されなかったとき
  • 訓練枠アカウント方式で、毎期のメール環境を整えたいとき

2. CSV の形式(create_students.py と共通)

以下の CSV をそのまま使用できます。

folder,username,password
pc01,pc01,pc01
pc02,pc02,pc02
pc03,pc03,pc03
                

Maildir 作成に使用するのは username のみですが、 CSV を統一することで運用がシンプルになります。

3. 実行方法(GUI で CSV を選択)

create_students.py と同様、 sudo で実行すると CSV 選択ダイアログが開く 仕組みです。

1. 実行権限を付ける

sudo chmod +x /usr/local/bin/maildir_create_from_csv.py

2. スクリプトを実行する

sudo maildir_create_from_csv.py

実行すると、CSV を選択する画面が表示されます。

ステップ 1:最初の画面(ホーム)

CSV選択画面(ホーム)

ステップ 2:右上の上向き矢印でフォルダを上がる

CSV選択画面(ルート)

ステップ 3:media → ユーザー名 → USB メモリ名

CSV選択画面(USBメモリ)

CSV を選択すると、Maildir が存在しないユーザーだけ自動作成されます。

4. コード全文(著作権表記入り)

→ maildir_create_from_csv.zip をダウンロード

コード全文を表示
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Created by Inajin (InaPC Linux Lab)
# AI(Microsoft Copilot)との共同制作教材
#
# Copyright (c) 2026
# 本スクリプトは教育目的での利用・改変を自由に行えます。
# ただし、著作権表記は削除せず残してください。
#

import csv
import os
import subprocess
from tkinter import Tk, filedialog

def select_csv_file():
    root = Tk()
    root.withdraw()
    file_path = filedialog.askopenfilename(
        title="CSVファイルを選択してください",
        filetypes=[("CSV Files", "*.csv")]
    )
    return file_path

def create_maildir(user):
    maildir = f"/home/{user}/Maildir"
    if os.path.exists(maildir):
        print(f"Maildir 既存のためスキップ: {user}")
        return

    os.makedirs(f"{maildir}/cur", exist_ok=True)
    os.makedirs(f"{maildir}/new", exist_ok=True)
    os.makedirs(f"{maildir}/tmp", exist_ok=True)

    subprocess.run(["chown", "-R", f"{user}:{user}", maildir])
    subprocess.run(["chmod", "700", maildir])

    print(f"Maildir 作成: {user}")

def main():
    csv_path = select_csv_file()
    if not csv_path:
        print("キャンセルされました。処理を終了します。")
        return

    with open(csv_path, newline="", encoding="utf-8") as csvfile:
        reader = csv.reader(csvfile)
        next(reader)

        for row in reader:
            folder, user, password = row
            create_maildir(user)

    print("=== Maildir 作成処理完了 ===")

if __name__ == "__main__":
    main()
                        

← 自動化スクリプト一覧に戻る