رشتهها، پیشنویسها و برچسبها
همهٔ فرمانهای فضاهای نام threads، drafts و labels، و اینکه چطور زیر inbox، read، archive و دیگر فرمانهای نامه قرار میگیرند.
نمای کلی
فرمانهای نامه، مانند inbox، read، archive و label add، برای آدمها نوشته شدهاند: چند شناسهٔ رشته را یکجا میگیرند، خروجیشان را قالببندی میکنند و شناسههای برچسب را از چشم دور نگه میدارند. هر کدام فرمانهایی از این صفحه را اجرا میکند، که متدهای SDK برای رشتهها، پیشنویسها و برچسبها هستند، یک فرمان برای هر متد، پس threads.listAttachments میشود openemail threads list-attachments.
وقتی به چیزی نیاز دارید که فرمانهای نامه کنار میگذارند از اینها استفاده کنید: رشتهای دقیقاً همانطور که API برمیگرداند، فایلهای یک پیام، پیشنویسها، و ساختن، تغییر نام، تغییر رنگ یا حذف برچسبها.
openemail threadوopenemail draftهم مانند نامهای جمع کار میکنند.openemail labelsشکل مفرد ندارد:openemail labelفرمان نامهای است که برچسبها را روی رشتهها میگذارد.- فعلها نامهای مستعار معمول را میپذیرند:
lsبه جایlist،showوviewبه جایget،newوaddبه جایcreate،editبه جایupdate، وrm،delوremoveبه جایdelete. - همهٔ پرچمها در
openemail <namespace> <verb> --helpهستند، مانندopenemail threads list --help.
رشتهها
گفتوگوهای صندوق پستی. شناسهٔ رشتهای مانند CAHk7pQ2x9LmZ4 از threads list، openemail inbox یا openemail search میآید.
| فرمان | چه میکند |
|---|---|
| openemail threads list | فهرست یک صفحه از رشتههای یک پوشه، تازهترین در ابتدا. هر ردیف فقط یک شناسه است. --folder، --query، --label-ids، --sort، --date-from، --date-to و --from-contacts آن را محدود و مرتب میکنند |
| openemail threads get <id> | خواندن یک رشته با همهٔ پیامهایش، قدیمیترین در ابتدا، با برچسبها و وضعیت نخواندهاش |
| openemail threads update <id> | علامت زدن رشته بهعنوان خوانده با --read یا نخوانده با --no-read، و گذاشتن یا برداشتن برچسبها با --add-label-ids و --remove-label-ids، تا 50 مورد برای هر کدام |
| openemail threads trash <id> | بردن رشته به سطل زباله، بیرون از صندوق ورودی، هرزنامه، بهتعویقافتاده و بایگانی در یک گام. از شما تأیید میخواهد |
| openemail threads snooze <id> <wake-at> | پنهان کردن رشته تا لحظهای در آینده، مانند 2026-10-01T09:00:00Z. به تعویق انداختن دوباره، زمان بیدار شدن را جایگزین میکند |
| openemail threads unsnooze <id> | برگرداندن رشتهٔ بهتعویقافتاده به صندوق ورودی همین حالا و پاک کردن زمان بیدار شدنش |
| openemail threads list-attachments <id> <message-id> | فهرست پیوستهای یک پیام، هر کدام با بایتهایش بهصورت درونخطی و base64 در content |
- پیشفرض
--folderبرابرinboxاست و بهعنوان شناسهٔ برچسب تطبیق داده میشود، پسsent،archive،spam،trash،draft،snoozed،starredوunreadکار میکنند،binبهصورتtrashخوانده میشود، و شناسهٔ برچسب کاربری مانندUSER_RECEIPTSهم کار میکند. پوشهای که با چیزی جور نشود صفحهای خالی برمیگرداند، نه خطا. --queryنحو جستوجوی برنامه را میپذیرد وin:anywhereدر همهٔ پوشهها جستوجو میکند.--label-idsبیشتر محدود میکند، چون رشته باید پوشه و همهٔ شناسههایی را که میدهید داشته باشد.--date-fromو--date-toتازهترین پیام هر رشته را میخوانند و هر دو سر بازه را شامل میشوند.threads getپاسخهای پیشنویسِ فرستادهنشده را با علامتisDraft: trueمیان پیامها میآورد، و شناسهٔ پیشنویس را هم باز میکند.threads updateبه--read،--no-readیا برچسبی برای افزودن یا برداشتن نیاز دارد. برداشتنها پیش از افزودنها اعمال میشوند. شناسهٔ برچسبی که به هیچ برچسبی اشاره نکند باlabel_not_foundرد میشود و چیزی در رشته تغییر نمیکند، پس نخست برچسب را بسازید.TRASH،SNOOZEDوDRAFTباlabel_not_directly_settableرد میشوند: ازthreads trashوthreads snoozeاستفاده کنید.threads trashچیزی را حذف نمیکند و رشته باthreads getخواندنی میماند، اما هیچ فرمانی رشته را از سطل زباله بیرون نمیآورد. بردن رشتهٔ بهتعویقافتاده به زباله، بیدار شدنش را هم لغو میکند.threads snoozeمقدار<wake-at>را همانطور که هست میفرستد، پس لحظهای در آینده به قالب ISO 8601 باZیا یک آفست به آن بدهید، چون زمانی که هیچکدام را ندارد در منطقهٔ زمانی سرور خوانده میشود. تأخیری مانند3hنامعتبر شمرده و رد میشود.openemail snooze --until 3hتأخیر میپذیرد. رشتهها در یک پیمایش ساعتی بیدار میشوند، تا حدود یک ساعت دیرتر، و همیشه به صندوق ورودی برمیگردند.threads list-attachmentsهمهٔ فایلها را کامل در یک پاسخ برمیگرداند. شناسهٔ پیام را ازmessagesدرthreads getبگیرید. وقتی بایتهای ذخیرهشده پیدا نشوندcontentرشتهای خالی است، پس پیش از رمزگشایی طولش را بررسی کنید.
پیشنویسها
پیامهای فرستادهنشدهای که در صندوق پستی ذخیره شدهاند. شناسهٔ پیشنویس با draft- آغاز میشود.
| فرمان | چه میکند |
|---|---|
| openemail drafts list | فهرست یک صفحه از پیشنویسها، به ترتیب آخرین ذخیره. هر ردیف فقط یک شناسه است و --query در آنها جستوجو میکند |
| openemail drafts get <id> | خواندن گیرندگان، موضوع، متن، فرستنده، رشتهای که به آن پاسخ میدهد و نام پیوستهای یک پیشنویس |
| openemail drafts create | ذخیرهٔ یک پیشنویس تازه از --to، --cc، --bcc، --subject، --html، --text، --from و --thread-id، که همه اختیاریاند |
| openemail drafts update <id> | تغییر فیلدهای یک پیشنویس ذخیرهشده. فیلدی که کنار بگذارید مقدارش را نگه میدارد |
| openemail drafts delete <id> | حذف همیشگی یک پیشنویس. به سطل زباله نمیرود. از شما تأیید میخواهد |
drafts list --queryدر موضوع، فرستنده و آغاز متن جستوجو میکند و هرگز از پیشنویسها بیرون نمیرود.older_than:30dو دیگر عملگرهای تاریخ زمان آخرین ذخیرهٔ پیشنویس را میخوانند، وto:،cc:وbcc:روی پیشنویس با چیزی جور نمیشوند.- پیشنویس بهصورت رشتهای با برچسب
DRAFTذخیره میشود، پسthreads getآن را باز میکند وopenemail inbox draftپیشنویسها را فهرست میکند.drafts get،updateوdeleteشناسهٔ رشتهٔ معمولی را با 404 رد میکنند. openemail drafts createخالی یک پیشنویس خالی ذخیره میکند. فقط طولها بررسی میشوند: موضوع تا 998 نویسه، و--htmlو--textهر کدام تا 1,000,000، و وقتی هر دو تنظیم شوند--htmlنگه داشته میشود. پرچمی برای پیوستها وجود ندارد.drafts updateهر فیلدی را که بفرستید جایگزین میکند. یک فهرست کل فهرست ذخیرهشده را جایگزین میکند، پس--toبا یک نشانی بقیه را کنار میگذارد، و هر بهروزرسانی فهرست پیوستهای پیشنویس را خالی میکند.--thread-idرشتهای را که پیشنویس به آن پاسخ میدهد ثبت میکند، اما پیشنویس همچنان بهصورت رشتهای جداگانه ذخیره میشود.- اجرای دوبارهٔ
drafts createپیشنویس دومی ذخیره میکند، چون کلید idempotency نمیگیرد. نام نمایشیای که ویرگول دارد به دو گیرندهٔ خراب تقسیم میشود، پس ویرگول را حذف کنید. openemail send --draft <id> --to <address>یک پیشنویس را میفرستد. متن از پیشنویس میآید، و موضوع هم مگر اینکه--subjectبدهید، در حالی که گیرندگان همانهایی هستند که نام میبرید. نمیتوان آن را با متن،--templateیا--translateترکیب کرد.
برچسبها
برچسبهایی که یک رشته میتواند داشته باشد. شناسهٔ برچسب کاربری USER_ است و پس از آن نامی که با آن ساخته شده، با حروف بزرگ، و هر رشته فاصله به _ تبدیل میشود، پس Big Clients میشود USER_BIG_CLIENTS.
| فرمان | چه میکند |
|---|---|
| openemail labels list | فهرست برچسبهای کاربری فضای کاری، مرتبشده بر اساس نام، هر کدام با رنگش، threadCount، createdAt و updatedAt |
| openemail labels list-colors | فهرست جعبهرنگی که برنامه پیشنهاد میدهد، چهارده رنگ یکدست و هفت گرادیان. value همان چیزی است که باید بهعنوان رنگ بدهید |
| openemail labels get <id> | خواندن یک برچسب کاربری، با تطبیق شناسهاش بهصورت حساس به بزرگی و کوچکی حروف |
| openemail labels create --name <value> | ساختن یک برچسب کاربری. --color-background-color به آن رنگ میدهد |
| openemail labels update <id> | تغییر نام یا رنگ یک برچسب. شناسه میماند و رشتههایی هم که آن را دارند میمانند |
| openemail labels delete <id> | حذف یک برچسب و برداشتن آن از همهٔ رشتههایی که آن را داشتند. از شما تأیید میخواهد |
- شناسه هرگز تغییر نمیکند، حتی پس از تغییر نام، پس به جای نامها شناسهها را ذخیره کنید.
- برچسبهای سیستمی مانند
INBOX،STARREDوUNREADفهرست نمیشوند و نمیتوان آنها را تغییر داد یا حذف کرد، هرچندthreads updateآنها را میپذیرد.labels getروی یکی از آنها 404 است. - هر فضای کاری تا 50 برچسب کاربری دارد. نامی که برچسب دیگری از پیش دارد، بدون توجه به بزرگی و کوچکی حروف، با
label_name_takenرد میشود. - رنگ یک مقدار هگز مانند
#3B82F6یا یک نشانهٔ گرادیان مانندgradient:sunsetاست.--label-colorکل رنگ را بهصورت JSON میگیرد و--label-color nullآن را پاک میکند. - برچسب از آنِ فضای کاری است، پس تغییر نام، تغییر رنگ یا حذف آن برای همهٔ اعضای آن تغییرش میدهد.
labels deleteبازگشت ندارد. ساختن دوبارهٔ برچسبی با همان نام همان شناسه را میدهد، اما رشتهها آن را پس نمیگیرند.threadCountآن درlabels getمیگوید چند گفتوگو آن را از دست میدهند.
فرمانهای نامه چطور از آنها استفاده میکنند
| فرمان نامه | چه چیزی اجرا میکند |
|---|---|
| inbox [folder] | threads list برای یک صفحه، سپس threads get روی هر رشته، شش تا در هر بار |
| search <query...> | threads list --query، سپس threads get روی هر رشته |
| read <thread-id> | threads get، سپس threads update --read مگر اینکه --no-mark-read بدهید |
| reply <thread-id> | threads get برای گیرندگان، موضوع و نشانی فرستنده، سپس emails send درون رشته |
| archive <thread-id...> | threads update --add-label-ids ARCHIVE --remove-label-ids INBOX |
| unarchive <thread-id...> | threads update --add-label-ids INBOX --remove-label-ids ARCHIVE |
| star, unstar <thread-id...> | threads update با افزودن یا برداشتن STARRED |
| mark read, unread <thread-id...> | threads update --read، یا --no-read |
| trash <thread-id...> | threads trash |
| snooze <thread-id...> --until <when> | threads snooze، پس از آنکه تأخیری مانند 3h نخست به یک لحظه تبدیل شود |
| unsnooze <thread-id...> | threads unsnooze |
| label add, remove <thread-id...> | threads update --add-label-ids، یا --remove-label-ids |
| send --draft <id> | emails send --draft-id |
- یک فرمان نامه چند شناسهٔ رشته میگیرد و دربارهٔ هر کدام گزارش میدهد، و با
--jsonمقدار{ results, succeeded, failed }را چاپ میکند. فرمانی در این صفحه یک شناسه میگیرد و آنچه API برمیگرداند را چاپ میکند. openemail inboxهر رشتهای را که فهرست میکند میخواند تا نشان دهد آخرین بار چه کسی نوشته و موضوع چیست.threads listبرای هر صفحه یک درخواست میفرستد و فقط شناسهها را چاپ میکند، که تمام نیاز یک خط لوله است.openemail readپیام HTML را به متن تبدیل میکند و رشته را خوانده علامت میزند.threads getرشته را همانطور که API برمیگرداند چاپ میکند و چیزی را تغییر نمیدهد.
نمونهها
یک رشته را در یک درخواست خوانده علامت بزنید، بایگانی کنید و برچسب بزنید، جایی که mark read، archive و label add سه درخواست میفرستادند:
openemail threads update CAHk7pQ2x9LmZ4 --read --add-label-ids ARCHIVE,USER_RECEIPTS --remove-label-ids INBOX --jsonیک برچسب بسازید و همهٔ رشتههای جور را زیر آن بگذارید. وقتی به لوله داده شود، --all در هر سطر یک شیء JSON چاپ میکند:
openemail labels create --name Receipts --color-background-color gradient:meadowopenemail threads list --query "in:anywhere subject:receipt newer_than:1y" --all | jq -r .id | xargs openemail label add --label USER_RECEIPTSیک فایل را از یک پیام ذخیره کنید. شناسههای پیام در messages خروجی threads get هستند:
openemail threads get CAHk7pQ2x9LmZ4 --json | jq -r ".messages[].id"openemail threads list-attachments CAHk7pQ2x9LmZ4 message_4c1b257a --json | jq -r '.[] | select(.filename == "invoice.pdf") | .content' | base64 --decode > invoice.pdfیک پیشنویس بنویسید، تغییرش دهید، دوباره بخوانیدش و سپس بفرستیدش:
DRAFT=$(openemail drafts create --to [email protected] --subject "Engine notes for Thursday" --html "<p>Agenda below.</p>" --json | jq -r .id)openemail drafts update "$DRAFT" --to [email protected],[email protected]openemail drafts get "$DRAFT"openemail send --draft "$DRAFT" --from [email protected] --to [email protected],[email protected]پیشنویسهایی را که 30 روز کسی ذخیرهشان نکرده پاک کنید. اجرای آزمایشی هر DELETE را بدون فرستادن چاپ میکند و --yes به تأیید پاسخ میدهد:
openemail drafts list --query older_than:30d --all | jq -r .id > stale.txtxargs -n 1 openemail drafts delete --dry-run < stale.txtxargs -n 1 openemail drafts delete --yes < stale.txtیک گرادیان از جعبهرنگ انتخاب کنید، تغییر را پیشنمایش کنید، انجامش دهید و بعداً رنگ را دوباره بردارید:
openemail labels list-colors --json | jq -r '.[] | select(.kind == "gradient") | .value'openemail labels update USER_RECEIPTS --name "Receipts 2026" --color-background-color gradient:aurora --dry-runopenemail labels update USER_RECEIPTS --name "Receipts 2026" --color-background-color gradient:auroraopenemail labels update USER_RECEIPTS --label-color nullدامنههای مجوز و کدهای تأیید هویت
| دامنهٔ مجوز | فرمانها |
|---|---|
| threads:read | threads list، get و list-attachments |
| threads:write | threads update، trash، snooze و unsnooze |
| drafts:read | drafts list و get |
| drafts:write | drafts create، update و delete |
| labels:read | labels list، list-colors و get |
| labels:write | labels create، update و delete |
دامنهٔ مجوزِ ناموجود با کد خروج 4 متوقف میشود. هیچکدام از این فرمانها کد تأیید هویت نمیخواهد، چه با ورود از طریق مرورگر و چه با کلید API.
ورود یا کلیدی که به برخی نشانیها محدود است فقط رشتههایی را میبیند که به همان نشانیها تحویل شدهاند، و هر رشتهٔ دیگری 404 است، انگار وجود ندارد. برچسبها از آنِ فضای کاریاند، پس همچنان همهٔ برچسبها را میبیند، اما threadCount فقط گفتوگوهایی را میشمارد که میتواند ببیند.
صفحهها، تأییدها و اجرای آزمایشی
threads list،drafts listوlabels listیک صفحه میخوانند، 25 مگر اینکه--limitچیز دیگری بگوید، تا 100.--cursorاز نشانگری که یک صفحه چاپ کرده ادامه میدهد. نشانگر رشتهها ترتیبی را که با آن صادر شده نگه میدارد، پس همان فیلترها را همراهش بفرستید.--allهمهٔ صفحهها را میخواند و--max <n>پس از همان تعداد میایستد. وقتی به لوله داده شود یا با--ndjsonدر هر سطر یک شیء JSON چاپ میکند، و با--jsonیک سند{ items, hasMore, nextCursor }.hasMoreممکن است روی صفحهای که آخرین صفحه از آب درمیآید true باشد، و فراخوانی بعدی آنگاه هیچ موردی برنمیگرداند. رشتهای که هنگام ورق زدن شما نامهٔ تازه میگیرد از نشانگر جلو میافتد و صفحههای بعدی آن را برنمیگردانند، و پیشنویسی که هنگام ورق زدن ذخیره شود هم همینطور.threads trash،drafts deleteوlabels deleteاز شما تأیید میخواهند. بدون نظارت، با--json،--no-inputیا بدون ترمینال، با کد خروج2متوقف میشوند و چیزی را تغییر نمیدهند مگر اینکه--yesبدهید.--dry-runدرخواستی را که فرمان میفرستاد، با اعتبارنامهٔ پوشاندهشده، چاپ میکند و بدون فرستادن یا خواستن تأیید با کد0خارج میشود. با--jsonمقدار{ dryRun, request }را چاپ میکند.
بدنههای JSON و پاک کردن یک فیلد
--data کل بدنه را بهصورت JSON میگیرد، درونخطی، از یک فایل با @path یا از stdin با -، و پرچمی که در کنارش بدهید کلید خودش را بازنویسی میکند.
مقدار خالی برای پرچم خطای کاربرد است، پس فیلدی که با مقدار خالی پاک میشود به جای آن از --data میگذرد. --label-color null رنگ برچسب را پاک میکند.
openemail drafts update draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8 --data '{"from":""}'openemail drafts update draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8 --data '{"threadId":""}'openemail drafts update draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8 --data '{"to":[]}'openemail drafts create --data @draft.json --subject "Overrides the file"اولی پیشنویس را بدون فرستنده ذخیره میکند، دومی آن را از رشتهای که به آن پاسخ میداد جدا میکند، و سومی گیرندگانش را پاک میکند.
همهٔ پرچمها
openemail threads --helpopenemail threads list --helpopenemail drafts create --help --jsonopenemail <namespace> <verb> --help هر آرگومان و پرچم را با نوعش، دامنههای مجوزی که فراخوانی لازم دارد، متد و مسیرش، آنچه برمیگرداند و یادداشتهای مرجع API نشان میدهد. برای همان راهنما بهصورت داده، --json را اضافه کنید.