توسعهدهندگان
صندوق پستی اهمیتی نمیدهد
چه کسی پشت فرمان است.
هر کاری که اپ میکند، کد شما هم میکند: 104 عملیات مستندشده در 68 مسیر، پشت یک سند OpenAPI 3.1 که بدون کلید میخوانیدش. کلاینت TypeScript در هر بیلد به همان سند پایبند نگه داشته میشود.
MCP کلیدی برای جایگذاری نمیخواهد. کلاینت سرور مجوزدهی را از روی نقطه پایانی پیدا میکند، خودش را ثبت میکند و شما را برای ورود به اینجا میفرستد.
104
عملیات مستندشده
68
مسیر زیر یک میزبان
116
متد SDK، پوششدهندهی همهی آنها
20
رویداد وبهوک، در سه خانواده
سند OpenAPI 3.1 در GET /openapi.json است، و خواندنش کلید نمیخواهد.
سطوح
سه در،
یک صندوق پستی.
کلید فضای کاری تعیین میکند یک فراخوانی چه میتواند بکند و از طرف کدام نشانیها میتواند بفرستد. باطل کردن یک بهروزرسانی است نه یک حذف، پس به فراخوانی بعدی گفته میشود که کلید باطل شده است.
یک کلید از طرف تا 25 دامنهی کامل و 50 نشانی تکی میفرستد. GET /ping دامنههای دسترسیای که دارد و آنهایی که نقشش برایش گذاشته را بازمیخواند.
یک کلاینت را به نقطه پایانی بسپارید و وارد شوید. کلیدی برای جایگذاری نیست، چون کلاینت خودش را ثبت میکند و شما را به اینجا میفرستد.
ابزارها از روی آنچه فراخوان مجاز است بکند ساخته میشوند، پس کلاینتی که به خواندن محدود شده ابزار ارسال در خود ندارد. توکن همچنان به کل صندوق پستی میرسد.
یک نقطه پایانی https ثبت کنید و صندوق پستی به آن ارسال میکند. تحویلها را خود صندوق پستی راه میاندازد نه یک فراخوانی API، پس نوشتن در اپ و ارسال به API هر دو یکی را میسازند.
20 رویداد در سه خانواده، و ده نقطه پایانی برای هر صندوق پستی.
همترازی
کلاینت نمیتواند از
API عقب بماند.
بررسی همترازی در هر بیلد سند OpenAPI را میخواند و با هر واگرایی شکست میخورد: متدی که به عملیاتی اشاره میکند که در مشخصات نیست، عملیاتی مستندشده بدون متد، یا فهرست دامنهی دسترسیای که با نیاز آن عملیات نمیخواند. آنچه را ثابت کرده چاپ میکند، و امروز این یعنی 116 متد SDK روی هر 104 عملیات مستندشده.
پیکربندی، درخواست و فراخوانی یک عملیاتاند، نوشتهشده به سه شکل.
عاملها، API و MCP
قرار است OpenEmail را نرمافزار هم مثل آدمها بگرداند. صندوق پستی در هر دو حالت یکی است.
سرور MCP
Claude، یا هر کلاینت MCP دیگری، را به صندوق پستیتان بسپارید.
OAuth برای کلاینتهای شخص ثالث
بهزودیثبت کلاینت بهصورت خودخدمت با PKCE، تا یک برنامه بتواند درست درخواست دسترسی کند.
رضایت و لغو دسترسی هست؛ دامنه دسترسی نیست، پس یک توکن به جای بخشی که برنامه خواسته، به تمام صندوق پستی شما میرسد.
REST API
یک API روی HTTP و مستند، با کلیدهایی که میشود صادر، محدود و باطلشان کرد.
شروع سریع
از هیچ تا یک پیام ارسالشده.
سه قدم.
- 1
کلیدی بسازید
تنظیمات، کلیدهای API، روی صندوق پستیای که مال خودتان است. دامنههای دسترسیاش را برگزینید، و آنچه را میتواند از طرفش بفرستد به دامنههای کامل یا نشانیهای تکی محدود کنید. راز یک بار نشان داده میشود و آنچه ذخیره میشود یک هش یکطرفه است.
GET /ping با دامنههای دسترسی روی کلید و دامنههایی که نقشش برایش گذاشته پاسخ میدهد. export OPENEMAIL_API_KEY=oe_live_9f2c1a4b7e05d3862c1f0a44_kX7… curl https://api.openemail.uk/ping \ -H "Authorization: Bearer $OPENEMAIL_API_KEY" - 2
کلاینت را نصب کنید
کلاینتی TypeScript بدون وابستگی، منتشرشده به شکل ESM و CommonJS، که کلید را از OPENEMAIL_API_KEY میخواند. اگر ترجیح میدهید خودتان JSON بفرستید از آن بگذرید، چون هر نقطه پایانی HTTP ساده است.
Node 18 به بالا، Workers، Deno، Bun و مرورگر. bun add @openemail/sdk - 3
ارسال
پاسخ شناسه را با خود دارد. GET /emails/{id} آن را باز میکند، /events رد هر گیرنده را دارد و /tracking بازشدنها و کلیکها را.
تلاش دوباره با همان Idempotency-Key نتیجهی اول را با Idempotency-Replayed: true برمیگرداند. import { init, openemail } from '@openemail/sdk' init({ apiKey: process.env.OPENEMAIL_API_KEY }) const email = await openemail.emails.send({ from: 'Acme Billing <[email protected]>', to: '[email protected]', subject: 'Your September invoice', html: '<p>Invoice attached.</p>',}) console.log(email.id, email.status)
غایب
کاری که هنوز برایتان
انجام نمیدهد.
پنج چیز که ارزش دارد پیش از ساختن روی این بدانید، نه بعد از آن.
- بدون نقطه پایانی آپلود
- پیوستهای درونخطی به شکل base64 و زیر سقف مجموع 5 مگابایت میروند. فایل بزرگتر با نام بردن از فایلی که از پیش در فضای کاری است، با شناسهاش، فرستاده میشود و به شکل یک پیوند دانلود میرود.
- برگشتیها در صندوق پستی متوقف میشوند
- گزارش تحویل تجزیه میشود، با Message-ID تطبیق میخورد، روی رشته برچسب میگیرد و به شکل وبهوک email.bounced فرستاده میشود. چیزی در ردیف ارسال بازنویسی نمیشود، پس از راه GET /emails یک پیام برگشتی همچنان ارسالشده خوانده میشود.
- نامهی نگارشگر در GET /emails نیست
- نامهای که از نگارشگر اپ فرستاده میشود در آن فهرست نمیآید، چون نگارشگر از همان مسیر ارسال نمینویسد.
- OAuth رضایت دارد، نه دامنهی دسترسی
- درخواست پیش از تأیید نشان داده میشود و برنامههای متصل آن را پس میگیرد، اما توکن به کل صندوق پستی شما میرسد، نه به بخشی که برنامه خواسته بود.
- بدون گردشکار انتشار
- انتشار کلاینت اجرای دستی preflight، بیلد و bun publish است، پس یک نسخه وقتی به npm میرسد که کسی آن را اجرا کند، نه وقتی که تغییر ثبت شود.
راستیآزمایی یک تحویل
هر تحویل امضا میشود،
و هر تلاش دوباره شناسهاش را با خود دارد.
امضا یک HMAC-SHA-256 روی مهر زمانی، یک نقطه و بدنهی خام است. با همان بایتها به شکلی که رسیدهاند بسنجیدش، چون تجزیه و دوبارهسریالکردن ترتیب کلیدها را به هم میزند و امضا را میشکند.
X-OpenEmail-Signature: t=1758240000,v1=9f0c4b2e7d1a86c3X-OpenEmail-Event: email.deliveredX-OpenEmail-Delivery: evt_4b7e05d3862c1f0a- پنجرهی بازپخش
- 300 ثانیه، و اعمالش کار گیرنده است. راستیآزمای درون SDK بهصورت پیشفرض همین را میگیرد.
- Idempotency-Key
- روی یک ایندکس یکتا از این کلید و کلید API شما با هم ثبت میشود، پس تلاش دوباره پس از یک وقفهی زمانی نتیجهی اول را با Idempotency-Replayed: true برمیگرداند به جای اینکه دو بار بفرستد.
- تلاشهای دوباره
- پنج تلاش: همزمان با رخ دادن رویداد، سپس پس از 1 دقیقه، 5، 25 و 2 ساعت. فقط وقفهی زمانی، اتصال ردشده، 408، 425، 429 یا یک 5xx تکرار میشود.
- X-OpenEmail-Delivery
- شناسهی رویداد یک بار ساخته میشود و هر تلاش آن را با خود دارد، پس گیرندهای که یک شناسه را دو بار ببیند میتواند دومی را کنار بگذارد به جای اینکه دوباره روی آن عمل کند.
برای چه کسی است
یک صندوق پستی.
سه راه ورود.
یک نشانی رایگان روی openemail.uk، با کلاینت پشت آن.
همان صندوق پستی روی API، SDK و MCP.
کلیدی بسازید.
چیزی بفرستید.
Full API, MCP and SDK access در همهی طرحها. Free همراه خود 50 AI actions a day را دارد.