diff options
| author | Craig Jennings <c@cjennings.net> | 2026-02-22 23:20:56 -0600 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-02-22 23:20:56 -0600 |
| commit | 5e6877e8f3fb552fce3367ff273167d2cf6af75f (patch) | |
| tree | 909f98edbbb940aafb95de02457d4d6f7db3cba4 /docs/workflows/email.org | |
| parent | b104dde43fcc717681a8733a977eb528c60eb13f (diff) | |
| download | archangel-5e6877e8f3fb552fce3367ff273167d2cf6af75f.tar.gz archangel-5e6877e8f3fb552fce3367ff273167d2cf6af75f.zip | |
chore: add docs/ to .gitignore and untrack personal files
docs/ contains session history, personal workflows, and private
protocols that shouldn't be in a public repository.
Diffstat (limited to 'docs/workflows/email.org')
| -rw-r--r-- | docs/workflows/email.org | 198 |
1 files changed, 0 insertions, 198 deletions
diff --git a/docs/workflows/email.org b/docs/workflows/email.org deleted file mode 100644 index cfd7adf..0000000 --- a/docs/workflows/email.org +++ /dev/null @@ -1,198 +0,0 @@ -#+TITLE: Email Workflow -#+AUTHOR: Craig Jennings & Claude -#+DATE: 2026-01-26 - -* Overview - -This workflow sends emails with optional attachments via msmtp using the cmail account (c@cjennings.net via Proton Bridge). - -* When to Use This Workflow - -When Craig says: -- "email workflow" or "send an email" -- "email [person] about [topic]" -- "send [file] to [person]" - -* Required Information - -Before sending, gather and confirm: - -1. **To:** (required) - recipient email address(es) -2. **CC:** (optional) - carbon copy recipients -3. **BCC:** (optional) - blind carbon copy recipients -4. **Subject:** (required) - email subject line -5. **Body:** (required) - email body text -6. **Attachments:** (optional) - file path(s) to attach - -* The Workflow - -** Step 1: Gather Missing Information - -If any required fields are missing, prompt Craig: - -#+begin_example -To send this email, I need: -- To: [who should receive this?] -- Subject: [what's the subject line?] -- Body: [what should the email say?] -- Attachments: [any files to attach?] -- CC/BCC: [anyone to copy?] -#+end_example - -** Step 2: Validate Email Addresses - -Look up all recipient names/emails in the contacts file: - -#+begin_src bash -grep -i "[name or email]" ~/sync/org/contacts.org -#+end_src - -**Note:** If contacts.org is empty, check for sync-conflict files: -#+begin_src bash -ls ~/sync/org/contacts*.org -#+end_src - -For each recipient: -1. Search contacts by name or email -2. Confirm the email address matches -3. If name not found, ask Craig to confirm the email is correct -4. If multiple emails for a contact, ask which one to use - -** Step 3: Confirm Before Sending - -Display the complete email for review: - -#+begin_example -Ready to send: - -From: c@cjennings.net -To: [validated email(s)] -CC: [if any] -BCC: [if any] -Subject: [subject] - -[body text] - -Attachments: [list files if any] - -Send this email? [Y/n] -#+end_example - -** Step 4: Send the Email - -Use Python to construct MIME message and pipe to msmtp: - -#+begin_src python -python3 << 'EOF' | msmtp -a cmail [recipient] -import sys -from email.mime.multipart import MIMEMultipart -from email.mime.text import MIMEText -from email.mime.application import MIMEApplication -from email.utils import formatdate -import os - -msg = MIMEMultipart() -msg['From'] = 'c@cjennings.net' -msg['To'] = '[to_address]' -# msg['Cc'] = '[cc_address]' # if applicable -# msg['Bcc'] = '[bcc_address]' # if applicable -msg['Subject'] = '[subject]' -msg['Date'] = formatdate(localtime=True) - -body = """[body text]""" -msg.attach(MIMEText(body, 'plain')) - -# For each attachment: -# pdf_path = '/path/to/file.pdf' -# with open(pdf_path, 'rb') as f: -# attachment = MIMEApplication(f.read(), _subtype='pdf') -# attachment.add_header('Content-Disposition', 'attachment', filename='filename.pdf') -# msg.attach(attachment) - -print(msg.as_string()) -EOF -#+end_src - -**Important:** When there are CC or BCC recipients, pass ALL recipients to msmtp: -#+begin_src bash -python3 << 'EOF' | msmtp -a cmail to@example.com cc@example.com bcc@example.com -#+end_src - -** Step 5: Verify Delivery - -Check the msmtp log for confirmation: - -#+begin_src bash -tail -3 ~/.msmtp.cmail.log -#+end_src - -Look for: ~smtpstatus=250~ and ~exitcode=EX_OK~ - -** Step 6: Sync to Sent Folder (Optional) - -If Craig wants the email in his Sent folder: - -#+begin_src bash -mbsync cmail -#+end_src - -* msmtp Configuration - -The cmail account should be configured in ~/.msmtprc: - -#+begin_example -account cmail -tls_certcheck off -auth on -host 127.0.0.1 -port 1025 -protocol smtp -from c@cjennings.net -user c@cjennings.net -passwordeval "cat ~/.config/.cmailpass" -tls on -tls_starttls on -logfile ~/.msmtp.cmail.log -#+end_example - -**Note:** ~tls_certcheck off~ is used because Proton Bridge uses self-signed certificates on localhost. - -* Attachment Handling - -** Supported Types - -Common MIME subtypes: -- PDF: ~_subtype='pdf'~ -- Images: ~_subtype='png'~, ~_subtype='jpeg'~ -- Text: ~_subtype='plain'~ -- Generic: ~_subtype='octet-stream'~ - -** Multiple Attachments - -Add multiple attachment blocks before ~print(msg.as_string())~ - -* Troubleshooting - -** Password File Missing -Ensure ~/.config/.cmailpass exists with the Proton Bridge SMTP password. - -** TLS Certificate Errors -Use ~tls_certcheck off~ in msmtprc for Proton Bridge (localhost only). - -** Proton Bridge Not Running -Start Proton Bridge before sending. Check if port 1025 is listening: -#+begin_src bash -ss -tlnp | grep 1025 -#+end_src - -* Example Usage - -Craig: "email workflow - send the November 3rd SOV to Christine" - -Claude: -1. Searches contacts for "Christine" -> finds cciarmello@gmail.com -2. Asks for subject and body if not provided -3. Locates the SOV file in assets/ -4. Shows confirmation -5. Sends via msmtp -6. Verifies delivery in log |
