Repository navigation
contact-researchers: add the Thunderbird account signature to IMAP drafts - #80
Conversation
…afts A draft opened from the drafts folder doesn't get the account signature from Thunderbird, so mailbox.py now appends the signature of the Thunderbird identity matching OUTREACH_EMAIL (HTML or plain text, with Thunderbird's "-- " separator). An HTML signature makes the draft multipart/alternative. OUTREACH_THUNDERBIRD_PROFILE picks the profile, or disables the signature with "none". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Thunderbird blocks remote images in stored drafts, so the signature's logo (a link) didn't show. Download the signature's remote images and embed them as cid: parts (multipart/related), and keep the signature HTML exactly as Thunderbird stores it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
1 issue found and verified against the latest diff
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="skills/contact-researchers/SKILL.md">
<violation number="1" location="skills/contact-researchers/SKILL.md:128">
P2: An explicit request for no signature is not honored for IMAP drafts: this instruction still allows `mailbox.py draft` to append the configured Thunderbird signature. Tell the workflow to invoke the draft command with `OUTREACH_THUNDERBIRD_PROFILE=none` when the user asks for none, or clarify that the request excludes the configured account signature.</violation>
</file>
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
| **No signature** (optional): when the user says their mail tool already | ||
| adds a signature (or asks for none), the email ends with the closing word | ||
| adds a signature (or asks for none), and always for an IMAP draft when | ||
| `mailbox.py config` reports a `signature` (the account's signature is |
There was a problem hiding this comment.
P2: An explicit request for no signature is not honored for IMAP drafts: this instruction still allows mailbox.py draft to append the configured Thunderbird signature. Tell the workflow to invoke the draft command with OUTREACH_THUNDERBIRD_PROFILE=none when the user asks for none, or clarify that the request excludes the configured account signature.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At skills/contact-researchers/SKILL.md, line 128:
<comment>An explicit request for no signature is not honored for IMAP drafts: this instruction still allows `mailbox.py draft` to append the configured Thunderbird signature. Tell the workflow to invoke the draft command with `OUTREACH_THUNDERBIRD_PROFILE=none` when the user asks for none, or clarify that the request excludes the configured account signature.</comment>
<file context>
@@ -114,7 +124,9 @@ themselves.
**No signature** (optional): when the user says their mail tool already
- adds a signature (or asks for none), the email ends with the closing word
+ adds a signature (or asks for none), and always for an IMAP draft when
+ `mailbox.py config` reports a `signature` (the account's signature is
+ appended to the draft), the email ends with the closing word
only (`Cheers,`), without the name and role lines, and no `[Your name]`
</file context>
There was a problem hiding this comment.
All reported issues were addressed across 2 files
Requires human review: Auto-approval blocked because this review re-detected 1 unresolved issue already reported by Cubic.
View guided diff | Turn on auto-fix | Re-trigger cubic
Without a Date header, Thunderbird lists the draft as undated, away from the recent drafts, so new drafts looked missing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
All reported issues were addressed across 1 file (changes from recent commits).
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
- find snap profiles under ~/snap/thunderbird/common too - resolve the portable sig_file-rel path; a missing attached signature file means no signature, not the stale htmlSigText - download signature images only when building a draft (not in config), capped at 5 MiB each - replace empty Date / Message-ID headers instead of adding a second one - document which images get embedded, and store IMAP drafts with OUTREACH_THUNDERBIRD_PROFILE=none when the user asks for no signature Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
mailbox.py draftappends the signature of the Thunderbird account matchingOUTREACH_EMAIL. Thunderbird doesn't add the signature to a draft that is opened from the drafts folder.prefs.js(the inline signature, or the signature file when one is attached). The profile is found in~/.thunderbird, snap, flatpak or the macOS location.OUTREACH_THUNDERBIRD_PROFILEoverrides the profile, andnoneturns the signature off.--separator, unless the account suppresses it. An HTML signature makes the draftmultipart/alternative(plain text + HTML), so it opens in Thunderbird's HTML editor.mailbox.py configanddraftprint which signature was used.SKILL.md: when a signature is found, the body ends atCheers,. The report also notes that Thunderbird blocks remote images in a signature (such as a logo) in stored drafts until remote content is allowed for the sender.Test
with_signature, and checked that all 30 have the signature.🤖 Generated with Claude Code