mmdf(5) راهنمای کاربران mmdf(5)

mmdf_neomutt - قالب صندوق پستی تسهیلات توزیع یادداشت چندکاناله (MMDF)

این سند به توصیف قالب صندوق پستی MMDF می‌پردازد که توسط برخی از MTAها و MUAها (مانند scomail(1)) برای ذخیره محلی پیام‌های ایمیل استفاده می‌شود.

یک صندوق پستی MMDF فایلی متنی شامل تعداد دلخواهی پیام ایمیل است. هر پیام شامل یک نشان پستی (postmark)، به دنبال آن یک پیام ایمیل قالب‌بندی‌شده مطابق با RFC822 / RFC2822، و سپس یک نشان پستی دیگر است. قالب فایل خط‌محور است. خطوط با نویسه‌های تعویض خط (ASCII 10) از یکدیگر جدا می‌شوند. یک خط نشان پستی شامل چهار نویسه "^A^A^A^A" (Control-A؛ ASCII 1) است.

نمونه‌ای از یک صندوق پستی MMDF شامل دو نامه:
^A^A^A^A
From: example@example.com
To: example@example.org
Subject: test
>From what I learned about the MMDF-format:
^A^A^A^A
^A^A^A^A
From: example@example.com
To: example@example.org
Subject: test 2
bar
^A^A^A^A

برخلاف بیشتر قالب‌های دیگر صندوق پستی مبتنی بر تک‌فایل مانند MBOXO و MBOXRD (ببینید mbox(5)) هیچ نیازی به نقل‌قول کردن یا خارج کردن از نقل‌قول (quote/dequote) برای خطوط "From " در صندوق‌های پستی MMDF وجود ندارد، زیرا چنین خطوطی در این قالب معنای ویژه‌ای ندارند.

اگر زمان تغییر (که معمولاً از طریق stat(2) تعیین می‌شود) یک فایل صندوق پستی غیرخالی بزرگ‌تر از زمان دسترسی باشد، فایل دارای ایمیل جدید است. بسیاری از MUAها یک هدر Status: در هر پیام قرار می‌دهند تا مشخص کنند کدام پیام‌ها پیش‌تر خوانده شده‌اند.

از آنجا که فایل‌های MMDF اغلب توسط چندین برنامه به‌صورت موازی مورد دسترسی قرار می‌گیرند، فایل‌های MMDF به‌طور کلی نباید بدون قفل‌گذاری مورد دسترسی واقع شوند.

سه مکانیسم قفل‌گذاری متفاوت (و ترکیب‌هایی از آن‌ها) به‌طور کلی مورد استفاده قرار می‌گیرند:

  • قفل‌گذاری fcntl(2) بیشتر در سیستم‌های نوین و سازگار با POSIX استفاده می‌شود. استفاده از این روش قفل‌گذاری به‌ویژه زمانی توصیه می‌شود که فایل‌های MMDF از طریق سامانه فایل شبکه‌ای (NFS) مورد دسترسی قرار می‌گیرند، زیرا به نظر می‌رسد این تنها راه قابل‌اطمینان برای باطل‌سازی حافظه نهان (کَش) کلاینت‌های NFS است.
  • قفل‌گذاری flock(2) بیشتر در سیستم‌های مبتنی بر BSD استفاده می‌شود.

در صورت ترکیب چند روش، توسعه‌دهندگان باید اطمینان حاصل کنند که از حالت‌های غیرمسدودکننده (non-blocking) فراخوان‌های سیستمی fcntl(2) و flock(2) استفاده کنند تا از ایجاد بن‌بست (deadlock) جلوگیری شود.

در صورت ترکیب چند روش، یک فایل MMDF نباید پیش از به دست آمدن تمام قفل‌های مجزا، قفل‌شده در نظر گرفته شود. هنگامی که یکی از روش‌های قفل‌گذاری مجزا با شکست مواجه می‌شود، برنامه کاربردی باید تمامی قفل‌هایی را که با موفقیت کسب کرده آزاد کند و کل فرآیند قفل‌گذاری را پس از یک تاخیر مناسب، از ابتدا دوباره آغاز نماید.

مکانیسم قفل‌گذاری استفاده‌شده در یک سیستم خاص، تابعی از سیاست محلی است، و باید به‌طور سازگار توسط تمام برنامه‌های کاربردی نصب‌شده روی سیستم که به فایل‌های MMDF دسترسی دارند به کار گرفته شود. عدم رعایت این موضوع ممکن است منجر به از دست رفتن داده‌های ایمیل و خرابی فایل‌های MMDF گردد.

قالب MMDF بخشی از هیچ استاندارد پشتیبانی‌شده فعلی نیست.

قالب MMDF در دانشگاه دلاور توسط Dave Crocker توسعه یافت.

scomail(1), fcntl(2), flock(2), link(2), stat(2), mbox(5), RFC822, RFC2822

Urs Janssen <urs@tin.org>

2002-02-18 Unix