Skip to content

Instantly share code, notes, and snippets.

@cfm
Last active May 21, 2023 00:42
Show Gist options
  • Save cfm/6ad6d7f290639018f2cc3c3348193f17 to your computer and use it in GitHub Desktop.
Save cfm/6ad6d7f290639018f2cc3c3348193f17 to your computer and use it in GitHub Desktop.
jira2mbox

jira2mbox

Convert a Jira-exported CSV file to an mbox mailbox that can be manipulated in Mutt, imported into DEVONthink, etc.

$ python jira2mbox --help
usage: jira2mbox [-h] [-d DELIMITER] src dst

positional arguments:
  src                   CSV
  dst                   mbox

options:
  -h, --help            show this help message and exit
  -d DELIMITER, --delimiter DELIMITER
                        CSV delimiter
#!/usr/bin/env python3
import argparse
import csv
import mailbox
import os
from datetime import datetime, timezone
from email.message import EmailMessage
parser = argparse.ArgumentParser()
parser.add_argument("src", action="store", help="CSV")
parser.add_argument("dst", action="store", help="mbox")
parser.add_argument(
"-d", "--delimiter", action="store", default=",", help="CSV delimiter"
)
if __name__ == "__main__":
args = parser.parse_args()
dst = mailbox.mbox(args.dst)
with open(args.src, newline="") as src:
reader = csv.DictReader(src, delimiter=args.delimiter)
for row in reader:
try:
updated = datetime.strptime(
row["Created"], "%d/%b/%y %I:%M %p"
).astimezone(datetime.now().tzinfo)
msg = EmailMessage()
msg["From"] = os.environ["EMAIL"]
msg["Date"] = updated
msg["Subject"] = f"[{row['Issue key']}] {row['Summary']}"
msg.set_content(row["Description"])
mbox_msg = mailbox.mboxMessage(msg)
if row["Resolved"]:
mbox_msg.set_flags("R")
else:
mbox_msg.set_flags("O")
except (KeyError, ValueError):
print(row)
raise
dst.add(mbox_msg)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment