پروتکل افزونههای چندمنظوره ایمیل اینترنتی (MIME)
Multipurpose Internet Mail Extensions (MIME) یک استاندارد اینترنتی است که فرمت ایمیل را برای پشتیبانی از موارد زیر گسترش میدهد:
- متن در مجموعه کاراکتری غیر از US-ASCII؛
- پیوستهای غیرمتنی؛
- بدنههای پیام چند بخشی؛ و
- اطلاعات هدر در مجموعه کاراکتری غیر-ASCII.
SMTP فقط از کاراکترهای ۷ بیتی ASCII پشتیبانی میکند که عملاً به این معناست که تنها تعداد کوچکی از زبانها پشتیبانی میشوند. زبانهای مبتنی بر الفبای لاتین در SMTP بهخوبی کار میکنند؛ اما زبانهای دیگر هنگام تحویل ایمیل بهدرستی نمایش داده نمیشوند. با این حال، MIME پشتیبانی از کاراکترهای ASCII را در SMTP گسترش میدهد تا ایمیلهای استفادهکننده از مجموعه کاراکتری دیگر، تصاویر و صداها بتوانند ارسال و نمایش یابند. بهطور کلی، تمام کلاینتهای ایمیل و سرورهای SMTP پیامهای با فرمت MIME را بهدرستی تفسیر میکنند.
درک سرصفحههای MIME
سرصفحههای MIME شامل اطلاعاتی دربارهٔ پروتکل هستند.
MIME-Version
این نشان میدهد که پیام با فرمت MIME است. به صورت زیر ظاهر میشود:
MIME-Version: 1.0
Content-Type
این نشاندهندهٔ نوع محتوای پیام است که به صورت یک جفت نوع و زیرنوع ارائه میشود: به عنوان مثال text/plain، text/html. نوع محتوای multipart میتواند شامل متن، HTML، پیوستها، تصاویر، صوت، ویدئو و غیره باشد.
Content-Type: multipart
Content-Transfer-Encoding
نشان میدهد آیا یک طرح رمزگذاری باینری‑به‑متن بر روی رمزگذاری تعیینشده توسط content-type استفاده شده است یا خیر. اگر استفاده شده باشد، نوع آن را بیان میکند. میتوانیم در اینجا نوع کدگذاری ۷‑بیتی، ۸‑بیتی یا باینری را مشخص کنیم.
کلمهرمزگذاریشده
هدایل پیامهای SMTP معمولاً از کاراکترهای ASCII استفاده میکنند. کاراکترهای غیر-ASCII باید از syntax کلمه رمزگذاری شده MIME به جای رشتهٔ متنی استفاده کنند. قالب به صورت زیر است:
"=? charset ? encoding ? encoded text ?=".
پیامهای چندبخشی
یک پیام چندبخشی MIME شامل یک مرز (boundary) در هدر content-type است. این مرز که نباید در هیچیک از بخشها ظاهر شود، بین بخشها و در ابتدا و انتهای بدنه پیام قرار میگیرد، بهصورت زیر:
MIME-version: 1.0
Content-type: multipart/mixed; boundary="frontier"
This is a multi-part message in MIME format.
--frontier
Content-type: text/plain
This is the body of the message.
--frontier
Content-type: application/octet-stream
Content-transfer-encoding: base64
PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
--frontier--
هر بخش شامل هدر محتوا و بدنه خودش است.
زیرنوعهای چندبخشی
استاندارد MIME زیرنوعهای مختلف پیامهای چندبخشی را تعریف میکند. زیرنوع در هدر "Content-Type" پیام کلی مشخص میشود.
در زیر فهرستی از پرکاربردترین زیرنوعها آمده است.
- Mixed: multipart/mixed برای ارسال فایلهایی با هدرهای "Content-Type" متفاوت بهصورت درونمتنی استفاده میشود. اگر تصاویر یا فایلهای دیگری که بهراحتی قابل خواندن هستند ارسال شود، اکثر کلاینتهای ایمیل آنها را بهصورت درونمتنی نمایش میدهند.
- Message: یک بخش پیام شامل یک ایمیل است.
- Digest: digest روشی ساده برای ارسال چندین پیام متنی است. نوع محتوای پیشفرض برای هر بخش "message/rfc822" میباشد.
- Alternative: زیرنوع alternative نشان میدهد که هر بخش یک نسخه "جایگزین" از همان محتوا (یا مشابه آن) است که هر کدام در قالب متفاوتی که توسط هدر "Content-Type" تعیین شدهاند، قرار دارند.
معمولاً multipart/alternative برای ایمیلهای دو بخشی استفاده میشود: یک بخش متن ساده (text/plain) و یک بخش HTML (text/html). بخش متن ساده سازگاری با نسخههای قبلی را فراهم میکند، در حالی که بخش HTML امکان استفاده از قالببندی و پیوندهای فراونی را میدهد. بیشتر کلاینتهای ایمیل گزینهای برای ترجیح متن ساده نسبت به HTML دارند؛ این نمونهای است از اینکه چگونه عوامل محلی میتوانند بر انتخاب «بهترین» بخش پیام توسط برنامه تأثیر بگذارند.