proton mail conversations
Whole threads.
Every command under proton mail conversations, with the arguments and flags it takes. For these commands in use, see the mail guide.
Holds attachments, count, delete, export, forward, get, label, list, mark, move, reply, snooze, star, trash, unlabel, unsnooze, unstar and update.
attachments
Section titled “attachments”Files attached anywhere in a thread.
Holds download and list.
attachments download
Section titled “attachments download”Download and decrypt attachments from a thread.
proton mail conversations attachments download REF [ATTACHMENT_REF]proton mail conversations attachments download 'Quarterly numbers' --dest-dir .| Flag | Description |
|---|---|
--dest string |
Write to this path, or - for stdout |
--dest-dir string |
Write into this directory, keeping each item’s own name |
--force |
Overwrite a file that already exists |
--include-inline |
Include inline attachments |
attachments list
Section titled “attachments list”List every attachment in a thread.
proton mail conversations attachments list REFproton mail conversations attachments list 'Quarterly numbers'| Flag | Description |
|---|---|
--include-inline |
Include inline attachments |
Count the threads in each folder and label.
UNREAD is how many are unread, and TOTAL how many there are. A thread counts as unread while any message in it is. Without –folder every folder and label has a row, and while categories are on, so does each category the inbox shows as a tab.
To count what a filter matches, the last line of list says how many.
proton mail conversations countproton mail conversations countproton mail conversations count --folder inbox --output json| Flag | Description |
|---|---|
--folder string |
Folder or label to count |
delete
Section titled “delete”Delete threads permanently.
proton mail conversations delete [REF...]proton mail conversations delete 5bH2mQxK| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
export
Section titled “export”Write a whole thread out as .eml files or one mbox.
proton mail conversations export REFproton mail conversations export 'Quarterly numbers' --dest-dir ./backup| Flag | Description |
|---|---|
--dest string |
Write to this path, or - for stdout |
--dest-dir string |
Write into this directory, keeping each item’s own name |
--force |
Overwrite a file that already exists |
--format string |
How to lay the thread down: eml, mbox (default mbox) |
--no-attachments |
Skip attachments |
forward
Section titled “forward”Forward the newest message in a thread.
proton mail conversations forward REFproton mail conversations forward 'Quarterly numbers' --to jane@example.com| Flag | Description |
|---|---|
--attach stringArray |
File to attach (repeatable) |
--attach-inline stringArray |
Image to embed in the HTML body by Content-ID (repeatable; needs –html) |
--bcc stringArray |
Blind-carbon-copy recipient (repeatable) |
--body string |
Your text, placed above the quoted original (- reads stdin) |
--cc stringArray |
Carbon-copy recipient (repeatable) |
--draft |
Save as a draft instead of sending |
--eo-password-file string |
Read the password for recipients outside Proton from a file, or - for stdin |
--eo-password-hint string |
Hint shown to password-protected recipients |
--expires string |
Self-destruct after DURATION (e.g. 7d, 24h), or never |
--from string |
Address to send from, by email or ID (default: your primary) |
--html |
Compose in HTML (default: match the original) |
--no-attachments |
Leave the original’s attachments behind |
--no-quote |
Do not quote the original message |
--no-signature |
Leave out this address’s signature and Proton’s footer |
--request-receipt |
Ask the recipients to confirm when they read it |
--send-at string |
Schedule delivery (RFC 3339, or YYYY-MM-DDTHH:MM in the zone you are working in) |
--to stringArray |
Recipient (repeatable; accepts “Name |
Show a whole thread, decrypted.
While mail settings set image-proxy is on, links come without their tracking and each message’s Links line counts the ones that had some. --render raw prints the bodies as they were sent.
proton mail conversations get REFproton mail conversations get 'Quarterly numbers'proton mail conversations get 5bH2mQxK --summary| Flag | Description |
|---|---|
--body-only |
Emit only the bodies, with no headers or dividers |
--include-inline |
List inline attachments too |
--render string |
Which representation of the body to print: text, html, raw (default text) |
--strip-quotes |
Drop quoted reply blocks from each body |
--summary |
One line per message instead of the full thread |
Attach a label to threads.
proton mail conversations label [REF...]proton mail conversations label 'Quarterly numbers' --label Accounting| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--label string |
The label to attach or detach, by name or ID |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
List threads in a folder.
Takes the same filters as the verbs that organise threads, so you can preview a selection here before acting on it. A text filter goes through Proton’s own index, which lags a change by a few seconds, or through the copy index create mail builds, which also reads bodies.
Looks in the inbox unless told otherwise. Use –folder all to search everything, or everything but spam and trash while almost-all-mail is on.
Newest first, or largest first with –sort size; –desc reverses either.
proton mail conversations listproton mail conversations listproton mail conversations list --unread --folder inboxproton mail conversations list --from jane@example.com --folder allproton mail conversations list --has-attachments --folder allproton mail conversations list --sort size --desc| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--before string |
Last day to include (YYYY-MM-DD) |
--desc |
Reverse the order |
--folder string |
Folder or label to look in (default: inbox) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
How many threads per page; 0 for all of them (default 25) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--page int |
Which page of results, counting from zero |
--read |
Match read messages |
--sort string |
Order by: time, size (default time) |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
Set whether threads count as read.
Holds read and unread.
mark read
Section titled “mark read”Mark threads as read.
proton mail conversations mark read [REF...]proton mail conversations mark read 'Quarterly numbers'proton mail conversations mark read --folder inbox --all| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
mark unread
Section titled “mark unread”Mark threads as unread.
proton mail conversations mark unread [REF...]proton mail conversations mark unread 'Quarterly numbers'| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
Move threads to a folder.
proton mail conversations move [REF...]proton mail conversations move 'Quarterly numbers' --into archiveproton mail conversations move --older-than 90d --folder inbox --into archive| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--into string |
Destination folder, by name or ID |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
Reply to the newest message in a thread.
proton mail conversations reply REFproton mail conversations reply 'Quarterly numbers' --body 'Looks right to me.'proton mail conversations reply 'Quarterly numbers' --everyone --body Agreed.| Flag | Description |
|---|---|
--attach stringArray |
File to attach (repeatable) |
--attach-inline stringArray |
Image to embed in the HTML body by Content-ID (repeatable; needs –html) |
--bcc stringArray |
Blind-carbon-copy recipient (repeatable) |
--body string |
Your text, placed above the quoted original (- reads stdin) |
--cc stringArray |
Carbon-copy recipient (repeatable) |
--draft |
Save as a draft instead of sending |
--eo-password-file string |
Read the password for recipients outside Proton from a file, or - for stdin |
--eo-password-hint string |
Hint shown to password-protected recipients |
--everyone |
Reply to everyone who was on the message, not just the sender |
--expires string |
Self-destruct after DURATION (e.g. 7d, 24h), or never |
--from string |
Address to send from, by email or ID (default: your primary) |
--html |
Compose in HTML (default: match the original) |
--no-quote |
Do not quote the original message |
--no-signature |
Leave out this address’s signature and Proton’s footer |
--request-receipt |
Ask the recipients to confirm when they read it |
--send-at string |
Schedule delivery (RFC 3339, or YYYY-MM-DDTHH:MM in the zone you are working in) |
--to stringArray |
Recipient (repeatable; accepts “Name |
snooze
Section titled “snooze”Take threads out of the inbox until later.
–until takes a duration from now, such as 3d, or a moment written out in full, such as 2026-04-17T09:00. The thread returns to the inbox then, unread.
proton mail conversations snooze [REF...]proton mail conversations snooze 5bH2mQxK --until 3dproton mail conversations snooze --unread --until 2026-04-17T09:00| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--until string |
When they come back (e.g. 3d, or 2026-04-17T09:00) |
--via string |
Match mail that arrived at, or left from, this address of yours |
Star threads.
proton mail conversations star [REF...]proton mail conversations star 'Quarterly numbers'| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
Move threads to the trash.
proton mail conversations trash [REF...]proton mail conversations trash 'Quarterly numbers'proton mail conversations trash --from newsletter@example.com --older-than 90d| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
unlabel
Section titled “unlabel”Detach a label from threads.
proton mail conversations unlabel [REF...]proton mail conversations unlabel 'Quarterly numbers' --label Accounting| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--label string |
The label to attach or detach, by name or ID |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
unsnooze
Section titled “unsnooze”Bring snoozed threads back to the inbox now.
proton mail conversations unsnooze [REF...]proton mail conversations unsnooze 5bH2mQxK| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
unstar
Section titled “unstar”Remove the star from threads.
proton mail conversations unstar [REF...]proton mail conversations unstar 'Quarterly numbers'| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
update
Section titled “update”Change when threads delete themselves.
–expires takes a duration, or never to stop them expiring. It applies to every message in each thread, or with –folder to the ones in that folder. A message whose sender set its expiry keeps it, and none is set in trash or spam.
proton mail conversations update [REF...]proton mail conversations update 'Quarterly numbers' --expires 7dproton mail conversations update --folder archive --older-than 1y --expires 30dproton mail conversations update 5bH2mQxK --expires never| Flag | Description |
|---|---|
--after string |
First day to include (YYYY-MM-DD) |
--all |
Act on everything in scope, rather than a subset |
--before string |
Last day to include (YYYY-MM-DD) |
--expires string |
Delete them after DURATION (e.g. 7d, 24h), or never |
--folder string |
Folder or label to look in (default: all) |
--from string |
Match the sender’s address |
--has-attachments |
Match messages with attachments |
--keyword string |
Match text in the subject, a name or an address, and in bodies once a mail index exists |
--limit int |
Most messages to affect; 0 for no cap (default 150) |
--newer-than string |
Match messages newer than DURATION |
--older-than string |
Match messages older than DURATION (e.g. 30d, 2w, 1h) |
--password-file string |
Read the account password from a file, or - for stdin |
--read |
Match read messages |
--starred |
Match starred messages |
--subject string |
Match text in the subject |
--to string |
Match a recipient’s address |
--totp string |
Two-factor code |
--unread |
Match unread messages |
--via string |
Match mail that arrived at, or left from, this address of yours |
Every command also takes the flags that work everywhere.