پیشنویسها
`drafts->list`، `listAll`، `iterate`، `get`، `create`، `update` و `delete`.
همهٔ متدها
$page = $client->drafts->list(query: 'invoice', limit: 25);$draft = $client->drafts->get('draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8');echo count($page), ' ', $draft['subject'], PHP_EOL; $created = $client->drafts->create([ 'to' => ['[email protected]'], 'cc' => [], 'bcc' => [], 'subject' => 'Your September invoice', 'html' => '<p>Draft body.</p>', 'from' => '[email protected]', 'threadId' => 'CAHk7pQ2x9LmZ4-mail.example.com',]); $updated = $client->drafts->update($created['id'], ['subject' => 'Revised']);$client->drafts->delete($updated['id']);update شناسهٔ پیشنویس را نگه میدارد، پس مقداری که با آن پاسخ میدهد همیشه همانی است که دادهاید. شناسهٔ ناشناخته بهجای پیشنویسی تازه، یک 404 است که بهصورت NotFoundException پرتاب میشود.
فیلدهای یک پیشنویس کلیدهای یک آرایه با نامهای API هستند، پس رشتهای که پیشنویس به آن پاسخ میدهد threadId است. پیشنویس بهصورت یک آرایه با کلیدهای camelCase برمیگردد، پس $draft['subject'] موضوع را میخواند. هر نوشتن فقط با object و id پاسخ میدهد، پس کل پیشنویس را با get بخوانید.
list همانطور صفحهبندی میکند که threads->list. pageToken در API بهصورت nextCursor برمیگردد و بهصورت cursor: داده میشود، و listAll و iterate آن را برایتان دنبال میکنند. iterate یک Generator برمیگرداند که هر بار یک پیشنویس را yield میکند. هر صفحه 25 پیشنویس دارد، مگر آنکه limit: تا 100 بخواهد. query: نحو جستوجوی threads->list را میگیرد، و جستوجو هرگز از پیشنویسها بیرون نمیرود. هر ردیف فقط object و id است، پس برای گیرندگان، موضوع و بدنه get را فراخوانی کنید.
فهرست پیشنویسها هیچ hasMoreی بیان نمیکند، پس hasMore هر وقت cursorی برگشته باشد true است. سرور هر وقت صفحهای پر باشد یکی پیشنهاد میدهد، پس آخرین صفحهای که اتفاقاً پر باشد، یک صفحهٔ خالی به دنبال دارد.
پیشنویس بهصورت رشتهای با برچسب DRAFT ذخیره میشود، و به همین دلیل $client->threads->list(folder: 'draft') همان پیشنویسها را فهرست میکند. get، update و delete به شناسهٔ یک رشتهٔ معمولی با 404 پاسخ میدهند، با اینکه threads->get آن را باز میکند. delete پیشنویس را برای همیشه حذف میکند. به سطل زباله نمیرود و بازگشتی ندارد.
برای ارسال یک پیشنویس، شناسهاش را بهصورت draftId به emails->send بدهید. پیشنویس محتوا را تأمین میکند و ارسال، پاکت را. پیشنویس را نمیتوان با template یا translate ترکیب کرد.
$client->emails->send([ 'from' => '[email protected]', 'to' => '[email protected]', 'draftId' => 'draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8',]);پارامترها: drafts->create و drafts->update
toarray- نشانی گیرندگان به شکل فهرستی از رشتهها، نه شکلهای آرایهای که `emails->send` میپذیرد، چون این اندپوینت فهرست را به رشتهٔ جداشده با کاما که درایور میخواهد تبدیل میکند. یک رشته میتواند نام نمایشی داشته باشد، مانند `Ada Lovelace <[email protected]>`، اما نامی که کاما داشته باشد به دو گیرندهٔ خراب شکسته میشود. برخلاف `emails->send`، کلاینت اینجا یک رشتهٔ تنها را در فهرست نمیپیچد، پس `['[email protected]']` بدهید. هنگام create، فهرستی که داده نشود خالی ذخیره میشود. هنگام update، فیلدی که داده نشود گیرندگان ذخیرهشده را دستنخورده میگذارد، چون هندلر اول پیشنویس را میخواند و ادغام میکند.
ccarray- نشانیهای Cc، به همان شکل `to`. هنگام create اگر داده نشود خالی است، و هنگام update اگر داده نشود دستنخورده میماند.
bccarray- نشانیهای Bcc، به همان شکل `to`. هنگام create اگر داده نشود خالی است، و هنگام update اگر داده نشود دستنخورده میماند.
subjectstring- موضوع پیشنویس، حداکثر 998 نویسه، همان حد طول خط RFC 5322. هنگام create پیشفرض آن یک رشتهٔ خالی است، و موضوع خالی به شکل `(no subject)` ذخیره میشود، پس هر پیشنویس همیشه موضوعی دارد.
htmlstring- بدنهٔ پیشنویس به شکل نشانهگذاری، حداکثر 1,000,000 نویسه. همین بدنه است که برنده میشود. `html` و `text` هر دو به تنها فیلد پیام در درایور میریزند، پس اگر هر دو را بفرستید همین یکی ذخیره میشود.
textstring- بدنهٔ متن ساده، حداکثر 1,000,000 نویسه، که فقط وقتی `html` نباشد به کار میرود. پیشنویس یک بدنه ذخیره میکند نه دو بخش، پس متنی که اینجا داده شود هنگام خواندن پیشنویس، بدون تبدیل روی `html` برمیگردد.
fromstring or null- نشانی فرستنده که روی پیشنویس ذخیره میشود، با یا بدون نام نمایشی. اگر هنگام create داده نشود، پیشنویس فرستندهای ندارد. هنگام update اگر داده نشود، از پیشنویس ذخیرهشده منتقل میشود. درایور کل پیام را از آنچه به او داده میشود از نو میسازد، پس وصلهای ناقص که این را انداخته باشد بیسروصدا فرستندهٔ انتخابشده را عوض میکرد. یک رشتهٔ خالی یا null هنگام update آن را پاک میکند.
threadIdstring- پیشنویس را به یک رشتهٔ موجود بچسبانید تا بهصورت پاسخ ذخیره شود. مانند `from`، هنگام update اگر داده نشود منتقل میشود، چون ساختن دوبارهٔ پیام بدون آن، پاسخ را از رشتهٔ خودش جدا میکرد. یک رشتهٔ خالی هنگام update آن را جدا میکند. پیشنویس همچنان بهصورت رشتهای از آنِ خودش با شناسهٔ خودش ذخیره میشود، پس همراه پیشنویسها فهرست میشود نه درون رشتهای که به آن پاسخ میدهد.
برای نگه داشتن یک فیلد، آن را ننویسید. دادن null همان نیست. کلاینت آن را میفرستد، و هر فیلدی آن را با یک 422 invalid_parameter رد میکند، جز from هنگام update، که null فرستنده را پاک میکند. پیش از دادن یک آرایه از مقدارهای اختیاری، آن را از array_filter($fields, static fn(mixed $value): bool => $value !== null) بگذرانید. بدنه هم سختگیر است. فیلدی بیرون از این هشت فیلد به همان شکل رد میشود، و فیلدی برای پیوستها وجود ندارد.
پاسخ: یک پیشنویس (drafts->get)
objectstring- همیشه `draft`.
idstring- شناسهٔ پیشنویس، `draft-` و به دنبالش یک UUID. نوشتنها بهجای یک پیشنویس کامل فقط با `object` و `id` پاسخ میدهند، پس شناسه را از روی نتیجه بخوانید، نه اینکه همانی را که فرستادهاید دوباره به کار ببرید.
toarray- نشانی گیرندگان، همانطور که پیشنویس ذخیرهشان کرده، خام و بدون هیچ نام نمایشی. وقتی پیشنویس هیچکدام را ندارد یک فهرست خالی است، هرگز null.
ccarray- نشانیهای Cc همانطور که ذخیره شدهاند. وقتی پیشنویس هیچکدام را ندارد یک فهرست خالی است، هرگز null.
bccarray- نشانیهای Bcc همانطور که ذخیره شدهاند. وقتی پیشنویس هیچکدام را ندارد یک فهرست خالی است، هرگز null.
subjectstring- موضوع ذخیرهشده، هرگز null. پیشنویسی که بدون موضوع ذخیره شده `(no subject)` را نشان میدهد، جانگهداری که صندوق پستی ذخیره میکند، پس با همان مقایسه کنید نه اینکه دنبال رشتهٔ خالی بگردید.
htmlstring- بدنهٔ ذخیرهشده، یا یک رشتهٔ خالی در جایی که پیشنویس بدنهای ندارد. در مسیر خروج فیلد جداگانهای برای متن وجود ندارد، پس پیشنویسی که فقط با `text` ذخیره شده باشد همینجا برگردانده میشود.
fromstring or null- نشانیای که پیشنویس با آن ذخیره شده، که فقط تا وقتی فضای کاری هنوز بتواند با آن بفرستد گزارش میشود. برای پیشنویسی که بدون فرستنده ذخیره شده یا از نشانیای که از آن پس حذف شده null است.
threadIdstring or null- رشتهای که پیشنویس به آن پاسخ میدهد، یا null برای پیشنویسی که گفتوگویی تازه را آغاز میکند.
attachmentsarray- هر مدخل فقط `filename` و `contentType` دارد، چون پیوستهای پیشنویس به شکل نام و نوع، بدون محتوا ذخیره میشوند. یک `update` این فهرست را خالی میکند.