پست الکترونیک


امروزه پست الکترونیک یا ایمیل به یکی از متداول‌ترین روش های برقراری ارتباط تبدیل شده است. در این قسمت نحوه راه‌اندازی یک سرویس دهنده پست الکترونیک را فرا خواهیم گرفت.

سرویس پست الکترونیک از چندین استاندارد و پروتکل تشکیل شده که این پروتکل‌ها نحوه ارسال پیام‌ها از طریق شبکه را تعیین می‌کنند. برنامه‌های زیادی وجود دارند که در هنگام ارسال یک پیغام درگیر می‌شوند و در این بین هر کدام وظیفه خاصی را بر عهده دارند. بیشتر کاربران فقط با همان برنامه‌ای که از آن برای خواندن و نوشتن پیام‌ها استفاده می‌کنند آشنا هستند. (این برنامه‌ها MUA نامیده می‌شوند) برنامه‌های MUA تنها برای خواندن و نوشتن پیام‌ها استفاده می‌شوند و در ارسال و دریافت پیام‌ها نقشی ندارند. این دقیقا همان کاری است که یک برنامه MTA انجام می‌دهد.

اجزای مختلف پست الکترونیک

وقتی که می‌خواهید پیامی را برای دوستتان ارسال کنید، ابتدا باید با استفاده از یک MUA مانند Microsoft Outlook یا Mozilla Thunderbird پیام خود را نوشته و آماده سازید. (یا همین طور یک رابط تحت وب) سپس برنامه مورد نظر به سادگی پیام شما را برای یک سرویس‌دهنده پست الکترونیک ارسال می‌کند که این سرویس‌دهنده برنامه‌ای تحت عنوان MTA (مانند postfix یا sendmail) اجرا می‌کند. نقش یک MTA این است که پیامی را از یک سرویس‌دهنده به سرویس‌دهنده دیگری ارسال کند. وقتی که MTA درخواستی برای حمل یک پیام دریافت می‌کند، ابتدا مشخص می‌کند که آیا باید آن پیام را قبول کند یا نه. وقتی که MTA پیام مورد نظر را پذیرفت، باید گیرنده پیام را مشخص کند. گیرنده می‌تواند کاربری بر روی همان سیستم، کاربری در یک دامنه دیگر، یک برنامه کاربردی، یک فایل و … باشد. اگر گیرنده کاربری روی همان سیستم باشد، پیام به سادگی به صندوق پستی (mailbox) کاربر مورد نظر اضافه خواهد شد. اما اگر گیرنده کاربری در یک دامنه دیگر باشد، برنامه MTA باید پیام را برای سرویس‌دهنده همان دامنه ارسال کند. اگر یک MTA نتواند پیامی را به مقصد برساند، آن پیام را برای فرستنده برگشت خواهد زد و یا اینکه مدیر سیستم را باخبر می‌سازد. MTA برای اینکه بتواند پیامی را برای یک دامنه دیگر ارسال کند، باید آدرس IP سرویس‌دهنده پست الکترونیک آن دامنه را بدست آورد. این کار از طریق DNS و رکوردهای MX انجام می‌شود. بعد از اینکه MTA آدرس سرویس‌دهنده پست الکترونیک دامنه مقصد را مشخص کرد، پیام را از طریق پروتکل SMTP برای او ارسال می‌کند. (این سرویس دهنده هم به نوبه خود یک برنامه MTA اجرا می‌کند) در آن سو برنامه MTA پس از اینکه پیام را تحویل گرفت، آن را به صندوق پستی کاربر گیرنده اضافه می‌کند. این پیغام تا زمانیکه کاربر آماده خواندن آن باشد در صندوق پستی کاربر باقی خواهد ماند. گیرنده مجدداً با استفاده از یک MUA به سرویس‌دهنده پست الکترونیک متصل شده و پیام ها را دریافت می‌کند. گیرنده برای دریافت پیامها از پروتکل POP یا IMAP استفاده می‌کند. در آن سو یک برنامه MDA یا Mail Delivery Agent مسئول احراز هویت کاربر و تحویل پیام‌ها به او است.

ارتباط بین هر یک از این اجزا توسط پروتکل‌هایی برقرار می‌شود. برنامه‌های MTA از طریق پروتکل SMTP با یکدیگر ارتباط برقرار می‌کنند. در حقیققت پروتکل SMTP برای انتقال پیام‌های متنی ساده از یک کامپیوتر به کامپیوتری دیگر استفاده می‌شود. همچنین برنامه MUA هم از پروتکل SMTP استفاده می‌کند تا پیام‌ها را به یک MTA تحویل دهد. پروتکل‌های POP یا IMAP هم برای دریافت پیام‌ها از صندوق پستی استفاده می‌شوند. وقتی که کاربران می‌خواهند پیام‌هایشان را از صندوق پستی خود دریافت کنند، از پروتکل‌های POP یا IMAP برای برقراری ارتباط با سرور و دریافت پیام‌ها استفاده می‌کنند.

Diagram1تصویر بالا نحوه ارسال یک پیام را تشریح می‌کند. در مثال بالا Bob می‌خواهد پیامی را برای Alice ارسال کند. Bob از یک برنامه MUA برای نوشتن پیام استفاده می‌کند. سپس برنامه MUA با استفاده از پروتکل SMTP با برنامه MTA ارتباط برقرار کرده و پیام را به آن تحویل می‌دهد. بعد از اینکه برنامه MTA پیام Bob را قبول کرد، تعیین می‌کند که پیام قرار است به کجا و برای چه کسی ارسال شود. این کار بر اساس نشانی پست الکترونیک Alice انجام می‌شود. برنامه MTA با استفاده از پروتکل DNS نشانی سرویس دهنده مقصد را تعیین کرده و از طریق پروتکل SMTP با آن ارتباط برقرار می‌کند. در آن سو MTA دیگر بعد از دریافت پیام آن را به صندوق پستی Alice اضافه می‌کند. سپس پیام در همان جا باقی خواهد ماند تا Alice با استفاده از پروتکل‌های POP یا IMAP پیام را از صندوق پستی خود دریافت کند.

پست الکترونیک و DNS

DNS نقشی اساسی در ارسال ایمیل‌ها ایفا می‌کند. به این صورت که برای ارسال ایمیل‌ها از یک کامپیوتر به کامپیوتری دیگر، برنامه MTA باید آدرس IP سرویس‌دهنده مقصد را با استفاده از DNS پیدا کند. پروتکل DNS برای ترجمه نام دامنه‌ها به آدرس‌های IP مورد استفاده قرار می‌گیرد. اطلاعات مربوط به دامنه‌ها در فایل‌هایی موسوم به zone ذخیره می‌گردند. به هر خط از فایل zone یک Resource record گفته می‌شود که این شامل انواع مختلفی است. یکی از این انواع، نوع MX است. رکورد MX مشخص می‌کند که چه رایانه یا رایانه‌هایی باید ایمیل‌ها را برای یک دامنه خاص دریافت کنند. شما می‌توانید رکورد MX هر دامنه‌ای را با استفاده از دستور host ببینید. به این صورت:

% host -t mx FreeBSD.org
FreeBSD.org mail is handled (pri=10) by mx1.FreeBSD.org

در مثال بالا مسئولیت دریافت پیام‌هایی که برای دامنه FreeBSD.org ارسال می‌شوند بر عهده رایانه mx1.FreeBSD.org می‌باشد. در مثال بالا تنها یک سرویس‌دهنده پست الکترونیک وجود دارد. اما سازمان‌هایی هستند که از چندین سرویس‌دهنده پست الکترونیک استفاده می‌کنند. در این حالت باید برای هر سرویس‌دهنده یک رکورد MX مجزا تعریف کرد. هر رکورد MX حاوی فیلدی است که اولویت سرویس‌دهنده متناظرش را نسبت به بقیه سرویس‌دهنده‌ها مشخص می‌کند.

در حالت ایده‌آل برای ارسال یک پیام، MTA مبدا با MTA مقصد ارتباط برقرار کرده و پیام را ارسال می‌کند.

هر پیام، یک سرآیند یا هدر به همراه خود دارد. این هدر دربرگیرنده اطلاعاتی درباره پیام مورد نظر است. مثلا گیرنده، فرستنده، عنوان پیام، تاریخ ارسال و … . این سرآیند به وسیله یک خط خالی از متن اصلی نامه تفکیک می‌شود.

در زیر نمونه‌ی یک پیام به همراه سرآیند آن را مشاهده می‌کنید:

  From: John Doe <jdoe@machine.example>
  To: Mary Smith <mary@example.net>
  Subject: Saying Hello
  Date: Fri, 21 Nov 1997 09:55:06 -0600
  Message-ID: <1234@local.machine.example>
  This is a message just to say hello.
  So, "Hello".

پروتکل SMTP

پروتکل SMTP نحوه ارسال پیام‌ها در شبکه را مشخص می‌کند. در حقیقت برنامه‌های MTA از طریق این پروتکل پیام‌ها را برای یکدیگر ارسال می‌کنند. پیاده‌سازی های مختلفی از این پروتکل وجود دارد مانند postfix, sendmail و … . پورت استاندارد این پروتکل ۲۵ است. مثال زیر نحوه ارسال یک پیام به وسیله این پروتکل را تشریح می‌کند:

C: nc smtp.example.com 25
S: 220 smtp.example.com ESMTP Postfix
C: HELO relay.example.org
S: 250 Hello relay.example.org, I am glad to meet you
C: MAIL FROM:<bob@example.org>
S: 250 Ok
C: RCPT TO:<alice@example.com>
S: 250 Ok
C: RCPT TO:<theboss@example.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: "Bob Example" <bob@example.org>
C: To: "Alice Example" <alice@example.com>
C: Cc: theboss@example.com
C: Date: Tue, 15 January 2008 16:02:43 -0500
C: Subject: Test message
C:
C: Hello Alice.
C: This is a test message with 5 header fields and 4 lines in the message body.
C: Your friend,
C: Bob
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye
{The server closes the connection}

در مثال بالا C به معنی Client و S به معنی Server است. در خط اول، ارتباطی را بر روی پورت ۲۵ سرور smtp.example.com آغاز کردیم. بلافاصله بعد از اتصال، سرور خودش را معرفی کرد:

S: 220 smtp.example.com ESMTP Postfix

در ادامه با دستور HELO خودمان را به سرور معرفی کردیم:

HELO relay.example.org

سرور به این صورت به ما خوش‌آمد گفت:

۲۵۰ Hello relay.example.org, I am glad to meet you

در ادامه با دستور MAIL FROM فرستنده پیام را مشخص کردیم:

MAIL FROM:bob@example.org

بعد از اینکه سرور درخواست ما را پذیرفت، با دستور RCPT TO گیرنده پیام را مشخص کردیم:

RCPT TO:alice@example.com

می‌توان چندین گیرنده را مشخص کرد:

RCPT TO:theboss@example.com

حالا باید متن پیام خود را بنویسیم. برای این کار باید دستور DATA را اجرا کنیم:

DATA

سرور ضمن قبول این درخواست اعلام می‌کند که انتهای پیام خود را با یک نقطه تنها در یک خط مشخص کنید.

۳۵۴ End data with <CR><LF>.<CR><LF>

متن پیام شامل هدر و بدنه می‌شود:

C: From: "Bob Example" <bob@example.org>
C: To: "Alice Example" <alice@example.com>
C: Cc: theboss@example.com
C: Date: Tue, 15 January 2008 16:02:43 -0500
C: Subject: Test message
C:
C: Hello Alice.
C: This is a test message with 5 header fields and 4 lines in the message body.
C: Your friend,
C: Bob
C: .

سپس سرور این پیام را در صفی قرار می‌دهد تا ارسال شود. همچنین شماره شناسایی پیام را هم ارسال می‌کند:

S: 250 Ok: queued as 12345

با دستور QUIT می‌توان به اتصال خاتمه داد:

QUIT
۲۲۱ Bye

قالب صندوق پستی

تمام پیام‌ها بعد از ارسال در یک صندوق پستی یا mailbox ذخیره می‌شود تا گیرنده هر وقت که آماده بود آن‌ها را از صندوق پستی خود برداشته و مطالعه کند. دو قالب رایج برای ذخیره پیام ها عبارتند از mbox و maildir.

در قالب mbox، هر کاربر یک فایل مخصوص به خود دارد که تمام پیام‌های آن کاربر در همان فایل ذخیره می‌شود. این فایل چیزی بیش از یک فایل متنی ساده نیست. چون تمام پیام ها در یک فایل ذخیره می‌شوند، باید راهی برای تفکیک پیام ها از یکدیگر پیدا کرد. آغاز هر پیام با خطی با نام ‎ From_ مشخص می‌شود. این خط با کلمه From شروع شده، به دنبال آن یک فضای خالی، و سپس با مسیر برگشت پیام به اتمام می‌رسد. (به همین دلیل به آن ‎ From_) می‌گویند. در پایان هر پیام هم یک خط خالی قرار می‌گیرد. در زیر نمونه‌ای از یک فایل mbox را مشاهده می‌کنید:

From MAILER-DAEMON Fri Jul  8 12:08:34 2011
From: Author <author@example.com>
To: Recipient <recipient@example.com>
Subject: Sample message 1
 
This is the body.
>From (should be escaped).
There are 3 lines.
 
From MAILER-DAEMON Fri Jul  8 12:08:34 2011
From: Author <author@example.com>
To: Recipient <recipient@example.com>
Subject: Sample message 2
This is the second body.

حالا فرض کنید که در متن پیام خطی وجود داشته باشد که با کلمه From أغاز شود. در این صورت یک کاراکتر ‎ > به ابتدای آن خط اضافه خواهد شد. (به مثال بالا توجه کنید)

اما در قالب maildir، هر کاربر یک دایرکتوری مجزا برای خود دارد و هر پیام در یک فایل مجزا ذخیره می‌شود. از آنجا که در این روش هر پیام در یک فایل مجزا قرار می‌گیرد دیگر نیازی به خط ‎ From_ نیست. هر دایرکتوری maildir سه زیردایرکتوری به نام‌های new, tmp و cur دارد. پیام‌هایی که جدیداً رسیده‌اند و کاربر هنوز آن‌ها را مطالعه نکرده در دایرکتوری new قرار می‌گیرند. بعد از اینکه کاربر پیام‌ها را مطالعه کرد، پیام‌ها به دایرکتوری cur منتقل می‌شوند. شکل زیر این مطلب را به شکل زیبایی تشریح می‌کند:

Maildir

نصب postfix

postfix یکی از محبوب‌ترین برنامه‌های MTA است که برای اولین بار در سال ۱۹۹۷ توسط Wietse Venema نوشته شد. postfix را می‌توان از طریق پورت‌های FreeBSD نصب کرد:

cd /usr/ports/mail/postfix
make install clean

اگر به هر دلیلی درخت پورت ها در سیستم شما وجود ندارد، می‌توانید postfix را از طریق بسته‌های باینری نصب کنید:

pkg_add -rv postfix

Mail Server پیش فرض در FreeBSD برنامه sendmail است که در نصب پیش فرض وجود دارد. با اضافه کردن خطوط زیر به فایل /etc/rc.conf می‌توانید sendmail را غیر فعال کنید:

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

همچنین خطوط زیر را هم به فایل /etc/periodic.conf اضافه کنید. (اگر این فایل وجود ندارد خودتان آن را ایجاد کنید)

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

پیکربندی DNS

همان طور که گفته شد DNS نقشی اساسی در ارسال ایمیل‌ها ایفا می‌کند. DNS از دو جهت حائز اهمیت است. اول اینکه postfix باید قادر به ترجمه آدرس دیگر دامنه‌ها باشد تا امکان ارسال ایمیل به آنها فراهم شود. همین طور دیگر سرورها هم برای ارسال ایمیل باید بتوانند آدرس سرور پست‌الکترونیک شما را ترجمه کنند. برای قسمت اول کافی است DNS Server ها را در فایل /etc/resolv.conf به سیستم معرفی کنید. برای مثال:

nameserver 8.8.8.8
nameserver 4.2.2.4

اما برای قسمت دوم شما نیاز به راه‌اندازی یک DNS Server دارید. برای اطلاعات بیشتر لطفا سامانه نام دامنه و BIND را ببینید. به طور کلی باید در فایل zone دامنه خود یک رکورد MX اضافه کنید.

@	IN	MX	۱۰	mx.example.com
mx	In	A	۱۹۲٫۱۶۸٫۱٫۱

همین طور مطمئن شوید که سیستم شما یک hostname معتبر آن هم به صورت fqdn دارد. با دستور hostname می‌توانید hostname سیستم خود را ببینید:

$ hostname
mail.example.com

می‌توانید hostname سیستم خود را در فایل /etc/rc.conf تنظیم کنید.

hostname="mail.example.com"

پیکربندی postfix

postfix از یک معماری ماژولار برخوردار است و از برنامه‌های کوچکی تشکیل می‌شود که هر برنامه وظیفه خاصی را بر عهده دارد. (برخلاف sendmail که یک برنامه بزرگ تمام کارها را انجام می‌دهد) یکی از این برنامه‌ها master است که وظیفه مدیریت کردن دیگر برنامه‌ها را بر عهده دارد. فایل‌های پیکربندی postfix در مسیر /usr/local/etc/postfix قرار دارند. فایل main.cf فایل پیکربندی اصلی محسوب می‌شود و فایل master.cf برای پیکربندی دایمن master مورد استفاده قرار می‌گیرد.

برای شروع باید فایل پیکربندی postfix را با استفاده از یک ویرایشگر متن باز کنید:

ee /usr/local/etc/postfix/main.cf

خطوطی که با کاراکتر # شروع می‌شوند به عنوان توضیح تفسیر شده و از آنها صرف نظر می‌شود. همچنین در حالت عادی نباید در ابتدای خطوط کاراکتر فضای خالی قرار داشته باشد. اگر خطی با یک کاراکتر فضای خالی شروع شود، به عنوان ادامه خط قبلی تفسیر خواهد شد. با استفاده از این قابلیت می‌توانید خطوط طولانی را به چند خط بشکنید تا فایل پیکربندی خواناتر شود.

به عنوان اولین کار، باید hostname سیستم خود را به postfix معرفی کنید تا postfix هم بتواند خودش را شناسایی کرده و هم بتواند خودش را به دیگران معرفی کند. (مرحله HELO را بیاد بیاورید)

myhostname=mail.example.com

قدم بعدی، معرفی دامنه سیستم به postfix است. این کار با دایرکتیو mydomain انجام می‌شود. البته اگر پارامتر myhostname را به درستی تنظیم کرده اید، اجباری برای تنظیم mydomain نخواهد بود. چون postfix می‌تواند دامنه سیستم را از طریق همان پارامتر myhostname تشخیص دهد. به هر حال می‌توانید دامنه سیستم را به کمک پارامتر mydomain به postfix معرفی کنید:

mydomain=example.com

پارامتر mydestination مشخص کننده دامنه ای است که postfix ایمیل‌های ارسالی برای آن دامنه را دریافت کرده و به کاربران روی سیستم تحویل می‌دهد.

mydestination=$mydomain, $myhostname

به مثال بالا دقت کنید. می‌توانید با قرار دادن $ در ابتدای یک پارامتر، از مقدار آن پارامتر در جای دیگری استفاده کنید. در مثال بالا مقدار پارامتر mydomain (یعنی همان example.com) جایگزین ‎ $mydomain خواهد شد.

کاربران محلی می‌توانند تنها از نام‌های کاربری برای ارسال ایمیل به یکدیگر استفاده کنند. مثلا اگر کاربری به نام john بخواهد پیامی برای کاربری به نام alice ارسال کند، می تواند به جای نوشتن alice@example.com تنها به نوشتن ‘alice’ اکتفا کند. در این صورت postfix مقدار پارامتر myorigin را به انتهای نام کاربری ضمیمه خواهد کرد.

myorigin=$mydomain

به مثال بالا دقت کنید. می‌توانید با قرار دادن $ در ابتدای یک پارامتر، از مقدار آن پارامتر در جای دیگری استفاده کنید. در مثال بالا مقدار پارامتر mydomain (یعنی همان example.com) جایگزین ‎ $mydomain خواهد شد.

تمام کاربرانی که در فایل /etc/passwd تعریف شده‌اند دارای یک mailbox هستند که در مسیر /var/mail/$USER قرار دارد. نامه‌های ارسالی به کاربران سیستم در mailbox متناظر با نام کاربری آنها قرار می‌گیرد. هر کاربر آدرس ایمیلی در قالب زیر دارد:

$USER@$mydestination

مثلا اگر کاربری به نام john وجود داشته باشد و مقدار پارامتر mydestination هم برابر example.com تنظیم شده باشد، آدرس ایمیل john برابر john@example.com خواهد بود. به کمک فایل /etc/aliases می‌توانید آدرسهای دیگری را هم اضافه کنید. این فایل از دو ستون تشکیل می‌شود و قالب کلی آن به صورت زیر است:

name: addr_1, addr_2, addr_3, . . .

می‌خواهیم هر ایمیلی که به آدرس john.doe@example.com و j.doe@example.com ارسال می‌شود در mailbox کاربر john قرار بگیرد. کافی است خطوط زیر را به فایل/etc/aliases اضافه کنیم:

j.doe:		john
john.doe:	john

معمولا برنامه‌های کاربردی گزارشی از اعمال خود را برای کاربر root در آدرس root@example.com ارسال می‌کنند. کاربر root برای خود mailbox مستقل نداشته و شما باید جایی را برای ذخیره ایمیل‌های کاربر root تعیین کنید:

root:		john

به این ترتیب هر ایمیلی که برای root@example.com ارسال شود در mailbox کاربر john قرار خواهد گرفت.

یادتان باشد که همیشه بعد از اعمال تغییرات در فایل /etc/aliases باید دستور زیر را برای اعمال تغییرات اجرا کنید:

# newaliases

بسیار خب! حالا ما برای اجرای postfix آماده‌ایم. کافی است دستور زیر را اجرا کنید:

# postfix start

برای اینکه postfix در هنگام بوت شدن سیستم به صورت خودکار شروع به کار کند لازم است تا خط زیر را به فایل /etc/rc.conf اضافه کنید:

postfix_enable="YES"

هر بار که تغییری در فایل‌های پیکربندی ایجاد کردید، باید postfix را reload کرده تا تغییرات اعمال شوند. برای انجام این کار کافی است دستور را اجرا کنید:

# postfix reload

ارسال و دریافت ایمیل

به عنوان یک کاربر، برای ارسال و دریافت پیام‌ها باید از برنامه‌هایی موسوم به MUA استفاده کنید. mail برنامه MUA پیش فرض در FreeBSD است.

برای خواندن پیامها به کمک mail کافی است این برنامه را در خط فرمان اجرا کنید:

$ mail

با اجرای دستور بالا، محتویات mailbox کاربر که در مسیر /var/mail قرار دارد نمایش داده خواهد شد. پیام‌های جدید فهرست شده و به صورت خودکار شماره‌گذاری می‌شوند.

Mail version 8.1 6/6/93.  Type ? for help.
"/var/mail/marcs": 3 messages 3 new
>N  1 root@localhost        Mon Mar  8 14:05  14/510   "test"
 N  2 root@localhost        Mon Mar  8 14:05  14/509   "user account"
 N  3 root@localhost        Mon Mar  8 14:05  14/509   "sample"

نحوه ارسال پیام با استفاده از این برنامه به شرح زیر است:

  • دستور mail را به همراه آدرس گیرنده وارد کرده و کلید ↵ Enter را فشار دهید. اگر می‌خواهید پیام را برای چند نفر ارسال کنید، می توانید آدرس گیرنده ها را با , از هم تفکیک کنید.
  • در قسمت Subject عنوان پیام خود را بنویسید.
  • سپس متن پیام خود را تایپ کنید.
  • هر وقت که متن پیام خود را به طور کامل نوشتید، خط جدیدی آغاز کرده و یک نقطه تنها در آن تایپ کنید و کلید ↵ Enter را فشار دهید.

نصب dovecot

dovecot یک برنامه MDA یا Mail Delivery Agent است. این برنامه یک پیاده‌سازی از پروتکل‌های POP و IMAP است. وظیفه این برنامه تحویل دادن نامه به گیرنده است. پس از اینکه postfix نامه را با موفقیت در mailbox کاربر قرار داد، نامه در همان‌جا خواهد ماند تا گیرنده آماده دریافت و خواندن آن باشد. از اینجا به بعد ماموریت postfix به اتمام رسیده و برنامه dovecot وظیفه احراز هویت گیرنده و تحویل نامه به او را بر عهده دارد. رابطه یک برنامه MDA و MTA را در شکل زیر می‌بینید:

برای نصب dovecot کافی است به صورت زیر عمل کنید:

cd /usr/ports/mail/dovecot
make install clean

منویی باز شده و از شما خواسته می‌شود تا برنامه dovecot را برای عمل کامپایل پیکربندی کنید. در این منو می‌توانید پشتیبانی از بانک اطلاعاتی دلخواه، پروتکل‌های مورد نیاز و SSL را فعال یا غیر فعال کنید. خب dovecot فایل پیکربندی خود را از مسیر /usr/local/etc/dovecot.conf می‌خواند. یک نمونه از این فایل در مسیر/usr/local/share/example/dovecot.conf قرار دارد که می‌توانید از همین فایل برای شروع پیکربندی استفاده کنید. کافی است این فایل را در مسیر مورد نظر کپی کنید:

cp /usr/local/share/examples/dovecot/dovecot.conf /usr/local/etc/dovecot.conf

در ادامه بر بررسی برخی از دایرکتیوهای این فایل می‌پردازیم.

protocols

این خط پروتکل‌های مجاز را مشخص می‌کند. Dovecot از چندین پروتکل مانند IMAP, POP، Managesieve و … پشتیبانی می‌کند که با استفاده از این دایرکتیو می‌توانید این پروتکل‌ها را فعال یا غیر فعال کنید. برای مثال:

protocols = imap pop3 imaps pop3s

dovecot برای اینکه بتواند نامه‌ها را به کاربران گیرنده تحویل دهد، باید به mailbox آن‌ها دسترسی داشته باشد. با استفاده از دایرکتیو mail_location می‌توانید محل قرار گیری mailbox کاربران را به dovecot معرفی کنید. البته باید نوع mailbox را هم مشخص کنید (mbox یا maildir) برای مثال:

mail_location = maildir:/usr/local/virtual/domain.tld/%u
mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n

همین طور چندین متغیر وجود دارند که به همراه این دایرکتیو قابل استفاده هستند. این متغیرها عبارتند از:

‎%u‎این متغیر حاوی نام کاربری یا username کاربر است.
‎%d‎حاوی نام دامنه است.
‎%h‎این متغیر دایرکتوری خانگی کاربر را مشخص می‌کند.

برای دیدن لیست کاملی از متغیرهای موجود، فایل doc/wiki/Variables.txt را ببینید.

first_valid_uid
last_valid_uid
first_valid_gid
last_valid_gid

با استفاده از دایرکتیوهای بالا می‌توانید یک محدوده از UID ها و GID ها را مشخص کنید. تنها کاربرانی که در این محدوده هستند مجاز به login کردن هستند. به کمک این دایرکتیوها می‌توانید از login کردن کاربران سیستمی جلوگیری کنید. توجه داشته باشید که کاربر root تحت هیچ شرایطی نمی‌تواند login کند. حتی اگر first_valid_uid را برابر با ۰ تنظیم کنید.

برای کسب اطلاعات بیشتر می‌توانید به مستندات dovecot مراجعه کنید.

برنامه rouncube

roundcube یک رابط تحت وب است که کاربران به کمک آن می‌توانند ایمیل‌های خود را بخوانند، برای دیگران ایمیل ارسال کنند و … . roundcube در حقیقت یک برنامه MUA است. برای نصب roundcube می‌توانید به صورت زیر عمل کنید:

cd /usr/ports/mail/roundcube
mae install clean

در منوی باز شده می توانید برنامه roundcube را جهت کامپایل پیکربندی کنید. از آنجا که roundcube یک رابط تحت وب است شما احتیاج به یک web server دارید. در این راهنما ما از وب‌سرور آپاچی استفاده خواهیم کرد. (لطفاً نصب وب سرور آپاچی همراه با SSL را ببینید)

برای استفاده از roundcube باید تنظیمات اندکی در آپاچی انجام دهید. فایلی در مسیر /usr/local/etc/apache22/Include/roundcube.conf و با محتویات زیر ایجاد کنید:

Alias /roundcube "/usr/local/www/roundcube/"      
<Directory "/usr/local/www/roundcube"> 
  Options Indexes FollowSymLinks 
  AllowOverride All 
  Order allow,deny 
  Allow from all 
</Directory>

سپس Apache را restart کنید:

# service apache22 reload

به این ترتیب رابط roundcube در دسترس خواهد بود. همین طور برنامه roundcube به یک سرویس دهنده بانک اطلاعاتی هم احتیاج دارد که در این راهنما ما از MySQL استفاده می‌کنیم. برای نصب mysql کافی است به صورت زیر عمل کنید:

cd /usr/ports/databases/mysql55-server/
make install clean

بعد از نصب MySQL، باید یک بانک اطلاعاتی برای roundcube ایجاد کنیم. برای انجام این کار باید به MySQL متصل شده و بانک اطلاعاتی و همین طور یک کاربر برای استفاده از آن ایجاد کنیم:

# mysql

با اجرای دستور بالا شما وارد کنسول MySQL خواهید شد. در این کنسول می‌توانید دستورات زبان SQL را اجرا کنید. دستور زیر یک بانک اطلاعاتی به نام roundcube ایجاد خواهد کرد:

> CREATE DATABASE roundcube;

در مرحله بعد باید یک کاربر ایجاد کنیم تا به کمک آن بتوانیم به بانک اطلاعاتی دسترسی داشته باشیم. دستور زیر یک کاربر به نام roundcube و با کلمه عبور nicepass ایجاد خواهد کرد:

> CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'nicepass'

این کاربر برای دسترسی به بانک اطلاعاتی باید مجوزهای لازم را داشته باشد. دستور زیر تمام مجوزهای ممکن را به این کاربر اهدا خواهد کرد:

> GRANT ALL PRIVILEGES ON roundcube.* 'roundcube'@'localhost';

در نهایت برای خروج از کنسول دستور زیر را اجرا کنید:

> QUIT;

خب roundcube باید تغییرات مورد نظر خود را در این بانک اطلاعاتی ایجاد کند (مثلاً ساخت جدول‌ها و …) به کمک اسکریپتی که در مسیر/usr/local/www/roundcube/SQL قرار دارد می توانید این اعمال را انجام دهید. در این شاخه اسکریپت‌های متفاوتی برای بانک‌های متفاوت قرار دارد که چون ما از MySQL استفاده می‌کنیم، باید از اسکریپت mysql.initial.sql استفاده کنیم:

# cd /usr/local/www/roundcube/SQL
# mysql -u roundcube -p roundcube < mysql.initial.sql

سپس کلمه عبور کاربر roundcube را وارد کنید. خب حالا نوبت به پیکربندی roundcube می‌رسد. فایل‌های پیکربندی در مسیر /usr/local/www/roundcube/config/قرار دارند. دو فایل پیکربندی مختلف به نام‌های db.inc.php و main.inc.php وجود دارد. فایل db.inc.php حاوی تنظیمات بانک اطلاعاتی است و فایل main.inc.phpهم حاوی تنظیمات اصلی برنامه roundcube می‌باشد. یک نمونه از این فایل‌ها در همان شاخه وجود دارد که برای شروع می‌توانید از آنها استفاده کنید:

# cd /usr/local/www/roundcube/config/
# cp db.inc.php.dist db.inc.php
# cp main.inc.php.dist main.inc.php

فایل db.inc.php را با یک ویرایشگر متن باز کنید تا بانک اطلاعاتی را به roundcube معرفی کنیم. برای انجام این کار کافی است خط زیر را به این فایل اضافه کنید (اگر این خط وجود دارد، آن را به این صورت تغییر دهید)

$rcmail_config['db_dsnw'] = 'mysql://roundcube:nicepass@unix(/tmp/mysql.sock)/roundcube';

البته مقادیر username و password را مطابق نیاز خود تغییر دهید. حالا فایل main.inc.php را با استفاده از یک ویرایشگر متن باز کنید. در ادامه برخی از دایرکتیوهای این فایل را شرح خواهیم داد.

$rcmail_config['default_host'] = ‘mail.domain.tld‘;

این خط آدرس سرویس‌دهنده IMAP را مشخص می‌کند. Roundcube به این سرویس‌دهنده متصل شده و اطلاعات کاربران را دریافت/ارسال می‌کند.

$rcmail_config['default_port'] = 993;

پورتی که سرویس‌دهنده IMAP بر روی آن به درخواست ها گوش می‌دهد را مشخص می‌کند. پورت استاندارد ۱۴۳ است.

$rcmail_config['smtp_server'] = 'mail.domain.tld';

این خط آدرس سرویس‌دهنده SMTP را مشخص می‌کند. Roundcube برای ارسال نامه‌ها به این سرویس‌دهنده متصل خواهد شد.

$rcmail_config['enable_installer'] = true;

برای نصب roundcube باید مقدار این دایرکتیو برابر true تنظیم شود. بعد از عمل نصب حتماً مقدار این دایرکتیو را به false تغییر دهید.

$rcmail_config['skin_logo'] = null;

آدرس لوگوی سرویس‌دهنده را مشخص می‌کند. این لوگو در تمام صفحات دیده خواهد شد. آدرس لوگوی شرکت یا سازمان خود را وارد کنید.

$rcmail_config['useragent'] = 'Roundcube Webmail/'.RCMAIL_VERSION;

این دایرکتیو مقدار هدر User-Agent را مشخص می‌کند.

$rcmail_config['product_name'] = 'My company Webmail';

آدرس سازمان خود را در اینجا بنویسید.

$rcmail_config['language'] = fa_IR;

برنامه roundcube به زبان های مختلفی از جمله فارسی ترجمه شده است. می‌توانید زبان پیش فرض را با استفاده این دایرکتیو مشخص کنید.

$rcmail_config['htmleditor'] = 1;

این خط ویرایشگر WYSIWYG را فعال می‌کند. به کمک این ویرایشگر پیشرفته کاربران به راحتی می‌توانند ایمیل‌های خود را نوشته و ارسال کنند. مقدار پیش فرض این دایرکتیو ۰ است که باعث غیر فعال شدن این ویرایشگر می‌شود. برای فعال سازی آن کافی است مقدار این دایرکتیو را برابر ۱ تنظیم کنید.