انتقال از Postmark
کتابخانهٔ Postmark را نگه دارید و از طریق OpenEmail بفرستید. میزبان و توکن سرور آن را عوض کنید، و کد ارسال شما همانطور که هست میماند.
چه چیزی را عوض کنید
کتابخانه را به https://api.openemail.uk/compat/postmark هدایت کنید و بهجای توکن سرور یک کلید API از OpenEmail با مجوز emails:send بگذارید. کلید در همان سرآیند X-Postmark-Server-Token فرستاده میشود. فراخوانیهایی که نامه میفرستند همانطور که هستند میمانند، و نشانی From تعیین میکند که پیام میتواند برود یا نه، مثل همهجای OpenEmail.
import { ServerClient } from 'postmark' const client = new ServerClient(process.env.OPENEMAIL_API_KEY, { requestHost: 'api.openemail.uk/compat/postmark',}) await client.sendEmail({ From: '[email protected]', To: '[email protected]', Subject: 'Your invoice', HtmlBody: '<p>Your invoice is attached.</p>', MessageStream: 'outbound',})در Node، requestHost میزبان و مسیر را با هم میگیرد، بدون طرح و بدون خط مورب پایانی. در Ruby، path_prefix در هر دو سر به خط مورب نیاز دارد. در Python، بستهٔ رسمی postmark-python را با base_url به کار ببرید. بستهٔ انجمنی postmarker نمیتواند به مسیری زیر یک میزبان برسد، پس اینجا کار نمیکند. در PHP، PostmarkClient::$BASE_URL طرح، میزبان و مسیر را بدون خط مورب پایانی میگیرد. این مقدار static است، پس برای همهٔ کلاینتهای Postmark در فرایند اعمال میشود، از جمله PostmarkAdminClient.
چه چیزی به چه چیزی نگاشت میشود
نقطههای پایانیای که پاسخ داده میشوند POST /email، /email/batch، /email/withTemplate و /email/batchWithTemplates هستند. نام فیلدها با هر بزرگی و کوچکی حروف جور میشوند، مثل Postmark، و رشتهٔ خالی نیامده به حساب میآید.
| Postmark | در OpenEmail |
|---|---|
| From | فرستنده، همراه با نامش. |
| To | گیرندههایی که با ویرگول جدا شدهاند. همراه با Cc و Bcc، تا 50 برای هر پیام. |
| ReplyTo | یک نشانی پاسخ. |
| Subject | موضوع. |
| HtmlBody | بدنهٔ HTML. TextBody بدنهٔ متنی میشود، و یکی از این دو لازم است. |
| Headers | سرآیندهای سفارشی که بهصورت Name و Value داده میشوند: X-*، List-*، Reply-To، Precedence، Auto-Submitted، Importance، Priority و Feedback-ID. |
| Attachments | فایلها، حداکثر 20 عدد و روی هم 5 مگابایت. تصویری که HTML شناسهٔ ContentID آن را بهصورت cid: به کار میبرد، در همان جایی که آمده جاسازی میشود. هر فایل دیگر بهصورت پیوست معمولی میرسد. |
| Tag | برچسبی با نام tag. |
| Metadata | برچسبهایی با همان نامها و مقدارها. همراه با Tag، حداکثر 10 برای هر پیام. |
| TrackOpens | ردیابی باز شدن را برای پیام روشن یا خاموش میکند. |
| TrackLinks | HtmlAndText و HtmlOnly ردیابی کلیک را روشن میکنند، و None آن را خاموش میکند. |
| MessageStream | outbound، یا شناسهٔ هر جریان تراکنشی دیگر، پیام را مثل همیشه میفرستد. |
| TemplateAlias | slug یا شناسهٔ (tpl_...) یک قالب OpenEmail، که با TemplateModel پر میشود. InlineCss پذیرفته میشود و چیزی را تغییر نمیدهد. |
چه چیزی رد میشود و چرا
TemplateId، با ErrorCode 1101. شناسهٔ قالب Postmark اینجا معنایی ندارد، پس قالب را در OpenEmail دوباره بسازید و slug یا شناسهٔ آن را درTemplateAliasبفرستید.- جریان
broadcast، با ErrorCode 1236. این نقطههای پایانی نامهٔ تراکنشی میفرستند، و خبرنامهها بهصورت ارسالهای گروهی OpenEmail میروند. Subject،HtmlBodyیاTextBodyدر پیامی با قالب، با ErrorCode 1123، چون قالب آنها را فراهم میکند.TrackLinksبا مقدارTextOnly، چون OpenEmail پیوندهای بخش HTML را ردیابی میکند.- بیش از یک نشانی پاسخ، سرآیندی که دو بار یا بیرون از فهرست بالا آمده باشد، بیش از 10 برچسب، و نام برچسب یا
Metadataکه چیزی جز حرف، رقم،_و-داشته باشد. - دستهای با بیش از 100 پیام، با ErrorCode 410. Postmark تا 500 میپذیرد، پس دستههای بزرگتر را تقسیم کنید.
پاسخها و خطاها
- هر ارسال با 200 همراه با
To،SubmittedAt،MessageID،ErrorCodeبرابر 0 وMessageبرابر OK پاسخ میدهد.MessageIDشناسهٔ پیام OpenEmail است، همان کهGET /emails/{id}و وبهوکها به کار میبرند. سرآیندIdempotency-Keyمثل بقیهٔ API کار میکند. - هر دسته با 200 و یک نتیجه برای هر پیام، به همان ترتیب، پاسخ میدهد. پیامی که شکست خورده فقط
ErrorCodeوMessageخودش را دارد، و بقیه همچنان میروند. - خطاها بهصورت
ErrorCodeوMessageبرمیگردند. کلید ناموجود یا ناشناخته، یا کلیدی بدونemails:send، پاسخ HTTP 401 با ErrorCode 10 میگیرد. بقیه HTTP 422 میگیرند: ErrorCode 300 برای خود پیام، 400 برای نشانی From که کلید اجازهٔ استفاده از آن را ندارد، 401 برای دامنهای که هنوز نمیتواند بفرستد، 402 برای بدنهای که JSON نیست و 405 برای فضای کاریای که سهمیهٔ ارسالش را تمام کرده است. HTTP 413 یعنی بدنه از 10 مگابایت، یا برای یک دسته از 50 مگابایت، بیشتر است یا پیوستها از 5 مگابایت بیشترند.