پیشنویسها
`drafts.list`، `list_all`، `iterate`، `get`، `create`، `update` و `delete`.
همهٔ متدها
page = client.drafts.list(query: "invoice", limit: 25)draft = client.drafts.get("draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8")puts page.items.size, draft[:subject] 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 است که بهصورت OpenEmail::NotFoundError raise میشود.
فیلدهای یک پیشنویس آرگومانهای کلیدواژهای با نامهای API هستند، پس رشتهای که پیشنویس به آن پاسخ میدهد threadId: است. میتوان آنها را بهصورت یک Hash هم داد. پیشنویس بهصورت یک Hash با کلیدهای Symbol برمیگردد، پس draft[:subject] موضوع را میخواند. هر نوشتن فقط با object و id پاسخ میدهد، پس کل پیشنویس را با get بخوانید.
list همانطور صفحهبندی میکند که threads.list. pageToken در API بهصورت next_cursor برمیگردد و بهصورت cursor: داده میشود، و list_all و iterate آن را برایتان دنبال میکنند. iterate هر پیشنویس را به یک بلاک yield میکند، یا بدون بلاک یک Enumerator برمیگرداند. هر صفحه 25 پیشنویس دارد، مگر آنکه limit: تا 100 بخواهد. query: نحو جستوجوی threads.list را میگیرد، و جستوجو هرگز از پیشنویسها بیرون نمیرود. هر ردیف فقط object و id است، پس برای گیرندگان، موضوع و بدنه get را فراخوانی کنید.
فهرست پیشنویسها هیچ hasMoreی بیان نمیکند، پس has_more? هر وقت 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<String>- نشانی گیرندگان به شکل یک Array از Stringها، نه شکلهای Hash که `emails.send` میپذیرد، چون این اندپوینت Array را به فهرست جداشده با کاما که درایور میخواهد تبدیل میکند. یک String میتواند نام نمایشی داشته باشد، مانند `Ada Lovelace <[email protected]>`، اما نامی که کاما داشته باشد به دو گیرندهٔ خراب شکسته میشود. برخلاف `emails.send`، gem اینجا یک String تنها را در Array نمیپیچد، پس `["[email protected]"]` بدهید. هنگام create، Arrayی که داده نشود خالی ذخیره میشود. هنگام update، فیلدی که داده نشود گیرندگان ذخیرهشده را دستنخورده میگذارد، چون هندلر اول پیشنویس را میخواند و ادغام میکند.
ccArray<String>- نشانیهای Cc، به همان شکل `to`. هنگام create اگر داده نشود خالی است، و هنگام update اگر داده نشود دستنخورده میماند.
bccArray<String>- نشانیهای Bcc، به همان شکل `to`. هنگام create اگر داده نشود خالی است، و هنگام update اگر داده نشود دستنخورده میماند.
subjectString- موضوع پیشنویس، حداکثر 998 نویسه، همان حد طول خط RFC 5322. هنگام create پیشفرض آن یک String خالی است، و موضوع خالی به شکل `(no subject)` ذخیره میشود، پس هر پیشنویس همیشه موضوعی دارد.
htmlString- بدنهٔ پیشنویس به شکل نشانهگذاری، حداکثر 1,000,000 نویسه. همین بدنه است که برنده میشود. `html` و `text` هر دو به تنها فیلد پیام در درایور میریزند، پس اگر هر دو را بفرستید همین یکی ذخیره میشود.
textString- بدنهٔ متن ساده، حداکثر 1,000,000 نویسه، که فقط وقتی `html` نباشد به کار میرود. پیشنویس یک بدنه ذخیره میکند نه دو بخش، پس متنی که اینجا داده شود هنگام خواندن پیشنویس، بدون تبدیل روی `html` برمیگردد.
fromString- نشانی فرستنده که روی پیشنویس ذخیره میشود، با یا بدون نام نمایشی. اگر هنگام create داده نشود، پیشنویس فرستندهای ندارد. هنگام update اگر داده نشود، از پیشنویس ذخیرهشده منتقل میشود. درایور کل پیام را از آنچه به او داده میشود از نو میسازد، پس وصلهای ناقص که این را انداخته باشد بیسروصدا فرستندهٔ انتخابشده را عوض میکرد. یک String خالی یا nil هنگام update آن را پاک میکند.
threadIdString- پیشنویس را به یک رشتهٔ موجود بچسبانید تا بهصورت پاسخ ذخیره شود. مانند `from`، هنگام update اگر داده نشود منتقل میشود، چون ساختن دوبارهٔ پیام بدون آن، پاسخ را از رشتهٔ خودش جدا میکرد. یک String خالی هنگام update آن را جدا میکند. پیشنویس همچنان بهصورت رشتهای از آنِ خودش با شناسهٔ خودش ذخیره میشود، پس همراه پیشنویسها فهرست میشود نه درون رشتهای که به آن پاسخ میدهد.
برای نگه داشتن یک فیلد، آن را ننویسید. دادن nil همان نیست. gem آن را میفرستد، و هر فیلدی آن را با یک 422 invalid_parameter رد میکند، جز from هنگام update، که nil فرستنده را پاک میکند. پیش از دادن یک Hash از مقدارهای اختیاری، compact را روی آن فراخوانی کنید. بدنه هم سختگیر است. فیلدی بیرون از این هشت فیلد به همان شکل رد میشود، و فیلدی برای پیوستها وجود ندارد.
پاسخ: یک پیشنویس (drafts.get)
objectString- همیشه `draft`.
idString- شناسهٔ پیشنویس، `draft-` و به دنبالش یک UUID. نوشتنها بهجای یک پیشنویس کامل فقط با `object` و `id` پاسخ میدهند، پس شناسه را از روی نتیجه بخوانید، نه اینکه همانی را که فرستادهاید دوباره به کار ببرید.
toArray<String>- نشانی گیرندگان، همانطور که پیشنویس ذخیرهشان کرده، خام و بدون هیچ نام نمایشی. وقتی پیشنویس هیچکدام را ندارد یک Array خالی است، هرگز nil.
ccArray<String>- نشانیهای Cc همانطور که ذخیره شدهاند. وقتی پیشنویس هیچکدام را ندارد یک Array خالی است، هرگز nil.
bccArray<String>- نشانیهای Bcc همانطور که ذخیره شدهاند. وقتی پیشنویس هیچکدام را ندارد یک Array خالی است، هرگز nil.
subjectString- موضوع ذخیرهشده، هرگز nil. پیشنویسی که بدون موضوع ذخیره شده `(no subject)` را نشان میدهد، جانگهداری که صندوق پستی ذخیره میکند، پس با همان مقایسه کنید نه اینکه دنبال String خالی بگردید.
htmlString- بدنهٔ ذخیرهشده، یا یک String خالی در جایی که پیشنویس بدنهای ندارد. در مسیر خروج فیلد جداگانهای برای متن وجود ندارد، پس پیشنویسی که فقط با `text` ذخیره شده باشد همینجا برگردانده میشود.
fromString or nil- نشانیای که پیشنویس با آن ذخیره شده، که فقط تا وقتی فضای کاری هنوز بتواند با آن بفرستد گزارش میشود. برای پیشنویسی که بدون فرستنده ذخیره شده یا از نشانیای که از آن پس حذف شده nil است.
threadIdString or nil- رشتهای که پیشنویس به آن پاسخ میدهد، یا nil برای پیشنویسی که گفتوگویی تازه را آغاز میکند.
attachmentsArray<Hash>- هر مدخل فقط `filename` و `contentType` دارد، چون پیوستهای پیشنویس به شکل نام و نوع، بدون محتوا ذخیره میشوند. یک `update` این فهرست را خالی میکند.