Courrier
Envoyer avec n'importe quel corps et des pièces jointes, lire et rechercher dans la boîte mail, répondre, classer des fils et utiliser des boîtes jetables.
Envoyer
openemail send --to [email protected] --subject "Lunch?" --text "Thursday at noon works for me."Le corps vient de la première de ces sources qui est présente :
--textet--html, les deux ensemble si vous voulez les deux parties.--body-file <path>. Un fichier.htmlou.htmest envoyé en HTML et tout le reste en texte, et-lit stdin.- Ce qui arrive par stdin. Une entrée qui commence par une balise HTML est envoyée en HTML.
- Votre éditeur (
$VISUAL, puis$EDITOR), quand vous la lancez dans un terminal.
Sans --from, la CLI envoie depuis la seule adresse depuis laquelle vous pouvez envoyer, ou vous en fait choisir une dans un terminal. Sans surveillance et avec plus d'une adresse, elle s'arrête et réclame --from. Dans un terminal, vous voyez un récapitulatif et confirmez avant tout envoi, ce que --yes saute.
| Option | Ce qu'il fait |
|---|---|
| --to, --cc, --bcc | Destinataires, séparés par des virgules ou répétés. Ada Lovelace <[email protected]> fonctionne aussi |
| --from, --reply-to | L'adresse d'envoi, et l'en-tête Reply-To |
| -s, --subject | La ligne d'objet |
| -a, --attach <path> | Joindre un fichier. Répétez pour en ajouter |
| --at <when> | Envoyer plus tard : une heure ISO comme 2026-10-01T09:00:00Z, ou un délai comme 10m, 2h, 1d ou PT1H |
| --undo <seconds> | Retenir un envoi immédiat jusqu'à 900 secondes, pour qu'il puisse encore être annulé |
| --translate <language> | Traduire l'e-mail dans cette langue avant son départ |
| --template <id>, --props <json> | Envoyer un modèle enregistré avec ses props au lieu d'un corps |
| --draft <id> | Envoyer un brouillon enregistré exactement tel qu'il a été écrit |
| --thread <id> | Classer l'e-mail envoyé dans ce fil |
| --tag <key=value> | Étiqueter l'e-mail. Répétez pour en ajouter |
| --idempotency-key <key> | Relancer la commande avec la même clé n'envoie jamais deux fois |
cat report.md | openemail send --to [email protected] --subject "Weekly report" --attach chart.pngopenemail send --to [email protected] --subject "Invoice" --body-file invoice.html --translate de --at 2hopenemail send --to [email protected] --template welcome --props '{"name":"Ada"}' --tag campaign=onboardingElle affiche l'identifiant de l'e-mail et son statut. sent, partial et failed signifient que l'envoi a été tenté pendant la requête, et queued et scheduled qu'il est retenu. Un envoi failed sort avec le code 1, et --json affiche l'e-mail complet.
Chaque envoi porte une clé d'idempotence, la vôtre ou une que la CLI génère, donc une nouvelle tentative après une connexion coupée n'envoie jamais le message deux fois. Passez la vôtre quand un pipeline peut relancer la même étape.
Pièces jointes
--attach prend jusqu'à 20 fichiers. Tant qu'ils totalisent 5 Mo ou moins, ils voyagent dans le message. Au-delà, chacun est d'abord téléversé dans Fichiers et le message y fait référence, donc un gros fichier ne demande aucune étape supplémentaire. Le type de contenu vient de l'extension du fichier.
Boîte de réception
openemail inboxopenemail inbox --unread --limit 50openemail inbox archive --sort oldestopenemail inbox --all --json | jq -r ".items[].id"Liste une page de fils, du plus récent au plus ancien, avec le moment de la dernière activité, l'auteur du dernier message, l'objet, les libellés et l'identifiant du fil. Un point marque le courrier non lu. Le dossier est la boîte de réception sauf si vous en nommez un autre : sent, archive, starred, snoozed, spam, trash, draft, ou un identifiant de libellé comme USER_RECEIPTS.
-u,--unreadgarde les fils avec du courrier non lu,-l,--labelgarde les fils qui portent un libellé, et-q,--queryrestreint la liste par une recherche.-n,--limitfixe la taille de la page, de 1 à 100 (25 par défaut). S'il en reste, le curseur suivant est affiché sur stderr pour--cursor, et--alllit chaque page.--from-contactsgarde les fils dont le message le plus récent vient d'un contact enregistré, et--sortles trie parnewest,oldest,senderousubject.--jsonaffiche{ items, hasMore, nextCursor }, avec chaque fil complet.
Recherche
openemail search invoice from:adaopenemail search "quarterly report" has:pdf newer_than:30dopenemail search in:anywhere from:me to:ada --limit 50openemail search -- invoice -from:adaLa recherche reprend la syntaxe du champ de recherche de l'application : mots simples, expressions entre guillemets et opérateurs comme from:, to:, subject:, has:pdf, is:unread, after:2026/01/31 et newer_than:7d. Elle cherche dans la boîte de réception, ou dans le dossier de --folder, sauf si la requête en nomme un avec in: ou is:, et in:anywhere cherche dans tous les dossiers. Elle prend les options de inbox et affiche ses résultats de la même façon.
Un mot qui commence par un tiret est exclu des résultats, et la CLI le lirait comme une option, donc placez -- devant une requête qui en contient un.
Lire un fil
openemail read CAHk7pQ2x9LmZ4openemail read CAHk7pQ2x9LmZ4 --message -1openemail read CAHk7pQ2x9LmZ4 --html --message 1 > first.htmlAffiche chaque message du fil, du plus ancien au plus récent : qui l'a envoyé et à qui, quand, l'objet, les pièces jointes avec leur taille et leur identifiant, et le corps. Une partie en texte brut s'affiche telle quelle, et un message uniquement HTML est converti en texte lisible qui garde ses listes, citations, titres et liens. La lecture marque le fil comme lu, sauf si vous passez --no-mark-read.
-m,--message <n>montre un seul message, en comptant à partir de 1, ou à partir du plus récent avec un nombre négatif.--htmlaffiche plutôt le HTML brut.- Un message chiffré n'est pas déchiffré ici, ouvrez-le donc dans l'application web.
Répondre
openemail reply CAHk7pQ2x9LmZ4 --text "Thanks, that works for me."openemail reply CAHk7pQ2x9LmZ4 --all --attach notes.pdfecho "Confirmed." | openemail reply CAHk7pQ2x9LmZ4 --yesRépond dans le même fil à l'auteur du dernier message, ou à son adresse Reply-To. Quand le dernier message est le vôtre, la réponse va aux personnes à qui il était adressé. --all met en copie toutes les autres personnes de ce message, en laissant de côté vos propres adresses. L'objet reçoit Re: s'il ne l'a pas déjà, et la réponse part de l'adresse à laquelle le fil a été distribué quand vous pouvez envoyer depuis celle-ci.
Elle prend les options de corps, de pièces jointes, de programmation, de traduction, de tags et d'idempotence de send, avec --from et --subject, et --to, --cc et --bcc remplacent les destinataires.
Classer des fils
| Commande | Ce qu'il fait |
|---|---|
| archive <thread-id...> | Hors de la boîte de réception, toujours trouvable par la recherche |
| unarchive <thread-id...> | Retour dans la boîte de réception |
| trash <thread-id...> | Vers la corbeille. Elle demande confirmation, car aucun appel ne ressort un fil de la corbeille |
| star, unstar | Ajouter ou retirer l'étoile |
| mark read, mark unread | Marquer des fils comme lus ou non lus |
| snooze <thread-id...> --until <when> | Masquer des fils jusqu'à une heure donnée, ou pour un délai comme 3h ou 1w. Ils reviennent dans l'heure environ qui suit |
| unsnooze | Faire revenir maintenant les fils mis en attente |
| label add, remove --label <id> | Mettre des libellés sur des fils ou les retirer. openemail labels list montre les identifiants |
Chacune prend plusieurs identifiants de fil et rend compte de chacun. Le premier échec fixe le code de sortie, et --json affiche { results, succeeded, failed }. Les identifiants d'une recherche s'enchaînent directement :
openemail inbox --query "newer_than:30d from:alerts" --json | jq -r ".items[].id" | xargs openemail archiveBoîtes jetables
openemail temp crée des adresses éphémères qui ne demandent ni compte ni connexion, idéales pour les tests d'inscription et les codes à usage unique. Chaque jeton de boîte est conservé dans ~/.openemail/temp-mail.json, donc les commandes suivantes retrouvent une boîte par son identifiant ou son adresse, ou d'elles-mêmes quand vous n'en avez qu'une.
ADDRESS=$(openemail temp new --ttl 15)openemail temp watch --first --json | jq -r .snippetopenemail temp listopenemail temp readopenemail temp read tinb_4f2a tmail_91c3openemail temp delete --yestemp newn'affiche que l'adresse sur stdout. Elle vit 60 minutes sauf si--ttlen décide autrement, jusqu'à 24 heures, et--nameet--domainchoisissent l'adresse.temp watchaffiche ce qui est arrivé, puis vérifie toutes les 3 secondes jusqu'à ce que vous l'arrêtiez ou que la boîte expire.--firsts'arrête au premier message, et--jsonaffiche une ligne JSON par message.temp readliste les messages avec un court aperçu, ou affiche un message complet.temp deletesupprime la boîte et son courrier sur-le-champ. L'adresse reste réservée 7 jours après la fin prévue de son bail.--inbox-tokenatteint une boîte que cette CLI n'a pas créée, danstemp read,watchetdelete.- L'expéditeur du courrier d'une boîte jetable n'est jamais vérifié.