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:最初の画面(ホーム)
ステップ 2:右上の上向き矢印でフォルダを上がる
ステップ 3:media → ユーザー名 → 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()