BASE(1) User Contributed Perl Documentation BASE(1)

Swaks - چاقوی سوئیسی SMTP، ابزار همه‌منظوره برای آزمودن تراکنش‌های SMTP

هدف اصلی طراحی Swaks این است که ابزاری منعطف، اسکریپت‌پذیر و مبتنی بر تراکنش برای آزمودن SMTP باشد. این ابزار از قابلیت‌ها و افزونه‌های SMTP نظیر TLS، احراز هویت (authentication) و pipelining؛ نسخه‌های متعددی از پروتکل SMTP شامل SMTP، ESMTP و LMTP؛ و روش‌های انتقال چندگانه شامل سوکت‌های دامنه یونیکس (UNIX-domain sockets)، سوکت‌های دامنه اینترنت (internet-domain sockets) و لوله‌ها (pipes) به فرایندهای ایجادشده پشتیبانی می‌کند. گزینه‌ها را می‌توان در متغیرهای محیطی، فایل‌های پیکربندی و خط فرمان مشخص کرد که حداکثر قابلیت پیکربندی و سهولت استفاده را برای مدیران سیستم و اسکریپت‌نویسان فراهم می‌آورد.

تحویل یک ایمیل آزمایشی استاندارد به user@example.com روی درگاه ۲۵ از test-server.example.net:

swaks --to user@example.com --server test-server.example.net

تحویل یک ایمیل آزمایشی استاندارد با الزام به احراز هویت CRAM-MD5 در نقش کاربر me@example.com. یک سرایند "X-Test" به بدنه ایمیل اضافه خواهد شد. در صورتی که گذرواژه احراز هویت از فایل .netrc شما قابل دریافت نباشد، برای دریافت آن از شما درخواست خواهد شد:

swaks --to user@example.com --from me@example.com --auth CRAM-MD5 --auth-user me@example.com --header-X-Test "test email"

آزمودن یک اسکنر ضدویروس با استفاده از EICAR در یک پیوست. بخش DATA پیام نمایش داده نشود:

swaks -t user@example.com --attach - --server test-server.example.com --suppress-data </path/to/eicar.txt

آزمودن یک اسکنر هرزنامه با استفاده از GTUBE در بدنه ایمیل، که از طریق رکوردهای MX مربوط به example.com مسیریابی می‌شود:

swaks --to user@example.com --body @/path/to/gtube/file

تحویل یک ایمیل آزمایشی استاندارد به user@example.com با استفاده از پروتکل LMTP از طریق یک فایل سوکت دامنه یونیکس:

swaks --to user@example.com --socket /var/lda.sock --protocol LMTP

گزارش تمامی گیرندگان موجود در یک فایل متنی که روی یک سرور آزمایشی قابل تأیید نیستند:

for E in `cat /path/to/email/file`
do
    swaks --to $E --server test-server.example.com --quit-after RCPT --hide-all
    [ $? -ne 0 ] && echo $E
done

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

هدف (Target) یک تراکنش، آن چیزی است که Swaks به آن متصل می‌شود. این اصطلاح کلی در سرتاسر مستندات استفاده شده است زیرا اکثر اصطلاحات دیگر به اشتباه ماهیت خاصی از روش انتقال مورد استفاده را القا می‌کنند.
روش انتقال (Transport) روش زیرساختی مورد استفاده برای اتصال به هدف (target) است.
یک تراکنش (Transaction) عبارت است از باز کردن یک اتصال از طریق یک روش انتقال (transport) به یک هدف (target) و استفاده از یک پروتکل پیام‌رسانی به منظور تلاش برای تحویل پیام.
پروتکل (Protocol) زبان سطح کاربردی مورد استفاده برای ارتباط با هدف است. این سند از واژه SMTP برای اشاره به هر سه پروتکل پشتیبانی‌شده به صورت کلی استفاده می‌کند، مگر آنکه صراحتاً بیان شود که منظور صرفاً پروتکل خاص 'SMTP' است و موارد دیگر را شامل نمی‌شود.
پروتکل‌های SMTP برای انتقال پیام‌ها (Messages) وجود دارند؛ مجموعه‌ای از بایت‌ها در قالبی توافق‌شده که فرستنده و گیرنده دارند.
پاکت (Envelope) یک پیام حاوی فرستنده و گیرنده‌ی «واقعی» پیام است. همچنین می‌توان به اجزای آن به عنوان envelope-sender و envelope-recipients اشاره کرد. توجه به این نکته حائز اهمیت است که پاکت پیام لزوماً با سرایندهای "To:" و "From:" آن مطابقت ندارد.
بخش DATA در یک تراکنش SMTP همان پیام واقعی است که انتقال می‌یابد. این بخش شامل هر دوی سرایندها (headers) و بدنه (body) پیام می‌شود. گاهی اوقات DATA و بدنه به عنوان مترادف به کار می‌روند، اما در این سند همواره دو مفهوم کاملاً مجزا هستند.
سرایندهای (Headers) یک پیام به صورت تمام خطوط موجود در بخش DATA پیام قبل از اولین خط خالی تعریف می‌شوند. آن‌ها حاوی اطلاعاتی در مورد ایمیل هستند که به گیرنده نمایش داده خواهد شد، مانند "To:"، "From:"، "Subject:" و غیره. در این سند، سرایندها همواره با حرف اول بزرگ انگلیسی و یک دونقطه در انتها نوشته می‌شوند.
بدنه (Body) یک پیام، بخشی از قسمت DATA آن است که پس از اولین خط خالی قرار می‌گیرد.
یک گزینه (Option) پرچمی است که رفتار Swaks را تغییر می‌دهد. صرف‌نظر از شیوه ارائه آن، همیشه یک «گزینه» نامیده می‌شود. به عنوان مثال، "--no-data-fixup" یک گزینه است.
هنگامی که یک گزینه، داده‌های اضافی علاوه بر خود گزینه دریافت می‌کند، آن داده اضافی یک آرگومان (Argument) نامیده می‌شود. در "--quit-after <stop-point>'"، مقدار "<stop-point>" آرگومانِ گزینه "--quit-after" است.
<literal-string>
هنگامی که در تعریف یک گزینه به کار می‌رود، متنی که درون علامت‌های قلاب شکسته ("<>") قرار دارد نشان‌دهنده یک برچسب توصیفی برای مقداری است که کاربر باید ارائه دهد. برای نمونه، "--quit-after <stop-point>" نشان می‌دهد که "<stop-point>" باید با یک مقدار معتبر نقطه توقف (stop-point) جایگزین شود.
[<optional-value>]
هنگامی که در تعریف یک گزینه به کار می‌رود، متنی که درون قلاب‌ها ([]) قرار دارد نشان می‌دهد که مقدار اختیاری است و می‌توان آن را حذف کرد. برای نمونه، "--to [<recipient>]" نشان می‌دهد که گزینه "--to" می‌تواند با یا بدون یک "<recipient>" مشخص‌شده استفاده شود..SH "پردازش گزینه‌ها (OPTION PROCESSING)" برای جلوگیری از سردرگمی احتمالی در این مستند، یک پرچم در Swaks همواره با عنوان «گزینه» (option) نامیده می‌شود. اگر گزینه داده‌های بیشتری دریافت کند، آن داده‌های اضافی به عنوان یک «آرگومان» برای آن گزینه در نظر گرفته می‌شوند. برای نمونه، ممکن است "--from fred@example.com" در خط فرمان به Swaks داده شود، که در آن "--from" گزینه و "fred@example.com" آرگومان "--from" است.

گزینه‌ها و آرگومان‌ها تنها راه ارائه اطلاعات به Swaks هستند. اگر Swaks در حین پردازش گزینه‌ها داده‌ای پیدا کند که نه گزینه است و نه آرگومان یک گزینه، با خطا متوقف شده و خارج می‌شود. برای نمونه، اگر "--no-data-fixup 1"; در خط فرمان پیدا شود، این مورد منجر به خطا خواهد شد زیرا "--no-data-fixup" آرگومانی نمی‌پذیرد و بنابراین Swaks متوجه نخواهد شد با 1 چه کار کند.

گزینه‌ها را می‌توان به سه روش به Swaks ارسال کرد: می‌توان آن‌ها را در یک فایل پیکربندی، در متغیرهای محیطی، و در خط فرمان مشخص کرد. بسته به گزینه مربوطه و اینکه آیا آرگومانی به آن داده شده است یا خیر، Swaks ممکن است از کاربر درخواست کند آرگومان را وارد کند.

هنگامی که Swaks گزینه‌های خود را ارزیابی می‌کند، ابتدا به دنبال فایل پیکربندی می‌گردد (چه در یک مکان پیش‌فرض و چه مشخص‌شده با "--config"). سپس هر گزینه‌ای را در متغیرهای محیطی ارزیابی می‌کند. در نهایت، گزینه‌های خط فرمان را ارزیابی می‌نماید. در هر مرحله از پردازش، گزینه‌هایی که پیش‌تر تنظیم شده‌اند بازنویسی (override) خواهند شد. علاوه بر این، به هر گزینه‌ای می‌توان پیشوند "no-" را اضافه کرد تا Swaks فراموش کند که این متغیر قبلاً تنظیم شده است (چه در مرحله قبلی، چه زودتر در همان مرحله). این قابلیت ضروری است زیرا بسیاری از گزینه‌ها، حالت «تعریف‌شده بدون آرگومان» را متفاوت از «تعریف‌نشده» در نظر می‌گیرند.

به عنوان یک قاعده کلی، اگر یک گزینه چندین بار مشخص شود، آخرین باری که داده شده اعمال خواهد شد. این موضوع هم درون یک روش (اگر "--from user1@example.com --from user2@example.com" داده شود، مقدار "user2@example.com" استفاده خواهد شد) و هم بین روش‌های مختلف (اگر "from user1@example.com" در یک فایل پیکربندی داده شود و "--from user2@example.com" در خط فرمان وارد شود، مقدار "user2@example.com" استفاده خواهد شد) صدق می‌کند.

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

این سه کد مانعة‌الجمع هستند و مشخص می‌کنند که آیا گزینه آرگومان می‌گیرد یا خیر. توجه داشته باشید که این موضوع لزوماً مشخص نمی‌کند که آیا آرگومان باید مستقیماً ارائه شود، بلکه نشان می‌دهد که آیا در نهایت وجود آرگومان الزامی است یا خیر. برای نمونه، "--to" با برچسب Arg-Required مشخص شده است، اما ارائه "--to" در خط فرمان بدون آرگومان نیز مجاز است؛ زیرا در صورت عدم ارائه مستقیم، Swaks می‌تواند آرگومان لازم را از کاربر درخواست کند.
گزینه‌ای با برچسب From-Prompt، در صورتی که آرگومانی ارائه نشده باشد، به صورت تعاملی آن را از کاربر درخواست می‌کند.
گزینه‌ای با برچسب From-File، در شرایط خاصی آرگومان‌ها را به عنوان فایل مدیریت می‌کند.

اگر آرگومان اولیه "-" باشد، آرگومان نهایی محتویات "STDIN" خواهد بود. چندین گزینه همگی می‌توانند "STDIN" را مشخص کنند، اما محتوای یکسانی برای هر یک از آن‌ها استفاده خواهد شد.

اگر آرگومان اولیه با پیشوند "@" مشخص شود، به عنوان مسیر یک فایل با آن برخورد خواهد شد. فایل باز شده و محتویات آن به عنوان آرگومان نهایی استفاده می‌شود. اگر محتویات فایل قابل خواندن نباشد، Swaks خارج خواهد شد. برای مشخص کردن یک مقدار رشته‌ای صریح که با "@" شروع می‌شود، از دو نماد "@" استفاده کنید؛ اولین نماد حذف خواهد شد. امکان مشخص کردن فایلی بدون مسیر مشخص که با علامت "@" شروع می‌شود وجود ندارد (مانند "--attach @file.txt" یا "--attach @@file.txt")، اما اگر مسیری به فایل اضافه کنید که دو نماد "@" را جدا کند، کار خواهد کرد (برای نمونه "--attach @./@file.txt" محتوای فایل @file.txt را شامل خواهد شد).

اگر گزینه‌ای با علامت Sensitive بخواهد آرگومانی را از کاربر درخواست کند و گزینه "--protect-prompt" تنظیم شده باشد، Swaks تلاش می‌کند ورودی کاربر را پنهان کند تا روی ترمینال نمایش داده نشود (اکو نشود). Swaks از چندین روش برای پنهان‌سازی ورودی تلاش می‌کند، اما اگر هیچ‌یک از آن‌ها کار نکند، روند اجرای برنامه با ورودی بدون پوشش ادامه خواهد یافت.
گزینه‌ای با برچسب Deprecated رسماً منسوخ شده است و در نسخه‌های آینده حذف خواهد شد. برای جزئیات بیشتر درباره موارد منسوخ، بخش «DEPRECATIONS» این مستند را ببینید.

سازوکار دقیق و قالب استفاده از هر یک از این انواع در زیر فهرست شده است.

فایل‌های پیکربندی (CONFIGURATION FILES)
می‌توان از یک فایل پیکربندی برای تنظیم گزینه‌های پرکاربرد یا بیش‌ازحد طولانی استفاده کرد. به‌طور پیش‌فرض، Swaks به ترتیب به دنبال $SWAKS_HOME/.swaksrc، $HOME/.swaksrc، و $LOGDIR/.swaksrc می‌گردد. اگر یکی از آن‌ها وجود داشته باشد (و از "--config" استفاده نشده باشد)، آن فایل به عنوان فایل پیکربندی استفاده می‌شود.

علاوه بر این، یک فایل پیکربندی در مکانی غیرپیش‌فرض را می‌توان با استفاده از "--config" مشخص کرد. اگر این گزینه تنظیم شود و آرگومانی به آن داده نشود، Swaks از هیچ فایل پیکربندی، از جمله هیچ فایل پیش‌فرضی، استفاده نخواهد کرد. اگر "--config" به یک فایل خواندنی اشاره کند، به عنوان فایل پیکربندی استفاده می‌شود و هر پیش‌فرضی را که وجود داشته باشد لغو می‌کند. اگر به یک فایل غیرقابل‌خواندن اشاره کند، خطایی نشان داده شده و Swaks خارج خواهد شد.

مجموعه‌ای از پیش‌فرض‌های «قابل حمل» (portable) را نیز می‌توان با افزودن گزینه‌ها به انتهای فایل برنامه Swaks ایجاد کرد. در نسخه توزیع‌شده، خط آخر Swaks باید "__END__" باشد. هر خطی که پس از "__END__" اضافه شود، به عنوان محتوای یک فایل پیکربندی در نظر گرفته خواهد شد. این امر امکان می‌دهد مجموعه‌ای از ترجیحات کاربر به طور خودکار در قالب یک فایل واحد از سروری به سرور دیگر کپی شود.

اگر فایل‌های پیکربندی به صراحت غیرفعال نشده باشند، پیکربندی "__END__" همیشه خوانده می‌شود. در هر بار اجرای Swaks، تنها یک فایل پیکربندی دیگر استفاده خواهد شد، حتی اگر چندین فایل پیکربندی مشخص شده باشد. اگر قرار باشد پیکربندی "__END__" و پیکربندی دیگری خوانده شوند، ابتدا پیکربندی "__END__" پردازش خواهد شد. مشخص کردن گزینه "--config" بدون آرگومان، پردازش هر دو پیکربندی "__END__" و هر فایل پیکربندی واقعی را غیرفعال می‌کند.

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

تفاوت ظریفی میان ارائه گزینه بدون آرگومان و ارائه گزینه با آرگومان خالی وجود دارد. اگر یک خط گزینه فاصله‌ای نداشته باشد، کل خط به عنوان گزینه در نظر گرفته می‌شود و آرگومانی وجود ندارد. اگر خط با یک فاصله تکی پایان یابد، به عنوان گزینه‌ای با آرگومان خالی پردازش می‌شود. بنابراین، "apt" مانند "--apt" در نظر گرفته خواهد شد، اما "apt " مانند "--apt ''" پردازش می‌شود.

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

# always use this sender, no matter server or logged in user
--from fred@example.com
# I prefer my test emails have a pretty from header.  Note
# the lack of dashes on option and lack of quotes around
# entire argument.
h-From: "Fred Example" <fred@example.com>

گزینه‌های ویژه فایل پیکربندی:

این گزینه مسیری را به یک فایل پیکربندی خاص برای استفاده مشخص می‌کند. اگر بدون آرگومان مشخص شود، هیچ فایل پیکربندی که به‌طور خودکار پیدا شده باشد (از طریق $HOME، و غیره، یا "__END__") پردازش نخواهد شد. اگر آرگومان فایلی معتبر باشد، آن فایل به عنوان فایل پیکربندی استفاده می‌شود (پس از پیکربندی "__END__"). اگر آرگومان فایلی معتبر و خواندنی نباشد، Swaks خطا داده و خارج می‌شود. این گزینه را می‌توان چندین بار مشخص کرد، اما تنها اولین باری که مشخص شده است (در ترتیب جستجوی متغیرهای محیطی و خط فرمان) استفاده خواهد شد. (Arg-Optional)
متغیرهای محیطی پیکربندی (CONFIGURATION ENVIRONMENT VARIABLES)
گزینه‌ها را می‌توان از طریق متغیرهای محیطی نیز ارسال کرد. این متغیرها به صورت $SWAKS_OPT_name هستند، که در آن "name" نام گزینه‌ای است که در خط فرمان مشخص می‌شود. از آنجا که در اکثر شل‌های شبه‌یونیکس خط فاصله در نام متغیرهای محیطی مجاز نیست، نباید از خط فاصله‌های ابتدایی استفاده کرد و هر خط فاصله‌ای درون نام گزینه باید با زیرخط (underscore) جایگزین شود. دستورات زیر همان گزینه‌های نشان‌داده‌شده در مثال فایل پیکربندی را ایجاد می‌کنند:
$ SWAKS_OPT_from='fred@example.com'
$ SWAKS_OPT_h_From='"Fred Example" <fred@example.com>'

تنظیم یک متغیر روی مقداری خالی، معادل مشخص کردن آن در خط فرمان بدون آرگومان است. برای نمونه، تنظیم <SWAKS_OPT_server=""> باعث می‌شود Swaks در هر بار اجرا، سرور مقصد برای اتصال را از کاربر درخواست کند. در ویندوز، تنظیم متغیرهای محیطی خالی امکان‌پذیر نیست؛ این رفتار را می‌توان با تنظیم متغیر محیطی روی "<>" شبیه‌سازی کرد. علاوه بر این، گنجاندن نام سرآیند در گزینه header از طریق متغیر محیطی در ویندوز مجاز نیست (برای نمونه، "SWAKS_OPT_header_Foo=bar" منجر به خطا خواهد شد، اما "SWAKS_OPT_header="Foo: bar"" کار خواهد کرد).

از آنجا که ترتیب ذاتی در گزینه‌های ارائه‌شده از طریق متغیرهای محیطی وجود ندارد، این گزینه‌ها قبل از پردازش مرتب‌سازی می‌شوند. این روش شاید عالی نباشد، اما دست‌کم رفتاری را تعیین می‌کند که در غیر این صورت نامشخص می‌ماند. به عنوان مثال، اگر هر دو متغیر $SWAKS_OPT_from و $SWAKS_OPT_f تنظیم شده باشند، مقدار $SWAKS_OPT_from استفاده خواهد شد، زیرا پس از $SWAKS_OPT_f مرتب می‌شود. همچنین به دلیل عدم وجود ترتیب ذاتی در پردازش محیط، غیرفعال کردن گزینه‌ها با پیشوند "no-" قابل‌اعتماد نیست. این کار در صورتی عمل می‌کند که گزینه مورد نظر برای خاموش شدن، قبل از "no-" مرتب شود، اما اگر بعد از آن مرتب شود ناموفق خواهد بود. از آنجا که هدف اصلی "no-" کارکرد بین انواع روش‌های پیکربندی است (برای نمونه، لغو گزینه‌ای از خط فرمان که در فایل پیکربندی تنظیم شده بود)، بعید است این موضوع مشکلی ایجاد کند.

علاوه بر تنظیم معادل گزینه‌های خط فرمان، می‌توان $SWAKS_HOME را روی دایرکتوری حاوی فایل پیش‌فرض .swaksrc برای استفاده تنظیم کرد.

گزینه‌های خط فرمان (COMMAND LINE OPTIONS)
آخرین روش ارائه گزینه‌ها به Swaks از طریق خط فرمان است. رفتار گزینه‌ها با اکثر برنامه‌های خط فرمان شبه‌یونیکس سازگار است. بسیاری از گزینه‌ها دارای هر دو شکل کوتاه و بلند هستند (برای نمونه "-s" و "--server"). طبق قرارداد، گزینه‌های کوتاه با یک خط تیره و گزینه‌های بلند با دو خط تیره مشخص می‌شوند. این تنها یک قرارداد است و هر پیشوندی با هر دو نوع کار می‌کند.

دستور زیر مثال نشان‌داده‌شده در بخش‌های فایل پیکربندی و متغیر محیطی را نشان می‌دهد:

$ swaks --from fred@example.com --h-From: '"Fred Example" <fred@example.com>'

برنامه Swaks می‌تواند از طریق پایپ‌های یونیکس («پایپ‌ها»)، سوکت‌های دامنه یونیکس («سوکت‌های یونیکس»)، یا سوکت‌های دامنه اینترنت («سوکت‌های شبکه») به یک هدف متصل شود. اتصال از طریق سوکت‌های شبکه رفتار پیش‌فرض است. با توجه به ماهیت منفرد بودن روش انتقال مورداستفاده، هر مجموعه از گزینه‌های بخش زیر مانعة‌الجمع هستند. مشخص کردن بیش از یکی از گزینه‌های "--server"، "--pipe" یا "--socket" منجر به خطا خواهد شد. ترکیب سایر گزینه‌ها میان انواع روش‌های انتقال، صرفاً منجر به نادیده گرفته شدن گزینه‌های نامربوط می‌شود. در ادامه شرح مختصری از هر روش انتقال و گزینه‌های ویژه آن روش ارائه شده است.

سوکت‌های شبکه (NETWORK SOCKETS)
این روش انتقال تلاش می‌کند تا پیامی را از طریق TCP/IP، که روش استاندارد برای تحویل SMTP است، ارسال کند. این روش انتقال پیش‌فرض برای Swaks است. اگر هیچ‌یک از گزینه‌های "--server"، "--pipe" یا "--socket" داده نشوند، از این انتقال استفاده می‌شود و سرور هدف از روی دامنه گیرنده تعیین می‌گردد (برای جزئیات بیشتر به "--server" در زیر مراجعه کنید).

این روش انتقال نیازمند ماژول IO::Socket::IP برای هر دو سوکت‌های IPv4 و IPv6 است. اگر این ماژول قابل بارگذاری نباشد، Swaks تلاش خواهد کرد از کتابخانه IO::Socket برای IPv4 و IO::Socket::INET6 برای پشتیبانی از IPv6 استفاده کند. تلاش برای استفاده از این روش انتقال در حالی که هیچ‌یک از این کتابخانه‌ها در دسترس نباشند، منجر به خطا و پایان اجرای برنامه خواهد شد.

استفاده جایگزین از IO::Socket و IO::Socket::INET6 منسوخ شده است و در نسخه‌های آینده حذف خواهد شد. بخش DEPRECATIONS در زیر را ببینید.

به‌طور صریح به Swaks می‌گوید که از سوکت‌های شبکه استفاده کند و نام میزبان یا نشانی IP مقصد برای اتصال را مشخص نماید، یا اگر آرگومانی ارائه نشود، آن را از کاربر درخواست کند. اگر این گزینه داده نشود و هیچ گزینه انتقال دیگری نیز مشخص نشده باشد، سرور ایمیل مقصد از روی رکوردهای DNS مناسب برای دامنه نشانی ایمیل گیرنده با استفاده از ماژول Net::DNS تعیین می‌شود. اگر Net::DNS در دسترس نباشد، Swaks تلاش می‌کند برای تحویل به localhost متصل شود. پورت هدف را نیز می‌توان به صورت اختیاری در اینجا تنظیم کرد. قالب‌های پشتیبانی‌شده برای این منظور شامل SERVER:PORT (پشتیبانی از نام‌ها و نشانی‌های IPv4)؛ [SERVER]:PORT و SERVER/PORT (پشتیبانی از نام‌ها، نشانی‌های IPv4 و IPv6) هستند. پورتی که از طریق این گزینه تنظیم شود فقط در صورتی استفاده می‌شود که گزینه "--port" استفاده نشده باشد. همچنین "--copy-routing" را ببینید. (Arg-Required, From-Prompt)
مشخص می‌کند که از کدام پورت TCP در مقصد باید استفاده شود، یا اگر آرگومانی ذکر نشده باشد آن را درخواست می‌کند. آرگومان می‌تواند نام یک سرویس (مطابق دریافت‌شده توسط getservbyname(3)) یا یک شماره پورت باشد. پورت پیش‌فرض smtp/25 است، مگر اینکه تحت تأثیر گزینه‌های "--protocol" یا "--tls-on-connect" تغییر کند. (Arg-Required, From-Prompt)
استفاده از آرگومان به عنوان رابط محلی برای اتصال خروجی SMTP، یا درخواست از کاربر در صورت ارائه نشدن آرگومان. آرگومان می‌تواند یک نشانی IP یا یک نام میزبان باشد. اقدام پیش‌فرض این است که اجازه داده شود سیستم‌عامل رابط محلی را انتخاب کند. برای توضیحات تکمیلی درباره قالب :<port> به "--server" مراجعه کنید. پورتی که از طریق این گزینه تنظیم شود تنها در صورتی استفاده خواهد شد که از گزینه "--port" استفاده نشده باشد. (Arg-Required, From-Prompt)
مشخص کردن پورت خروجی که تراکنش از آن آغاز می‌شود. آرگومان می‌تواند نام یک سرویس (همان‌طور که توسط getservbyname(3) دریافت می‌شود) یا یک شماره پورت باشد. اگر این گزینه مشخص نشود، سیستم یک پورت موقت (ephemeral) انتخاب خواهد کرد. توجه داشته باشید که کاربران عادی نمی‌توانند برخی پورت‌ها را تعیین کنند. (Arg-Required, From-Prompt)
آرگومان به عنوان بخش دامنه یک نشانی ایمیل تفسیر می‌شود و برای یافتن سرور مقصد با همان منطقی به کار می‌رود که برای جستجوی سرور مقصد نشانی ایمیل گیرنده استفاده می‌شود. برای جزئیات بیشتر درباره نحوه تعیین هدف از روی دامنه ایمیل، گزینه "--to" را ببینید. (Arg-Required)
-4, -6
اجبار به استفاده از IPv4 یا IPv6. (Arg-None)
سوکت‌های یونیکس (UNIX SOCKETS)
این روش انتقال تلاش می‌کند پیام‌ها را از طریق یک فایل سوکت دامنه یونیکس (UNIX-domain socket) تحویل دهد. این قابلیت برای آزمایش MTA/MDAهایی که به فایل‌های سوکت گوش می‌دهند مفید است (برای نمونه، آزمایش تحویل LMTP به Cyrus). این روش انتقال نیازمند ماژول IO::Socket::UNIX است که بخشی از توزیع استاندارد Perl است. اگر این ماژول قابل بارگذاری نباشد، تلاش برای استفاده از این روش انتقال منجر به خطا و پایان اجرای برنامه خواهد شد.
این گزینه یک فایل سوکت دامنه یونیکس را به عنوان آرگومان خود دریافت می‌کند. اگر Swaks نتواند این سوکت را باز کند، پیامی مبنی بر خطا نمایش داده و خارج خواهد شد. (Arg-Required, From-Prompt)
پایپ‌ها (PIPES)
این روش انتقال تلاش می‌کند تا پردازشی را ایجاد (spawn) کرده و از طریق پایپ‌ها با آن ارتباط برقرار کند. برنامه اجراشده باید آماده باشد تا روی "STDIN"/"STDOUT" مانند یک سرور ایمیل رفتار کند. هر MTA که برای اجرا از inet/xinet طراحی شده باشد باید از این حالت پشتیبانی کند. علاوه بر این، برخی از MTAها حالت‌های آزمایشی ارائه می‌دهند که می‌توان از طریق "STDIN"/"STDOUT" با آن‌ها ارتباط برقرار کرد. این روش انتقال را می‌توان برای خودکارسازی این آزمایش‌ها استفاده کرد. برای مثال، اگر بررسی DNSBL را با Exim پیاده‌سازی کرده‌اید و می‌خواهید مطمئن شوید که کار می‌کند، می‌توانید "swaks --pipe "exim -bh 127.0.0.2""; را اجرا کنید. در حالت ایده‌آل، پردازشی که با آن تعامل دارید باید روی "STDIN" و "STDOUT" دقیقاً مانند یک سرور SMTP عمل کند. هرگونه داده اشکال‌زدایی (debug) باید به "STDERR" فرستاده شود، که به ترمینال شما هدایت خواهد شد. در عمل، Swaks معمولاً می‌تواند مقداری داده اشکال‌زدایی را روی "STDOUT" پردازش فرزند مدیریت کند، اما هیچ تضمینی درباره مقدار قابل تحمل آن وجود ندارد.

این روش انتقال نیازمند ماژول IPC::Open2 است که بخشی از توزیع استاندارد Perl است. اگر این ماژول قابل بارگذاری نباشد، تلاش برای استفاده از این روش انتقال منجر به خطا و خاتمه برنامه خواهد شد.

یک نام پردازش و آرگومان‌های آن پردازش را ارائه می‌دهد. Swaks تلاش خواهد کرد تا پردازش را اجرا کرده و از طریق پایپ‌ها با آن ارتباط برقرار کند. اگر آرگومان یک فایل اجرایی نباشد، Swaks خطایی نمایش داده و خارج خواهد شد. (Arg-Required, From-Prompt)
این گزینه‌ها به لایهٔ پروتکل مربوط می‌شوند.
همگی این گزینه‌ها به Swaks می‌گویند که از آرگومان(ها) به‌عنوان گیرندهٔ پاکت (envelope-recipient) برای رایانامه استفاده کند. تفاوت‌های ظریفی میان این سه گزینه وجود دارد که جزئیات آن‌ها در ادامه آمده است. اگر گزینه‌ای بدون آرگومان مشخص شود، Swaks از کاربر برای وارد کردن آرگومان درخواست می‌کند.

"--to" از این نظر ویژه است که تنها گزینهٔ الزامی در Swaks است. هیچ مقدار پیش‌فرضی برای این گزینه وجود ندارد. اگر گیرنده‌ای به هیچ طریقی مشخص نشده باشد، از کاربر به‌صورت تعاملی خواسته می‌شود تا مقداری وارد کند. تنها استثنا زمانی است که یک مقدار برای "--quit-after" تعیین شده باشد که سبب می‌شود تراکنش SMTP پیش از نیاز به گیرنده پایان یابد. اگر چندین گیرنده مشخص شده باشند و برای تعیین مسیر به دامنهٔ گیرنده نیاز باشد، دامنهٔ آخرین گیرنده در فهرست آرگومان‌های "--to" استفاده می‌شود.

تمایز اصلی میان این گزینه‌ها در نحوهٔ برخورد با آرگومان‌های آن‌ها هنگام تولید بخش DATA رایانامه است. هر یک از آن‌ها نشانهٔ جایگزین مخصوص به خود را دارند (به‌ترتیب "%TO_ADDRESS%"، "%CC_ADDRESS%" و "%BCC_ADDRESS%") که هر کس می‌تواند هنگام ساخت یک DATA سفارشی از آن‌ها استفاده کند. در پیام پیش‌فرض Swaks، از "%TO_ADDRESS%" برای سربرگ To: استفاده می‌شود و در صورت پر بودن، از "%CC_HEADER%" برای سربرگ Cc: استفاده خواهد شد. "%BCC_ADDRESS%" در DATA پیش‌فرض استفاده نمی‌شود. (Arg-Required, From-Prompt)

از آرگومان به‌عنوان فرستندهٔ پاکت (envelope-sender) برای رایانامه استفاده می‌کند، یا در صورت مشخص نشدن آرگومان از کاربر درخواست ورودی می‌کند. رشتهٔ "<>" می‌تواند به معنای فرستندهٔ تهی (null sender) داده شود. اگر کاربر نشانی فرستنده‌ای را مشخص نکند، از یک مقدار پیش‌فرض استفاده می‌شود. بخش دامنه (domain-part) فرستندهٔ پیش‌فرض، بهترین حدس از نام دامنهٔ کاملاً مشخص‌شدهٔ (FQDN) میزبان محلی است. روش تعیین بخش محلی (local-part) متغیر است. اگر متغیر محیطی $LOGNAME تنظیم شده باشد، به‌عنوان بخش محلی استفاده خواهد شد. در غیر این صورت، در ویندوز از مقدار Win32::LoginName() و در پلتفرم‌های شبه‌یونیکس از getpwuid(3) استفاده می‌شود. همچنین "--force-getpwuid" را ببینید. اگر Swaks نتواند نام میزبان محلی را تشخیص دهد و نشانی فرستنده برای تراکنش لازم باشد، Swaks با خطا متوقف شده و خارج می‌شود. در این حالت، باید یک رشتهٔ معتبر از طریق این گزینه ارائه شود. (Arg-Required, From-Prompt)
رشته‌ای که به‌عنوان آرگومان برای دستور HELO/EHLO/LHLO استفاده می‌شود، یا در صورت مشخص نشدن آرگومان از کاربر درخواست ورودی می‌کند. اگر از این گزینه استفاده نشود، بهترین حدس از نام دامنهٔ کاملاً مشخص‌شدهٔ میزبان محلی استفاده خواهد شد. اگر Swaks نتواند نام میزبان محلی را تشخیص دهد و رشتهٔ helo برای تراکنش مورد نیاز باشد، Swaks با خطا خارج می‌شود. در این حالت، باید رشته‌ای معتبر از طریق این گزینه ارائه گردد. (Arg-Required, From-Prompt)
نقطه‌ای که تراکنش باید در آن متوقف شود. هنگامی که تراکنش به نقطهٔ توقف درخواستی برسد، و به شرطی که Swaks پیش از رسیدن به آن دچار خطا نشده باشد، دستور "QUIT" را ارسال کرده و تلاش می‌کند اتصال را به‌طور تمیز ببندد. آرگومان‌های معتبر و نکات مربوط به معنای آن‌ها به شرح زیر است. (Arg-Required)
پس از ارسال پاسخ از سوی سرور به یک درخواست PROXY خارج می‌شود. توجه داشته باشید که اگر خطایی در مذاکرهٔ پروکسی رخ ندهد، این گزینه با CONNECT مترادف خواهد بود.
پس از دریافت بنر خوش‌آمدگویی از مقصد، نشست را پایان می‌دهد.
در یک نشست STARTTLS (نه در حالت tls-on-connect)، تراکنش را پس از نخستین مورد از دو HELO خاتمه می‌دهد. در یک تراکنش غیر STARTTLS، همانند HELO رفتار می‌کند (پایین را ببینید).
پس از مذاکرهٔ XCLIENT خارج می‌شود. صرف‌نظر از اینکه تلاشی برای آن شده باشد یا خیر، این گزینه همیشه پس از نقطه‌ای که قرار بود XCLIENT مذاکره شود خارج می‌گردد.
پس از HELOای که با مذاکرهٔ XCLIENT برانگیخته می‌شود، خارج می‌شود. این مورد با HELO و FIRST-HELO تفاوت دارد زیرا مذاکرهٔ XCLIENT می‌تواند در چندین نقطه از تراکنش SMTP رخ دهد و امکان ارجاع دقیق به HELO متصل به XCLIENT با استفاده از نقاط توقف HELO یا FIRST-HELO وجود ندارد. این گزینه همیشه پس از نقطه‌ای که HELO برانگیخته از XCLIENT قرار بود رخ دهد خارج می‌شود، صرف‌نظر از اینکه تلاشی برای آن انجام شده باشد یا خیر.
بلافاصله پس از مذاکرهٔ TLS تراکنش را متوقف کرده و خارج می‌شود. توجه داشته باشید که بسته به استفاده از STARTTLS یا tls-on-connect، این اتفاق در مراحل متفاوتی رخ می‌دهد. صرف‌نظر از این که تلاشی برای آن انجام شده باشد یا خیر، همیشه پس از نقطه‌ای که TLS قرار بود مذاکره شود خارج می‌گردد.
در نشست STARTTLS یا XCLIENT، پس از دومین HELO خارج می‌شود. در غیر این صورت پس از نخستین و تنها HELO پایان می‌یابد.
پس از احراز هویت خارج می‌شود. صرف‌نظر از اینکه تلاشی انجام گرفته باشد یا خیر، همواره پس از نقطه‌ای که قرار بود احراز هویت مذاکره شود خارج می‌شود.
پس از ارسال MAIL FROM: خارج می‌شود.
پس از ارسال RCPT TO: خارج می‌شود.
این گزینه مشابه "--quit-after" است، اما به جای تلاش برای بستن تمیز نشست، صرفاً نشست را قطع می‌کند. این گزینه همان نقاط توقفِ "--quit-after" را می‌پذیرد و علاوه بر آن‌ها DATA و DOT را نیز قبول می‌کند که جزئیات آن‌ها در ادامه آمده است. (Arg-Required)
اتصال را پس از ارسال DATA توسط سرور قطع می‌کند.
اتصال را پس از ارسال «.» پایانی پیام توسط سرور قطع می‌کند.
این گزینه شبیه به "--drop-after" است، اما به جای قطع ارتباط پس از خواندن پاسخ برای نقطهٔ توقف، بلافاصله پس از ارسال نقطهٔ توقف، اتصال را قطع می‌کند. این گزینه همان نقاط توقف "--drop-after" را می‌پذیرد. اگر نقطهٔ توقف برای بخشی اختیاری از تراکنش باشد که عملاً ارسال نشده است (برای نمونه STARTTLS یا AUTH)، این گزینه دقیقاً مانند "--drop-after" عمل خواهد کرد. برای جزئیات به موارد زیر مراجعه کنید. (Arg-Required)
به سرور متصل می‌شود و سپس پیش از دریافت بنر سرور، ارتباط را قطع می‌کند.
کاملاً یکسان با "--drop-after" عمل می‌کند.
لزوماً مطابق انتظار عمل نمی‌کند. اگر به نظر می‌رسد پاسخ HELO را به نادرستی می‌خواند، به جای آن از FIRST-HELO استفاده کنید.
از آرگومان به‌عنوان زمان مهلت (تایم‌اوت) تراکنش SMTP استفاده می‌کند، یا در صورت مشخص نشدن آرگومان، از کاربر درخواست می‌کند. آرگومان می‌تواند یک عدد خالص باشد که به ثانیه تفسیر می‌شود، یا می‌تواند دارای پسوندهای s، m یا h باشد (5s = ۵ ثانیه، 3m = ۱۸۰ ثانیه، 1h = ۳۶۰۰ ثانیه). به‌عنوان یک حالت خاص، 0 به معنای نامحدود بودن زمان تراکنش است. مقدار پیش‌فرض 30s است. (Arg-Required, From-Prompt)
مشخص می‌کند کدام پروتکل در تراکنش به کار رود. گزینه‌های معتبر در جدول زیر نشان داده شده‌اند. در حال حاضر پروتکل‌های اصلی SMTP، ESMTP و LMTP هستند. با استفاده از گونه‌های این انواع پروتکل، می‌توان پورت‌های پیش‌فرض، تلاش برای احراز هویت و نوع اتصال TLS مد نظر را به شکل خلاصه مشخص کرد. پروتکل پیش‌فرض ESMTP است. جدول زیر آرگومان‌های موجود برای "--protocol" و گزینه‌هایی که هر کدام به‌طور جانبی تنظیم می‌کنند را نشان می‌دهد. (Arg-Required)
HELO, "-p 25";
EHLO->HELO, "-tlsc -p 465";
EHLO->HELO, "-a -tlsc -p 465";
HELO, "-tlsc -p 465";
EHLO->HELO, "-p 25";
EHLO->HELO, "-a -p 25";
EHLO->HELO, "-tls -p 25";
EHLO->HELO, "-a -tls -p 25";
LHLO, "-p 24";
LHLO, "-a -p 24";
LHLO, "-tls -p 24";
LHLO, "-a -tls -p 24";
اگر سرور راه دور پشتیبانی کند، برای SMTP PIPELINING (RFC 2920) تلاش می‌کند. (Arg-None)
اگر سرور پشتیبانی کند، برای Per-Recipient Data Response (PRDR) (https://tools.ietf.org/html/draft-hall-prdr-00.txt) تلاش می‌کند. پروتکل PRDR هنوز استاندارد نشده است، اما MTAها شروع به پیاده‌سازی این پیشنهاد کرده‌اند. (Arg-None)
به Swaks اعلام می‌کند که به جای آزمایش اولیهٔ $LOGNAME، از روش پیش‌فرض سیستم برای تعیین نام کاربریِ کاربر جاری جهت بخش محلی پیش‌فرض فرستنده استفاده کند. با وجود نام گزینه که مختص شبه‌یونیکس به نظر می‌رسد، این گزینه در ویندوز نیز کار می‌کند. (Arg-None).SH "TLS / رمزنگاری (TLS / ENCRYPTION)" این‌ها گزینه‌های مربوط به رمزنگاری تراکنش هستند. این گزینه‌ها آزمایش شده‌اند و کارکرد آن‌ها با هر سه روش انتقال تأیید شده است. هنگامی که رمزنگاری درخواست شود، از ماژول Net::SSLeay برای انجام آن استفاده می‌شود. اگر این ماژول قابل بارگذاری نباشد، Swaks بسته به اینکه درخواست اختیاری بوده یا خیر، درخواست TLS را نادیده می‌گیرد یا با خطا متوقف می‌شود. قابلیت STARTTLS به‌عنوان یک افزونه در پروتکل ESMTP تعریف شده است و اگر "--protocol" روی یکی از انواع SMTP ساده تنظیم شده باشد، در دسترس نخواهد بود. از آنجا که این قابلیت در خود پروتکل تعریف نشده است، در صورت پشتیبانی مقصد، "--tls-on-connect" برای هر نوع پروتکلی در دسترس است.

برای مذاکره یک اتصال TLS، نیازی به گواهی محلی نیست. با این حال، برخی از سرورها از بررسی گواهی کلاینت استفاده می‌کنند تا تأیید کنند کلاینت اجازه اتصال دارد. می‌توان با استفاده از گزینه‌های "--tls-cert" و "--tls-key" به Swaks گفت که از یک گواهی محلی مشخص استفاده کند، و اختیاری است که با گزینه "--tls-chain" از یک زنجیره گواهی استفاده نماید.

اتصال را ملزم به استفاده از STARTTLS می‌کند. اگر TLS به هر دلیلی در دسترس نباشد (اعلام نشده باشد، مذاکره با شکست مواجه شود و غیره) برنامه خارج می‌شود. (بدون آرگومان)
در صورت در دسترس بودن، برای استفاده از STARTTLS تلاش می‌کند؛ اگر مذاکره TLS به هر دلیلی ناموفق باشد، تراکنش عادی ادامه می‌یابد. توجه داشته باشید که این گزینه با پیاده‌سازی فعلی تقریباً بی‌استفاده است، زیرا پس از شکست در مذاکره، وضعیت اتصال نامشخص خواهد بود. در برخی موارد، مانند عدم تطابق نسخه، اتصال باید به‌صورت متن ساده باقی بماند. در موارد دیگر، مانند شکست در اعتبارسنجی، سمت سرور ممکن است تصور کند باید به تبادل از طریق TLS ادامه دهد، در حالی که کلاینت فکر می‌کند ارتباط به‌صورت متن ساده است. شاید در آینده تلاشی برای افزودن تشخیص دقیق‌تر وضعیت انجام شود، اما در حال حاضر فقط آگاه باشید که در صورت تلاش برای مذاکره TLS و شکست آن، با این گزینه ممکن است رفتارهای غیرمنتظره‌ای رخ دهد. (بدون آرگومان)
در صورت در دسترس بودن، برای استفاده از STARTTLS تلاش می‌کند. اگر TLS با موفقیت مذاکره شود یا STARTTLS اعلام نشده باشد، تراکنش ادامه می‌یابد. اگر STARTTLS اعلام شده باشد اما مذاکرات TLS شکست بخورد، این وضعیت به‌عنوان یک خطا تلقی شده و تراکنش متوقف می‌شود. با توجه به هشداری که در بالا ذکر شد، این گزینه بسیار منطقی‌تر از "--tls-optional" است. (بدون آرگومان)
بلافاصله پس از برقراری اتصال، یک ارتباط TLS را آغاز می‌کند. طبق عرف معمول، در صورت تعیین این گزینه، پورت پیش‌فرض از ۲۵ به ۴۶۵ تغییر می‌یابد، هرچند که همچنان می‌توان آن را با گزینه --port لغو کرد. (بدون آرگومان)
پروتکل‌هایی را که باید هنگام مذاکره TLS استفاده شوند (یا نشوند) مشخص می‌کند. در زمان نگارش این متن، پروتکل‌های موجود عبارتند از sslv2، sslv3، tlsv1، tlsv1_1، tlsv1_2 و tlsv1_3. در دسترس بودن این پروتکل‌ها به کتابخانه OpenSSL زیربنایی شما بستگی دارد، بنابراین ممکن است همه آن‌ها در دسترس نباشند. فهرست پروتکل‌های در دسترس در خروجی "--dump" نمایش داده می‌شود (به شرطی که TLS اصلاً در دسترس باشد).

رشته مشخص‌کننده، فهرستی از پروتکل‌ها است که با کاما از هم جدا شده‌اند و می‌توان از آن‌ها استفاده کرد یا نکرد. برای نمونه، 'tlsv1,tlsv1_1' تنها در صورتی موفق خواهد شد که یکی از این دو پروتکل هم در کلاینت و هم در سرور موجود باشد. در مقابل، 'no_sslv2,no_sslv3' تلاش می‌کند هر پروتکلی به جز sslv2 و sslv3 را مذاکره کند. این دو قالب تعیین پروتکل را نمی‌توان با یکدیگر ترکیب کرد. (آرگومان الزامی)

--tls-cipher <cipher-string>
آرگومان این گزینه به کتابخانه OpenSSL زیربنایی ارسال می‌شود تا فهرست رمزهای (ciphers) قابل قبول برای استفاده در اتصال تنظیم شود. ساختار این رشته برای Swaks مات و غیرمستقیم است و در https://www.openssl.org/docs/manmaster/man1/openssl-ciphers.html#CIPHER-LIST-FORMAT تعریف شده است. یک مثال کوتاه می‌تواند "--tls-cipher '3DES:+RSA'" باشد. (آرگومان الزامی)
--tls-verify
به Swaks دستور می‌دهد تا برای اعتبارسنجی گواهی سرور تلاش کند. این گزینه معادل با تعیین هم‌زمان هر دو گزینه "--tls-verify-ca" و "--tls-verify-host" است. برای توضیحات دقیق درباره چگونگی تنظیم دقیق هر نوع اعتبارسنجی، آن گزینه‌ها را ببینید.

به‌طور پیش‌فرض، اعتبارسنجی TLS الزامی نیست. اگر اعتبارسنجی TLS توسط "--tls-verify"، "--tls-verify-ca" یا "--tls-verify-host" الزامی شده باشد و نوع اعتبارسنجی درخواست‌شده با شکست مواجه شود، مذاکره TLS موفق نخواهد بود. (بدون آرگومان)

--tls-verify-ca
الزام می‌کند که گواهی سرور توسط یک مرجع صدور گواهی (CA) شناخته‌شده امضا شده باشد و منقضی نشده باشد. به‌طور پیش‌فرض فهرست CAهای شناخته‌شده همان چیزی خواهد بود که از طریق کلاینتی که Swaks روی آن اجرا می‌شود در دسترس است. برای ارائه یک CA سفارشی، "--tls-ca-path" را ببینید. (بدون آرگومان)
--tls-verify-host
الزام می‌کند که مقصد اتصال فعلی در نام جایگزین موضوع (SAN) یا نام عمومی موضوع (CN) در گواهی سرور ذکر شده باشد.

مقصدی که Swaks برای اعتبارسنجی استفاده می‌کند متغیر خواهد بود. این مقصد می‌تواند یک نام میزبان باشد، که یا مستقیماً از طریق گزینه "--server" مشخص شده یا از طریق رکوردهای MX جستجو شده است. در این حالت، اعتبارسنجی طبق انتظار عمل می‌کند. اگر مقصد یک IP باشد، IP در گواهی جستجو می‌شود، که امکان‌پذیر است اما غیرمعمول است. اگر روش انتقال "--pipe" یا "--socket" باشد، مقصد معناداری برای اعتبارسنجی در گواهی وجود نخواهد داشت و اعتبارسنجی شکست خواهد خورد. در این شرایط بهتر است فقط از "--tls-verify-ca" استفاده شود یا مقصدی که برای اعتبارسنجی استفاده می‌شود با گزینه "--tls-verify-target" لغو شود. (بدون آرگومان)

--tls-verify-target <verification-string>
در صورت تنظیم، آرگومان این گزینه به‌عنوان میزبانی که باید برای "--tls-verify-host" اعتبارسنجی شود استفاده خواهد شد. این کار هنگام استفاده از "--tls-verify-host" با روش‌های انتقال "--pipe" یا "--socket" ضروری است، چرا که این روش‌ها به‌طور پیش‌فرض مقصد قابل اعتبارسنجی ندارند. همچنین می‌تواند برای بازنویسی جستجوی پیش‌فرض مقصد هنگام استفاده از روش انتقال "--server" به کار رود. برای نمونه، می‌توان از آن استفاده کرد تا بررسی شود آیا گواهی سروری که صریحاً از طریق IP به آن متصل شده‌اید، شامل نام مشخصی هست یا خیر. (آرگومان الزامی)
--tls-ca-path <ca-location>
مکان متفاوتی را برای اطلاعات CA جهت اعتبارسنجی گواهی‌های سرور مشخص می‌کند. آرگومان می‌تواند به یک فایل یا پوشه اشاره کند. رفتار پیش‌فرض استفاده از اطلاعات پیش‌فرض کتابخانه OpenSSL زیربنایی است. (آرگومان الزامی)
--tls-cert <cert-file>
مسیری را به فایلی حاوی گواهی محلی مشخص می‌کند که در صورت مذاکره TLS، باید توسط Swaks استفاده شود. اگر نیاز به ارائه زنجیره گواهی باشد، می‌تواند از طریق این فایل یا از طریق یک فایل مجزا با "--tls-chain" ارائه شود. آرگومان مسیر فایل الزامی است. طبق پیاده‌سازی فعلی، گواهی موجود در فایل باید در قالب PEM باشد. اگر نیاز مبرمی به ASN1 دارید با نویسنده تماس بگیرید. اگر این گزینه تنظیم شده باشد، "--tls-key" نیز الزامی است. (آرگومان الزامی)
--tls-key <key-file>
مسیری را به فایلی حاوی کلید خصوصی محلی مشخص می‌کند که در صورت مذاکره TLS، باید توسط Swaks استفاده شود. آرگومان مسیر فایل الزامی است. طبق پیاده‌سازی فعلی، گواهی موجود در فایل باید در قالب PEM باشد. اگر نیاز مبرمی به ASN1 دارید با نویسنده تماس بگیرید. اگر این گزینه تنظیم شده باشد، "--tls-cert" نیز الزامی است. (آرگومان الزامی)
--tls-chain <chain-file>
مسیری را به فایلی حاوی زنجیره گواهی محلی مشخص می‌کند که در صورت مذاکره TLS، باید توسط Swaks استفاده شود. آرگومان مسیر فایل الزامی است. طبق پیاده‌سازی فعلی، گواهی موجود در فایل باید در قالب PEM باشد. اگر نیاز مبرمی به ASN1 دارید با نویسنده تماس بگیرید. اگر این گزینه تنظیم شده باشد، "--tls-cert" و "--tls-key" نیز الزامی هستند. (آرگومان الزامی)
--tls-get-peer-cert [<output-file>]
یک کپی از گواهی طرف مقابل در TLS دریافت می‌کند. اگر هیچ آرگومانی داده نشود، در "STDOUT" نمایش داده خواهد شد. اگر آرگومانی داده شود، به‌عنوان یک مسیر در سیستم‌فایل در نظر گرفته می‌شود که محل ذخیره گواهی را مشخص می‌کند. سپس گواهی ذخیره‌شده را می‌توان با ابزارهای استانداردی مانند دستور openssl بررسی کرد. اگر فایلی مشخص شود، محتویات آن بازنویسی خواهد شد. این گزینه همواره تنها یک گواهی را برمی‌گرداند. برای دریافت تمام گواهی‌های ارسال‌شده توسط سرور، "--tls-get-peer-chain" را ببینید. (آرگومان اختیاری)
--tls-get-peer-chain [<output-file>]
یک کپی از زنجیره گواهی TLS ارسال‌شده توسط سرور دریافت می‌کند. اگر هیچ آرگومانی داده نشود، در "STDOUT" نمایش داده خواهد شد. اگر آرگومانی داده شود، به‌عنوان یک مسیر در سیستم‌فایل در نظر گرفته می‌شود که محل ذخیره گواهی را مشخص می‌کند. سپس زنجیره ذخیره‌شده را می‌توان با ابزارهای استانداردی مانند دستور openssl بررسی کرد. اگر فایلی مشخص شود، محتویات آن بازنویسی خواهد شد. همچنین "--tls-get-peer-cert" را ببینید. (آرگومان اختیاری)
--tls-sni <sni-string>
فیلد Server Name Indication (SNI) را برای ارسال در هنگام برقراری اتصال TLS مشخص می‌کند. (آرگومان الزامی)

اگر به Swaks دستور داده شود، تلاش خواهد کرد تا در سرور ایمیل مقصد احراز هویت کند. این بخش به شرح انواع احراز هویت موجود، نیازمندی‌ها، گزینه‌ها و تعاملات آن‌ها و سایر نکات دقیق در استفاده از احراز هویت می‌پردازد. از آنجا که احراز هویت به‌عنوان یک افزونه در پروتکل ESMTP تعریف شده است، اگر "--protocol" روی یکی از انواع SMTP تنظیم شده باشد، در دسترس نخواهد بود.

تمامی روش‌های احراز هویت نیازمند کدگذاری base64 هستند. اگر ماژول پرل MIME::Base64 قابل بارگذاری باشد، Swaks تلاش می‌کند از آن برای انجام این کدگذاری‌ها استفاده کند. اگر MIME::Base64 در دسترس نباشد، Swaks از توابع داخلی base64 خود استفاده خواهد کرد. این توابع کندتر از توابع MIME::Base64 هستند و کمتر بازبینی شده‌اند، هرچند به‌طور کامل آزمایش شده‌اند. استفاده از ماژول MIME::Base64 توصیه می‌شود.

اگر احراز هویت الزامی باشد (گزینه‌های زیر را برای زمان‌هایی که الزامی است یا نیست ببینید) و نیازمندی‌های نوع احراز هویتِ موجود برآورده نشود، Swaks یک خطا نمایش داده و خارج می‌شود. این وضعیت می‌تواند به دو شکل رخ دهد: اجبار Swaks به استفاده از یک نوع احراز هویت خاص که Swaks به دلیل فقدان نیازمندی‌ها قادر به استفاده از آن نیست، یا اجازه دادن به Swaks برای استفاده از هر نوع احراز هویت، اما سرور تنها انواعی را اعلام می‌کند که Swaks قادر به پشتیبانی از آن‌ها نیست. در حالت اول، Swaks در زمان پردازش گزینه‌ها با خطا متوقف می‌شود، زیرا از ابتدا می‌داند که قادر به احراز هویت نخواهد بود. در حالت دوم، Swaks در مرحله احراز هویت در تراکنش SMTP با خطا مواجه می‌شود، زیرا Swaks تا آن لحظه متوجه نخواهد شد که امکان احراز هویت وجود ندارد.

در ادامه انواع احراز هویت پشتیبانی‌شده به همراه نکات و نیازمندی‌های هر یک آورده شده است.

گزینه‌های زیر بر نحوه استفاده Swaks از احراز هویت تأثیر می‌گذارند. این گزینه‌ها همگی به یکدیگر وابسته‌اند. برای نمونه، تعیین "--auth-user" متضمن "--auth" و "--auth-password" است. تعیین "--auth-optional" متضمن "--auth-user" و "--auth-password" است، و غیره.

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

فهرست زیر انواع معتبر احراز هویت را مشخص می‌کند:

این انواع پایه‌ای احراز هویت به‌طور کامل پشتیبانی و آزمایش شده‌اند و هیچ نیازمندی اضافی ندارند.
احراز هویت‌کننده CRAM-MD5 به ماژول Digest::MD5 نیاز دارد. این روش کاملاً آزمایش شده و انتظار می‌رود با هر سروری که آن را پیاده‌سازی کرده است کار کند.
احراز هویت‌کننده DIGEST-MD5 (استاندارد RFC2831) به ماژول Authen::SASL نیاز دارد. نسخه 20100211.0 و نسخه‌های پیشین از Authen::DigestMD5 استفاده می‌کردند که خطاهایی در سطح پروتکل داشت و مانع کارکرد آن با برخی سرورها می‌شد. مدیریت DIGEST-MD5 در Authen::SASL بسیار پایدارتر است.

پیاده‌سازی DIGEST-MD5 در Swaks نسبتاً ناپخته است. به‌عنوان مثال در حال حاضر تنها از نوع qop مقدار "auth" پشتیبانی می‌کند. اگر در زمینه DIGEST-MD5 تجربه دارید و مایلید به Swaks در پشتیبانی بهتر از DIGEST-MD5 کمک کنید، لطفاً با نویسنده تماس بگیرید.

مقدار "realm" پروتکل DIGEST-MD5 را می‌توان با استفاده از کلیدواژه "realm" در "--auth-extra" تنظیم کرد. اگر هیچ realm تعیین نشود، یک مقدار پیش‌فرض معقول استفاده خواهد شد.

مقادیر "digest-uri" پروتکل DIGEST-MD5 را می‌توان با استفاده از گزینه "--auth-extra" تنظیم کرد. برای نمونه، می‌توانید مقدار digest-uri-value با عنوان "lmtp/mail.example.com/example.com" را با گزینه "--auth-extra dmd5-serv-type=lmtp,dmd5-host=mail.example.com,dmd5-serv-name=example.com" ایجاد کنید. رشته "digest-uri-value" و اجزای آن در RFC2831 تعریف شده‌اند. اگر هیچ‌یک از این مقادیر داده نشوند، مقادیر پیش‌فرض معقول به کار خواهند رفت.

احراز هویت‌کننده CRAM-SHA1 به ماژول Digest::SHA نیاز دارد. این نوع تنها در برابر یک پیاده‌سازی غیر استاندارد در یک سرور Exim آزمایش شده است و بنابراین ممکن است دارای برخی کاستی‌ها در پیاده‌سازی باشد.
این احراز هویت‌کننده‌ها به ماژول Authen::NTLM نیاز دارند. این نوع در برابر Exim، Communigate و Exchange 2007 آزمایش شده است.

علاوه بر نام کاربری و گذرواژه استاندارد، این نوع احراز هویت می‌تواند یک "domain" را نیز تشخیص دهد. دامنه را می‌توان با استفاده از کلیدواژه "domain" در "--auth-extra" تنظیم کرد. توجه داشته باشید که این ویژگی هرگز با یک سرور ایمیل که DOMAIN را نادیده نگیرد آزمایش نشده است، بنابراین ممکن است به‌صورت نادرست پیاده‌سازی شده باشد.

رفتار این گزینه دقیقاً مشابه "--auth" است، با این تفاوت که به جای الزامی کردن احراز هویت، آن را درخواست می‌کند. اگر نوع احراز هویت مشترکی یافت نشود یا هیچ اعتبارسنجی‌ای موفق نباشد، Swaks به گونه‌ای پیش می‌رود که گویی احراز هویت درخواست نشده است. (آرگومان اختیاری)
این گزینه حد وسطی بین "--auth" و "--auth-optional" است. اگر احراز هویت هرگز آغاز نشود (سرور احراز هویت را اعلام نکند یا هیچ نوع احراز هویت مشترکی یافت نشود)، مانند "--auth-optional" عمل کرده و تراکنش smtp ادامه می‌یابد. اگر احراز هویت آغاز شود اما شکست بخورد، مانند "--auth" رفتار کرده و با خطا خارج می‌شود. (آرگومان اختیاری)
نام کاربری مورد استفاده برای احراز هویت را تعیین می‌کند. اگر هیچ نام کاربری ارائه نشود، مشخص می‌کند که Swaks باید تلاش کند نام کاربری را از طریق .netrc بیابد (نیازمند ماژول Net::Netrc است). اگر نام کاربری داده نشود و در .netrc نیز یافت نشود، از کاربر خواسته می‌شود تا آن را وارد کند. رشته "<>" می‌تواند به معنای نام کاربری خالی وارد شود. (آرگومان الزامی، دریافت از اعلان)
گذرواژه مورد استفاده برای احراز هویت را تعیین می‌کند. اگر گذرواژه‌ای ارائه نشود، مشخص می‌کند که Swaks باید تلاش کند گذرواژه را از طریق .netrc بیابد (نیازمند ماژول Net::Netrc است). اگر گذرواژه داده نشود و در .netrc نیز یافت نشود، از کاربر خواسته می‌شود تا آن را وارد کند. رشته "<>" می‌تواند به معنای گذرواژه خالی وارد شود. (آرگومان الزامی، دریافت از اعلان، حساس)
برخی از انواع احراز هویت اجازه می‌دهند اطلاعات اضافی در فرایند احراز هویت گنجانده شود. به جای افزودن یک گزینه جدید برای هر بخش از هر احراز هویت‌کننده، گزینه "--auth-extra" امکان ارائه این اطلاعات را فراهم می‌کند. ساختار <key-value-pair> به‌صورت KEYWORD=VALUE است. (آرگومان الزامی)

فهرست زیر کلیدواژه‌های شناخته‌شده فعلی و احراز هویت‌کننده‌هایی که از آن‌ها استفاده می‌کنند را نشان می‌دهد:

کلیدواژه‌های realm و domain مترادف هستند. استفاده از هر یک، گزینه "domain" را در NTLM/MSN/SPA و گزینه "realm" را در DIGEST-MD5 تنظیم می‌کند.
کلیدواژه dmd5-serv-type توسط احراز هویت‌کننده DIGEST-MD5 استفاده می‌شود و تا حدی برای ساخت رشته digest-uri-value به کار می‌رود (RFC2831 را ببینید).
کلیدواژه dmd5-host توسط احراز هویت‌کننده DIGEST-MD5 استفاده می‌شود و تا حدی برای ساخت رشته digest-uri-value به کار می‌رود (RFC2831 را ببینید).
کلیدواژه dmd5-serv-name توسط احراز هویت‌کننده DIGEST-MD5 استفاده می‌شود و تا حدی برای ساخت رشته digest-uri-value به کار می‌رود (RFC2831 را ببینید).
روشی را برای نگاشت نام‌های جایگزین بر روی انواع اصلی احراز هویت فراهم می‌کند. برای پایگاه‌هایی که از نام‌های جایگزین برای انواع متداول استفاده می‌کنند کاربرد دارد. ساختار <key-value-pair> به‌صورت AUTH-ALIAS=AUTH-TYPE است. این قابلیت در واقع در درون برنامه برای نگاشت انواع SPA و MSN به نوع پایه NTLM استفاده می‌شود. آرگومان خط فرمان برای شبیه‌سازی این رفتار "--auth-map SPA=NTLM,MSN=NTLM" خواهد بود. تمام انواع احراز هویت فهرست‌شده در بالا به جز SPA و MSN مقصدهای معتبری برای نگاشت هستند. (آرگومان الزامی)
به جای نمایش رشته‌های AUTH به‌صورت کدگذاری‌شده با base64 در هنگام ارسال، آن‌ها را پیش از چاپ بر روی صفحه به متن آشکار ترجمه می‌کند. (بدون آرگومان)
اگر این گزینه مشخص شود، هر زمان که قرار باشد یک گذرواژه خوانا در ترمینال چاپ شود (به‌ویژه AUTH PLAIN و AUTH LOGIN)، گذرواژه با رشته 'PROVIDED_BUT_REMOVED' (یا محتوای <replacement-string> در صورت ارائه) جایگزین می‌شود. بسته به گزینه "--auth-plaintext"، رشته جایگزین ممکن است با base64 کدگذاری شود یا نشود.

توجه داشته باشید که "--auth-hide-password" مشابه گزینه "--protect-prompt" است، اما دقیقاً یکسان نیست. گزینه اول بدون در نظر گرفتن نحوه ورود گذرواژه‌ها، از نمایش آن‌ها در تراکنش SMTP جلوگیری می‌کند. گزینه دوم، رشته‌های حساس را هنگام تایپ توسط کاربر در ترمینال، صرف نظر از نحوه استفاده از رشته، پنهان می‌کند. (آرگومان اختیاری).SH "گزینه‌های XCLIENT (XCLIENT OPTIONS)" دستور XCLIENT یک افزونهٔ SMTP است که توسط پروژهٔ Postfix معرفی شده است. XCLIENT به یک کلاینت (دارای مجوزهای لازم) اجازه می‌دهد تا به سرور بگوید از اطلاعات جایگزین، مانند آدرس IP یا نام میزبان (hostname)، برای آن کلاینت استفاده کند. این قابلیت مسیرهای بسیار ساده‌تری را برای آزمودن پیکربندی‌های کارساز ایمیل فراهم می‌کند. جزئیات کامل این پروتکل در http://www.postfix.org/XCLIENT_README.html موجود است.

دستور XCLIENT را می‌توان چندین بار در هر نشست SMTP با مشخصه‌های متفاوتی به سرور ارسال کرد. به عنوان مثال، HELO و PROTO ممکن است در یک فراخوانی ارسال شوند و NAME و ADDR در فراخوانی دوم ارسال گردند. از آنجا که این موضوع می‌تواند برای آزمایش مفید باشد، Swaks کنترل‌هایی را بر نحوهٔ گروه‌بندی مشخصه‌ها و ترتیب ارسال آن‌ها به سرور فراهم می‌آورد. گزینه‌های مختلف تلاش می‌کنند سادگی را برای کسانی که از Swaks به عنوان یک کلاینت استفاده می‌کنند، و پیچیدگی را برای کسانی که از Swaks برای سنجش نصب‌ها بهره می‌برند، فراهم کنند.

این گزینه‌ها مشخصه‌های XCLIENT را که باید به سرور هدف ارسال شوند، تعیین می‌کنند. اگر <string> ارائه نشود، Swaks اعلان داده و مقدار را از "STDIN" می‌خواند. برای مستندات رسمی در مورد معنای این مشخصه‌ها و مقادیر مجاز آن‌ها، از جمله مقادیر خاص «[UNAVAILABLE]» و «[TEMPUNAVAIL]»، به http://www.postfix.org/XCLIENT_README.html مراجعه کنید.

به عنوان یک مثال ساده، تنظیم "--xclient-name foo.example.com --xclient-addr 192.168.1.1"; سبب می‌شود Swaks دستور SMTP معادل "XCLIENT NAME=foo.example.com ADDR=192.168.1.1" را ارسال کند.

توجه داشته باشید که مشخصهٔ «REVERSE_NAME» ظاهراً در مستندات رسمی ذکر نشده است. یک بحث در فهرست پستی وجود دارد که آن را مستند کرده و در نشانی http://comments.gmane.org/gmane.mail.postfix.user/192623 قابل مشاهده است.

همهٔ این گزینه‌ها می‌توانند با یکدیگر ترکیب شوند، و همچنین می‌توان آن‌ها را با گزینهٔ "--xclient" ترکیب کرد (پایین‌تر را ببینید). به‌طور پیش‌فرض تمام مشخصه‌ها در یک فراخوانی XCLIENT ترکیب می‌شوند، اما "--xclient-delim" را نیز بررسی کنید. (Arg-Required, From-Prompt)

هنگامی که این گزینه مشخص می‌شود، نشان‌دهندهٔ یک تفکیک و شکست در مشخصه‌های ارسالی XCLIENT است. برای نمونه، تنظیم "--xclient-helo 'helo string' --xclient-delim --xclient-name foo.example.com --xclient-addr 192.168.1.1"; سبب می‌شود Swaks دو فراخوانی XCLIENT ارسال کند: "XCLIENT HELO=helo+20string" و "XCLIENT NAME=foo.example.com ADDR=192.168.1.1". این گزینه در جاهایی که معنایی ندارد (در ابتدا یا انتهای گزینه‌های XCLIENT، به تنهایی، پشت سر هم، و غیره) نادیده گرفته می‌شود. (Arg-None)
این گزینهٔ «فرم آزاد» (free form) برای XCLIENT است. هر مقداری که برای <string> ارائه شود عیناً به عنوان آرگومان به دستور SMTP بنام XCLIENT ارسال خواهد شد. به عنوان مثال، اگر از "--xclient 'NAME= ADDR=192.168.1.1 FOO=bar'" استفاده شود، Swaks دستور SMTP معادل "XCLIENT NAME= ADDR=192.168.1.1 FOO=bar" را ارسال می‌کند. اگر هیچ آرگومانی در خط فرمان داده نشود، Swaks اعلان داده و مقدار را از STDIN می‌خواند.

مزیت اصلی این گزینه نسبت به گزینه‌های اختصاصی‌ترِ بالا این است که در اینجا هیچ اعتبارسنجی نحوی برای XCLIENT صورت نمی‌گیرد. این ویژگی به شما اجازه می‌دهد تا برای آزمایش، دستورهای نامعتبر XCLIENT را به سرور هدف بفرستید. علاوه بر این، حداقل یک MTA (نرم‌افزار Momentum متعلق به Message Systems، که سابقاً ecelerity نام داشت) دستور XCLIENT را بدون اعلان مشخصه‌های پشتیبانی‌شده پیاده‌سازی می‌کند. گزینهٔ "--xclient" به شما اجازه می‌دهد هنگام ارتباط با این نوع MTA، از بررسی «مشخصه‌های پشتیبانی‌شده» صرف‌نظر کنید (اگرچه "--xclient-no-verify" را نیز ببینید).

گزینهٔ "--xclient" می‌تواند به‌صورت آزادانه با گزینه‌های "--xclient-*" که در بالا ذکر شدند ترکیب شود. آرگومان داده‌شده به "--xclient" در گروه دستوری اختصاصی خود ارسال خواهد شد. برای نمونه، اگر "--xclient-addr 192.168.0.1 --xclient-port 26 --xclient 'FOO=bar NAME=wind'" به Swaks داده شود، هر دو دستور "XCLIENT ADDR=192.168.0.1 PORT=26" و "XCLIENT FOO=bar NAME=wind" به سرور هدف ارسال خواهند شد. (Arg-Required, From-Prompt)

الزام اینکه یک مشخصهٔ XCLIENT حتماً باید توسط سرور اعلان شده باشد تا Swaks بتواند آن را در یک دستور XCLIENT ارسال کند، اعمال نشود. این گزینه برای پشتیبانی از سرورهایی است که مشخصه‌ها را اعلان نمی‌کنند اما همچنان از آن‌ها پشتیبانی می‌نمایند. (Arg-None)
اگر Swaks به گونه‌ای پیکربندی شده باشد که هم برای XCLIENT و هم STARTTLS اقدام کند، ابتدا STARTTLS را انجام می‌دهد. اگر این گزینه مشخص شود، ابتدا XCLIENT را امتحان خواهد کرد. (Arg-None)
در حالت عادی، تنظیم یکی از گزینه‌های "--xclient*" برای ادامهٔ کار نیازمند انجام موفقیت‌آمیز یک تراکنش XCLIENT است (یعنی XCLIENT باید اعلان شده باشد، تمام مشخصه‌های درخواستی کاربر باید اعلان شده باشند، و سرور باید درخواست XCLIENT از سوی Swaks را پذیرفته باشد). این گزینه‌ها این رفتار را تغییر می‌دهند. گزینهٔ "--xclient-optional" به Swaks می‌گوید بدون هیچ قید و شرطی از مرحلهٔ XCLIENT در تراکنش SMTP عبور کند، صرف‌نظر از اینکه موفقیت‌آمیز بوده است یا خیر. گزینهٔ "--xclient-optional-strict" مشابه است اما با جزئیات دقیق‌تری عمل می‌کند. این نسخهٔ سخت‌گیرانه چنانچه XCLIENT اعلان نشده باشد ادامه می‌دهد، اما اگر اجرای XCLIENT تلاش شود ولی به موفقیت نرسد، با شکست متوقف می‌شود. (Arg-None)

نرم‌افزار Swaks پروتکل Proxy را مطابق با تعریف ارائه‌شده در http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt پیاده‌سازی می‌کند. پروتکل Proxy امکان استفاده از یک متعادل‌کنندهٔ بار (load balancer) برنامه‌های کاربردی مانند HAProxy را در جلوی یک MTA فراهم می‌سازد، در حالی که به MTA اجازه می‌دهد همچنان به اطلاعات میزبان مبدأ دسترسی داشته باشد. پشتیبانی از Proxy در Swaks امکان آزمایش مستقیم یک MTA را که برای دریافت درخواست‌ها از یک پراکسی پیکربندی شده است، بدون نیاز به خود پراکسی در طول آزمایش، فراهم می‌کند.

نرم‌افزار Swaks هیچ تلاشی برای تضمین سازگاری درونی گزینه‌های Proxy مورد استفاده انجام نمی‌دهد. برای نمونه، انتظار می‌رود که "--proxy-family" (در نسخهٔ ۱) یکی از مقادیر «TCP4» یا «TCP6» باشد. هرچند به احتمال زیاد برای سرور مقصد نامفهوم خواهد بود، اما Swaks هیچ تلاشی نمی‌کند تا اطمینان حاصل کند که "--proxy-source" و "--proxy-dest" با "--proxy-family" یا با یکدیگر در یک خانوادهٔ پروتکل قرار دارند.

گزینهٔ "--proxy" با تمام گزینه‌های دیگر "--proxy-*" به جز "--proxy-version" ناسازگار و مانعة‌الجمع است.

هنگامی که "--proxy" استفاده نشود، تمام گزینه‌های "--proxy-family"، "--proxy-source"، "--proxy-source-port"، "--proxy-dest" و "--proxy-dest-port" الزامی هستند. علاوه بر این، هنگامی که "--proxy-version" برابر با ۲ باشد، گزینه‌های "--proxy-protocol" و "--proxy-command" اختیاری خواهند بود.

تعیین می‌کند که از نسخهٔ ۱ (خوانا برای انسان) یا نسخهٔ ۲ (باینری) پروتکل Proxy استفاده شود. نسخهٔ ۱ مقدار پیش‌فرض است. نسخهٔ ۲ تنها از طریق «بلوک آدرس» پیاده‌سازی شده و تقریباً هم‌سطح اطلاعات ارائه‌شده در نسخهٔ ۱ است. (Arg-Required, From-Prompt)
این گزینه رشتهٔ خام پروتکل پراکسی را که به سرور ارسال می‌شود فراهم می‌کند. پیشوند پروتکل (برای نسخهٔ ۱ عبارت «PROXY » و برای نسخهٔ ۲ سرآیند ۱۲ بایتی پروتکل) می‌تواند در آرگومان موجود باشد یا نباشد. این گزینه امکان ارسال رشته‌های ناقص یا نادرست (malformed) پروتکل Proxy را به سرور هدف جهت آزمایش فراهم می‌کند. این گزینه با تمام گزینه‌های دیگر "--proxy-*" که اطلاعات جزئی پراکسی را ارائه می‌دهند مانعة‌الجمع است.

از آنجا که نسخهٔ ۲ پروتکل Proxy یک پروتکل باینری است، راه‌های متعددی برای ارائهٔ آرگومان به این گزینه وجود دارد. اگر آرگومان با «base64:» شروع شود، این پیشوند حذف شده و بقیهٔ رشته پیش از استفاده به‌صورت base64 رمزگشایی می‌شود. اگر آرگومان با "@" شروع شود، به عنوان نام فایل تلقی شده و مقدار پراکسی از آن فایل خوانده می‌شود. هر مقدار دیگری به عنوان مقدار مستقیم (literal) برای رشتهٔ پراکسی در نظر گرفته خواهد شد. (Arg-Required, From-Prompt, From-File)

برای نسخهٔ ۱، هم خانوادهٔ آدرس و هم پروتکل انتقال را مشخص می‌کند. این پروتکل مقادیر TCP4 و TCP6 را تعریف می‌کند.

برای نسخهٔ ۲، تنها خانوادهٔ آدرس را مشخص می‌کند. این پروتکل مقادیر AF_UNSPEC، AF_INET، AF_INET6 و AF_UNIX را تعریف می‌کند. (Arg-Required, From-Prompt)

برای نسخهٔ ۲، پروتکل انتقال را مشخص می‌کند. پروتکل مقادیر UNSPEC، STREAM و DGRAM را تعریف می‌کند. مقدار پیش‌فرض STREAM است. این گزینه در نسخهٔ ۱ استفاده نمی‌شود. (Arg-Required, From-Prompt)
برای نسخهٔ ۲، پروتکل انتقال/دستور را مشخص می‌کند. این پروتکل مقادیر LOCAL و PROXY را تعریف کرده است. مقدار پیش‌فرض PROXY است. این گزینه در نسخهٔ ۱ استفاده نمی‌شود. (Arg-Required, From-Prompt)
آدرس مبدأ اتصال پراکسی‌شده را تعیین می‌کند. (Arg-Required, From-Prompt)
درگاه (پورت) مبدأ اتصال پراکسی‌شده را تعیین می‌کند. (Arg-Required, From-Prompt)
آدرس مقصد اتصال پراکسی‌شده را تعیین می‌کند. (Arg-Required, From-Prompt)
درگاه (پورت) مقصد اتصال پراکسی‌شده را تعیین می‌کند. (Arg-Required, From-Prompt)

این گزینه‌ها به محتوای بخش DATA در تراکنش SMTP مربوط می‌شوند. به‌طور پیش‌فرض یک پیام بسیار ساده ارسال می‌شود. اگر از گزینه‌های "--attach" یا "--attach-body" استفاده شود، Swaks تلاش می‌کند پیام را به یک پیام MIME ارتقا دهد.

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

اگر هیچ آرگومانی ارائه نشود، برای وارد کردن مقدار از کاربر اعلان خواسته می‌شود.

اگر آرگومان "-" ارائه شود، داده‌ها بدون اعلان از "STDIN" خوانده خواهند شد.

اگر آرگومان با "@" آغاز شود، به عنوان نام فایل تلقی خواهد شد. اگر می‌خواهید آرگومانی ارسال کنید که با "@" آغاز می‌شود اما نام فایل نیست، یک "@" اضافی پیشوند آن کنید. برای نمونه، "@file.txt" باعث پردازش فایل file.txt می‌شود. مقدار @@data از رشتهٔ «@data» استفاده خواهد کرد.

اگر آرگومان فاقد هرگونه نویسهٔ خط جدید واقعی (0x0a) یا نمایشی (0x5c, 0x6e یا %NEWLINE%) باشد، به عنوان نام فایل تلقی می‌شود. اگر فایل بازشدنی باشد، محتوای فایل به عنوان بخش داده (data) استفاده خواهد شد. اگر فایل باز نشود، Swaks با خطا خارج می‌شود. کل رفتار شرح‌داده‌شده در این پاراگراف منسوخ شده (deprecated) است و در نگارش‌های آینده حذف خواهد شد. به جای آن، از یک "@" در ابتدا استفاده کنید تا صراحتاً نشان دهد که آرگومان نام فایل است.

هر آرگومان دیگری به عنوان محتوای DATA استفاده خواهد شد.

مقدار می‌تواند در یک خط قرار گیرد، که در آن "\n" (کدهای اسکی 0x5c, 0x6e) نشان‌دهندهٔ محل شکست خطوط است. نقطه‌های ابتدای سطرها نقل‌قول (quote) خواهند شد. نقطهٔ پایانی الزامی نیست اما مجاز است. مقدار پیش‌فرض این گزینه عبارت است از: "Date: %DATE%\nTo: %TO_ADDRESS%\nFrom: %FROM_ADDRESS%\nSubject: test %DATE%\nMessage-Id: <%MESSAGEID%>\nX-Mailer: swaks v%SWAKS_VERSION% jetmore.org/john/code/swaks/\n%NEW_HEADERS%\n%BODY%\n".

یک تجزیهٔ توکن بسیار ابتدایی روی بخش DATA انجام می‌گیرد. جدول زیر توکن‌های شناخته‌شده و مقادیر جایگزین آن‌ها را نشان می‌دهد. (Arg-Required, From-Prompt, From-File)

%FROM_ADDRESS%, ..FROM_ADDRESS..
با فرستندهٔ پاکت نامه (envelope-sender) جایگزین می‌شود.
%TO_ADDRESS%, ..TO_ADDRESS..
با گیرنده(های) پاکت نامه تنظیم‌شده توسط گزینهٔ "--to" جایگزین می‌شود.
%CC_ADDRESS%, ..CC_ADDRESS..
با گیرنده(های) پاکت نامه تنظیم‌شده توسط گزینهٔ "--cc" جایگزین می‌شود.
%BCC_ADDRESS%, ..BCC_ADDRESS..
با گیرنده(های) پاکت نامه تنظیم‌شده توسط گزینهٔ "--bcc" جایگزین می‌شود.
%DATE%, ..DATE..
با زمان جاری در قالبی مناسب جهت گنجاندن در سرآیند Date: جایگزین می‌شود. توجه داشته باشید که این گزینه تلاش می‌کند از ماژول استاندارد POSIX برای محاسبات منطقهٔ زمانی استفاده کند. اگر این ماژول در دسترس نباشد یا محیط فعلی از توکن قالب‌بندی %z در strftime پشتیبانی نکند (مانند ویندوز)، رشتهٔ تاریخ بر حسب GMT خواهد بود.
%MESSAGEID%, ..MESSAGEID..
با یک رشتهٔ شناسهٔ پیام مناسب جهت استفاده در سرآیند Message-Id جایگزین می‌شود. مقدار این توکن در طول عمر فرایند ثابت خواهد ماند.
%SWAKS_VERSION%, ..SWAKS_VERSION..
با نگارش فرایند جاری Swaks جایگزین می‌شود.
%NEW_HEADERS%, ..NEW_HEADERS..
با محتوای گزینهٔ "--add-header" جایگزین می‌شود. اگر "--add-header" مشخص نشده باشد، این توکن صرفاً حذف می‌گردد.
%BODY%, ..BODY..
با مقدار تعیین‌شده توسط گزینهٔ "--body" جایگزین می‌شود. برای مقدار پیش‌فرض به "--body" مراجعه کنید.
%NEWLINE%, ..BODY..
با نویسه‌های بازگشت به اول خط و خط جدید (0x0d, 0x0a) جایگزین می‌شود. این توکن مشابه استفاده از "\n" (کدهای 0x5c, 0x6e) است، اما نگرانی‌های مربوط به گریز دادن (escaping) بک‌اسلش برای خط جدید را به همراه ندارد.
اگر از "--dump-as-body" استفاده شود و هیچ گزینهٔ دیگری برای تغییر بدنهٔ پیش‌فرض پیام به کار نرفته باشد، بدنه با خروجی مشابه آنچه توسط "--dump" ارائه می‌شود جایگزین خواهد شد. بند (stanza) اولیهٔ قابلیت‌های برنامه در "--dump" نمایش داده نمی‌شود و بخش «data» نیز گنجانده نمی‌شود. علاوه بر این، "--dump" همیشه شامل گذرواژه‌ها است؛ به‌طور پیش‌فرض "--dump-as-body" شامل گذرواژه‌ها نمی‌شود، هرچند می‌توان این رفتار را با "--dump-as-body-shows-password" تغییر داد. گزینهٔ "--dump-as-body" همان آرگومان‌های "--dump" را می‌پذیرد به جز اینکه آرگومان‌های SUPPORT و DATA پشتیبانی نمی‌شوند. (Arg-Optional)
باعث می‌شود "--dump-as-body" گذرواژه‌ها را به‌صورت متن آشکار (plaintext) بگنجاند. استفاده از این گزینه توصیه نمی‌شود. این گزینه متضمن "--dump-as-body" نیز هست. (Arg-None)
بدنهٔ ایمیل را مشخص می‌کند. مقدار پیش‌فرض «This is a test mailing» است. اگر هیچ آرگومانی به "--body" داده نشود، اعلانی برای ارائهٔ تعاملی آن نمایش داده می‌شود. اگر "-" ارائه شود، بدنه از ورودی استاندارد خوانده خواهد شد. آرگومان‌هایی که با "@" آغاز می‌شوند به عنوان نام فایل‌های حاوی داده‌های بدنه تلقی می‌گردند (برای جزئیات بیشتر به "--data" مراجعه کنید).

اگر پس از پردازش فوق، آرگومان نشان‌دهندهٔ فایلی بازشدنی باشد، محتوای آن فایل به عنوان بدنه استفاده خواهد شد. این رفتار منسوخ شده است و در نگارش‌های آینده حذف خواهد شد. به جای آن، از یک "@" در ابتدا استفاده کنید تا صراحتاً نشان دهد آرگومان نام فایل است.

اگر پیام به قالب MIME اجبار شود (به "--attach" مراجعه کنید)، دستور "--body 'body text'" معادل "--attach-type text/plain --attach-body 'body text'" خواهد بود. برای جزئیات مربوط به ایجاد یک بدنهٔ چندبخشی جایگزین (multipart/alternative)، گزینهٔ "--attach-body" را ببینید. (Arg-Required, From-Prompt, From-File)

هنگامی که یک یا چند گزینهٔ "--attach" ارائه شود، پیام به یک پیام MIME چندبخشی ترکیبی (multipart/mixed) تبدیل می‌گردد. آرگومان‌های "--attach" در رابطه با "STDIN"، محتویات فایل و غیره همانند "--body" پردازش می‌شوند. گزینهٔ "--attach" را می‌توان چندین بار برای ایجاد چندین پیوست ارائه کرد. به‌طور پیش‌فرض، هر پیوست به عنوان یک فایل application/octet-stream ضمیمه می‌شود. برای تغییر این رفتار به "--attach-type" مراجعه کنید.

اگر محتویات پیوست از طریق نام فایل ارائه شود، کدگذاری MIME شامل آن نام فایل خواهد بود. برای جزئیات بیشتر در مورد نام‌گذاری فایل‌ها به "--attach-name" مراجعه نمایید.

مشخص کردن "-" ("STDIN") به عنوان آرگومان برای چندین بار (یک‌بار برای "--body" و چند بار برای "--attach") مجاز است. در این حالت، همان محتوا هر بار که مشخص شده پیوست خواهد شد. این کار برای پیوست کردن یک محتوای یکسان با چندین نوع MIME مختلف مفید است. (Arg-Required, From-File)

این یک گونهٔ متفاوت از "--attach" است که به‌طور خاص برای بخش بدنهٔ ایمیل در نظر گرفته شده است. این گزینه رفتاری همسان با "--attach" دارد، چرا که همان آرگومان‌ها را می‌گیرد و ساخت پیام MIME را الزامی می‌کند. با این حال، تفاوت آن در این است که صرف‌نظر از ترتیب پردازش گزینه‌ها، آرگومان آن همواره اولین بخش MIME در پیام خواهد بود. علاوه بر این، گزینه‌های "--attach-body" روی هم انباشته می‌شوند تا امکان ایجاد بدنه‌های multipart/alternative را فراهم کنند. به عنوان مثال، عبارت "--attach-type text/plain --attach-body 'plain text body' --attach-type text/html --attach-body 'html body'" یک بدنهٔ پیام چندبخشی جایگزین ایجاد می‌کند. (Arg-Required, From-File)
به‌طور پیش‌فرض، محتوایی که با گزینهٔ "--attach" به‌صورت MIME به پیام اضافه می‌شود، به عنوان application/octet-stream کدگذاری می‌گردد (به جز بدنه، که به‌طور پیش‌فرض text/plain است). گزینهٔ "--attach-type" نوع MIME را برای تمام گزینه‌های "--attach" پس از خود تغییر می‌دهد. این گزینه می‌تواند چندین بار مشخص شود. نوع MIME جاری در فاصلهٔ بین پردازش بخش‌های بدنه و سایر بخش‌ها، مجدداً به application/octet-stream بازنشانی می‌شود. (Arg-Required)
این گزینه نام فایلی را تعیین می‌کند که در بخش MIME ایجادشده برای گزینهٔ "--attach" بعدی گنجانده خواهد شد. اگر هیچ آرگومانی برای این گزینه تعیین نشود، سبب خواهد شد که هیچ اطلاعاتی از نام فایل برای بخش MIME بعدی درج نگردد، حتی اگر Swaks بتواند آن را از نام فایل محلی به دست آورد. (Arg-Optional)
این گزینه امکان اضافه کردن سرآیندها را به DATA فراهم می‌کند. اگر "%NEW_HEADERS%" در DATA وجود داشته باشد، با آرگومان این گزینه جایگزین می‌شود. اگر "%NEW_HEADERS%" وجود نداشته باشد، آرگومان بین دو خط جدید متوالی ابتدایی در DATA درج می‌شود (یعنی در انتهای سرآیندهای موجود درج می‌گردد).

این گزینه را می‌توان چندین بار مشخص کرد، یا یک بار با چندین سرآیند که به وسیلهٔ رشتهٔ "\n" از یکدیگر تفکیک شده‌اند. بنابراین، عبارات "--add-header 'Foo: bar' --add-header 'Baz: foo'" و "--add-header 'Foo: bar\nBaz: foo'" در نهایت همان دو سرآیند را اضافه می‌کنند. (Arg-Required)

این گزینه‌ها روشی را برای تغییر سرآیندهایی که از قبل در DATA وجود دارند فراهم می‌کنند. گزینه‌های "--header 'Subject: foo'" و "--h-Subject foo"; معادل یکدیگرند. اگر سرآیند مربوطه از قبل در داده‌ها وجود نداشته باشد، این آرگومان رفتاری کاملاً مشابه با "--add-header" خواهد داشت. با این حال، اگر سرآیند از قبل موجود باشد، با مقدار جدید جایگزین می‌شود. نفی کردن نگارشی از این گزینه که نام سرآیند را در خود گزینه دارد (مانند "--no-header-Subject")، تمام گزینه‌های "--header" قبلاً پردازش‌شده را حذف خواهد کرد، نه فقط موارد مربوط به 'Subject'. گنجاندن نام سرآیند در گزینه از طریق متغیر محیطی در ویندوز پشتیبانی نمی‌شود و منجر به خطا خواهد شد. (Arg-Required)
این گزینه یک نام مستعار مستقیم برای "--data -" (خواندن DATA از "STDIN") است. این گزینه کاملاً نسبت به "--data" اولویت دوم دارد. هر بار ظاهر شدن گزینهٔ "--data" سبب نادیده گرفته شدن "-g" خواهد شد. این گزینه را نمی‌توان با پیشوند "no-" نفی کرد. این گزینه منسوخ شده و در نگارش‌های آیندهٔ Swaks حذف خواهد شد. (Arg-None, Deprecated)
این گزینه Swaks را مجبور می‌کند که هیچ‌گونه تغییر و دستکاری در بخش DATA ایمیل انجام ندهد. این تغییرات شامل جایگزینی توکن‌ها، حذف خطوط From_، اضافه کردن نقطهٔ انتهایی، گنجاندن "--body"/پیوست، و هرگونه افزودن سرآیند می‌شود. این گزینه تنها زمانی کاربرد دارد که همراه با "--data" استفاده شود، زیرا بخش داخلی و پیش‌فرض DATA از توکن‌ها بهره می‌برد. (Arg-None).IP "--no-strip-from, -nsf" 4 خط From_ را در صورت وجود، از بخش DATA حذف نمی‌کند. (بدون آرگومان)

Swaks به‌طور پیش‌فرض رونوشتی از تراکنش‌های خود را به فراخواننده ("STDOUT"/"STDERR") ارائه می‌دهد. هدف این رونوشت، ارائه تصویری تا حد امکان وفادار و دقیق از تراکنش است، اگرچه این خروجی را با افزودن پیشوندهای اطلاعاتی به خطوط و ارائه نسخه‌های متنی ساده از تراکنش‌های TLS تغییر می‌دهد.

«پیشوندهای اطلاعاتی» به عنوان نشانه‌های تراکنش (transaction hints) شناخته می‌شوند. این نشانه‌ها در ابتدا شامل مواردی هستند که خطوط خروجیِ خودِ Swaks (اعم از پیام‌های اطلاعاتی یا خطا) را مشخص می‌کنند، و مواردی که نمایانگر خطی از داده‌های ارسال‌شده یا دریافت‌شده‌ی واقعی در یک تراکنش هستند. این جدول نشانه‌ها و مفاهیم آن‌ها را نشان می‌دهد:

"==="
نمایانگر یک خط اطلاعاتی ایجادشده توسط Swaks است.
"***"
نمایانگر خطایی است که درون Swaks ایجاد شده است.
" ->"
نمایانگر خط مورد انتظار ارسال‌شده توسط Swaks به سرور هدف است.
" ~>"
نمایانگر خط مورد انتظار و رمزنگاری‌شده با TLS است که توسط Swaks به سرور هدف ارسال شده است.
"**>"
نمایانگر خط غیرمنتظره ارسال‌شده توسط Swaks به سرور هدف است.
"*~>"
نمایانگر خط غیرمنتظره و رمزنگاری‌شده با TLS است که توسط Swaks به سرور هدف ارسال شده است.
"  >"
نمایانگر تکه متن خامی است که توسط Swaks به سرور هدف ارسال شده است (گزینه "--show-raw-text" را ببینید). در این سطح، مفهومی به عنوان «مورد انتظار» یا «غیرمنتظره» وجود ندارد.
"<- "
نمایانگر خط مورد انتظار ارسال‌شده توسط سرور هدف به Swaks است.
"<~ "
نمایانگر خط مورد انتظار و رمزنگاری‌شده با TLS است که توسط سرور هدف به Swaks ارسال شده است.
"<**"
نمایانگر خط غیرمنتظره ارسال‌شده توسط سرور هدف به Swaks است.
"<~*"
نمایانگر خط غیرمنتظره و رمزنگاری‌شده با TLS است که توسط سرور هدف به Swaks ارسال شده است.
"<  "
نمایانگر تکه متن خامی است که توسط Swaks از یک سرور هدف دریافت شده است (گزینه "--show-raw-text" را ببینید). در این سطح، مفهومی به عنوان «مورد انتظار» یا «غیرمنتظره» وجود ندارد.

گزینه‌های زیر چگونگی و محتوای خروجیِ نمایش‌داده‌شده به فراخواننده را کنترل می‌کنند.

به جای چاپ تک‌تک خطوط، بخش DATA از تراکنش SMTP را خلاصه می‌کند. این گزینه هنگام استفاده از Swaks برای ارسال برخی ایمیل‌های آزمایشی بسیار مفید و تقریباً ضروری است. به عنوان مثال، اگر DATA خلاصه نشود، ایمیل‌های حاوی پیوست به سرعت ترمینال را اشباع می‌کنند. (بدون آرگومان)
مدت زمان سپری‌شده بین جفت‌های ارسال/دریافت را نمایش می‌دهد. این گزینه زمانی بیشترین کاربرد را دارد که ماژول Time::HiRes در دسترس باشد، که در این حالت زمان سپری‌شده بر حسب یک‌هزارم ثانیه نمایش داده می‌شود. اگر Time::HiRes در دسترس نباشد یا «i» به عنوان آرگومان داده شود، زمان سپری‌شده تنها با اعداد صحیح (ثانیه) نمایش داده خواهد شد. (آرگومان اختیاری)

نشانه تراکنش را برای تراکنش‌های اطلاعاتی نمایش نمی‌دهد. این ویژگی زمانی بیشترین کاربرد را دارد که نیاز به کپی کردن بخشی از خطوط اطلاعاتی باشد، به عنوان مثال خروجی گواهی از گزینه "--tls-get-peer-cert". (بدون آرگومان)

گزینه‌های "--no-info-hints"، "--no-send-hints" و "--no-receive-hints" به ترتیب نشانه‌های تراکنش را از خطوط اطلاعات، ارسال و دریافت حذف می‌کنند. این قابلیت معمولاً هنگام کپی کردن بخشی از تراکنش برای استفاده در جایی دیگر مفید است (به عنوان مثال، "--no-send-hints --hide-receive --hide-informational" روش مناسبی برای دریافت تنها دستورهای سمت کلاینت در یک تراکنش معین است، و "--no-info-hints --tls-get-peer-cert" برای کپی کردن گواهی طرف مقابل کاربرد دارد). گزینه "--no-hints" معادل با تعیین هم‌زمان "--no-info-hints --no-send-hints --no-receive-hints" است. (بدون آرگومان)
این گزینه یک تخلیه شانزده‌شانزدهی (hex dump) از داده‌های خام ارسال‌شده و دریافت‌شده توسط Swaks را چاپ می‌کند. هر hex dump محتوای یک عملیات خواندن یا نوشتن منفرد روی شبکه است. این مقدار باید با آنچه که قبلاً نمایش داده می‌شد یکسان باشد (به استثنای حذف نویسه‌های "\r"). این گزینه برای مشاهده جزئیات زمانی مفید است که سرورها مقادیر زیادی داده را در بسته‌های منفرد ارسال می‌کنند، یا خطوط مجزا را به چندین بسته تقسیم می‌نمایند. اگر واقعاً نیاز به بررسی عمیق در این زمینه دارید، استفاده از یک ابزار شنود بسته (packet sniffer) برای شما مناسب‌تر خواهد بود، اما این گزینه اولین گام خوب برای مشاهده مشکلات عجیب اتصال است. (بدون آرگومان)
این گزینه‌ها به کاربر اجازه می‌دهند خروجی را به جای "STDOUT"/"STDERR" به فایل‌ها هدایت کند. گزینه اول هر دو را به یک فایل یکسان می‌فرستد. آرگومان‌های &STDOUT و &STDERR به صورت ویژه پردازش شده و به دستگیره‌های فایل «عادی» اشاره می‌کنند؛ بنابراین "--output-file-stderr '&STDOUT'" خروجی "STDERR" را به "STDOUT" تغییر مسیر می‌دهد. این گزینه‌ها برای تمام خروجی‌ها به جز "--help" و "--version" اعمال می‌شوند. (آرگومان اجباری)
از بازتاب (echo) ورودی کاربر در اعلان‌هایی که احتمالاً حساس هستند جلوگیری می‌کند (در حال حاضر فقط گذرواژه احراز هویت). به‌طور دقیق‌تر، هر گزینه‌ای که با عنوان «حساس» (Sensitive) مشخص شده باشد و در نهایت برای دریافت یک آرگومان اعلان نمایش دهد، تمام تلاش خود را می‌کند تا از بازتاب آن آرگومان جلوگیری کند. همچنین گزینه "--auth-hide-password" را ببینید. (بدون آرگومان)
خطوط ارسال‌شده از سرور دوردست که توسط Swaks دریافت می‌شوند را نمایش نمی‌دهد. (بدون آرگومان)
خطوطی که توسط Swaks به سرور دوردست ارسال می‌شوند را نمایش نمی‌دهد. (بدون آرگومان)
خطوط اطلاعاتیِ غیرخطا را که از خودِ Swaks تولید می‌شوند نمایش نمی‌دهد. (بدون آرگومان)
هیچ محتوایی را در ترمینال نمایش نمی‌دهد. (بدون آرگومان)
باعث بی‌صدا شدن Swaks می‌شود. اگر هیچ آرگومانی داده نشود یا آرگومان «1» ارائه شود، هیچ خروجی چاپ نمی‌شود مگر اینکه خطایی رخ دهد که پس از آن تمام خروجی‌ها نمایش داده می‌شوند. اگر آرگومان «2» داده شود، تنها خطاها چاپ می‌شوند. اگر «3» داده شود، هیچ‌گاه هیچ خروجی نمایش داده نخواهد شد. گزینه "--silent" بر بیشتر خروجی‌ها تأثیر می‌گذارد اما نه همه آن‌ها؛ به عنوان مثال گزینه‌های "--help"، "--version"، "--dump" و "--dump-mail" تحت تأثیر قرار نمی‌گیرند. به دلایل تاریخی، -S از طریق متغیر محیطی در ویندوز قابل تنظیم نیست؛ به جای آن از SWAKS_OPT_silent استفاده کنید. (آرگومان اختیاری)
قابلیت‌ها را چاپ کرده و خارج می‌شود. برخی از ویژگی‌ها نیازمند ماژول‌های غیر استاندارد Perl هستند. این گزینه وجود این ماژول‌ها را بررسی کرده و نشان می‌دهد چه عملکردهایی در دسترس هستند و چه عملکردهایی در دسترس نیستند، و برای به‌دست آوردن عملکردهای مفقود باید چه ماژول‌هایی افزوده شوند. (بدون آرگومان)
باعث می‌شود Swaks تمام گزینه‌ها را برای تولید پیامی که قصد ارسال آن را داشت پردازش کند، سپس آن پیام را به جای ارسال، در "STDOUT" چاپ کند. این خروجی با بخش «data» از گزینه "--dump" یکسان است، با این تفاوت که نقطه انتهایی را ندارد. (بدون آرگومان)
این گزینه باعث می‌شود Swaks نتایج پردازش گزینه‌ها را درست پیش از ارسال ایمیل چاپ کند. هنگام استفاده از "--dump" هیچ ایمیلی ارسال نخواهد شد. توجه داشته باشید که "--dump" یک ابزار صرفاً خودعیب‌یابی است و هیچ تلاشی برای پوشاندن (mask) گذرواژه‌ها در خروجی "--dump" انجام نشده و نخواهد شد. اگر یک بخش به عنوان آرگومان به این گزینه داده شود، تنها همان بخش درخواستی نمایش داده می‌شود. آرگومان‌هایی که در حال حاضر پشتیبانی می‌شوند عبارتند از: SUPPORT، APP، OUTPUT، TRANSPORT، PROTOCOL، XCLIENT، PROXY، TLS، AUTH، DATA و ALL. اگر هیچ آرگومانی ارائه نشود، تمام بخش‌ها نمایش داده می‌شوند. (آرگومان اختیاری)
این اطلاعات راهنما را نمایش داده و خارج می‌شود. (بدون آرگومان)
اطلاعات نسخه را نمایش داده و خارج می‌شود. (بدون آرگومان).SH "موارد منسوخ (DEPRECATIONS)" قابلیت‌های زیر منسوخ شده‌اند و در نگارش‌های آینده Swaks حذف خواهند شد
استفاده از ماژول‌های IO::Socket و IO::Socket::INET6
زودتر از (۱ فوریه ۲۰۲۵) حذف نخواهد شد.

روش اصلی ارسال روی سوکت‌های IPv4 و IPv6 با استفاده از ماژول IO::Socket::IP پیاده‌سازی شده است. در حال حاضر، پشتیبانی قدیمی از ماژول‌های IO::Socket و IO::Socket::INET6 که پیش‌تر استفاده می‌شدند، همچنان حفظ شده است. لطفاً اطمینان حاصل کنید که ماژول IO::Socket::IP نصب شده است تا از کارکرد صحیح در آینده اطمینان یابید.

سیستم‌عامل‌ها (OPERATING SYSTEMS)
این برنامه در اصل برای استفاده در سیستم‌عامل‌های شبه‌یونیکس (UNIX-like) در نظر گرفته شده بود و باید روی هر نسخه معقولی از آن‌ها کار کند. این برنامه روی Solaris، Linux و Mac OS X توسعه یافته و آزمایش شده و در همه آن‌ها از نظر قابلیت‌ها کامل است.

مشخص شده است که این برنامه کارکردهای پایه‌ای را در Windows با استفاده از Strawberry Perl ارائه می‌دهد. در تمام مستندات، مگر در مواردی که خلاف آن ذکر شده باشد، «Windows» به اجرای Swaks از طریق CMD.exe اشاره دارد، نه WSL یا cygwin. این برنامه به‌طور کامل آزمایش نشده است، اما کارکرد قابلیت‌های پایه‌ای SMTP و انواع احراز هویت LOGIN، PLAIN و CRAM-MD5 تأیید شده است. وضعیت کارکرد قابلیت‌های TLS و انواع احراز هویت NTLM/SPA و DIGEST-MD5 نامشخص است. مشخص شده که برخی قابلیت‌ها در Windows محدود هستند، از جمله ناتوانی در گنجاندن نام سرایند در متغیرهای محیطی (بخش «CONFIGURATION ENVIRONMENT VARIABLES» و "--header" را ببینید)، ناتوانی در تولید رشته تاریخ با منطقه زمانی محلی (نشانگر "%DATE%" ذیل "--data" را ببینید)، ناتوانی در استفاده از گزینه "-S" به عنوان یک متغیر محیطی ("--silent" را ببینید)، و ناتوانی در داشتن مقدار «تنظیم‌شده اما خالی» در یک متغیر محیطی (برای راهکار موقت بخش «CONFIGURATION ENVIRONMENT VARIABLES» را ببینید).

از آن‌جا که این برنامه باید در هر جایی که Perl اجرا می‌شود کار کند، خوشحال خواهم شد در جریان هر سیستم‌عامل جدیدی که Swaks را به‌طور کامل روی آن استفاده کرده‌اید و همچنین هرگونه مشکلی که در یک سیستم‌عامل جدید با آن مواجه شده‌اید قرار بگیرم.

سرورهای ایمیل (MAIL SERVERS)
این برنامه تقریباً به‌طور اختصاصی در تعامل با سرورهای ایمیل Exim توسعه یافته است. نویسنده گاه‌به‌گاه، اگرچه نه به‌طور کامل و دقیق، آن را با Sendmail، Smail، Exchange، Oracle Collaboration Suite، qpsmtpd و Communigate استفاده کرده است. از آن‌جا که تمامی قابلیت‌ها در Swaks بر پایه استانداردهای شناخته‌شده هستند، باید با هر سرور ایمیل نسبتاً مدرنی کار کند. در صورت یافتن مشکل، لطفاً آن را از طریق نشانی زیر به نویسنده گزارش دهید.

اگر Swaks مجبور به ایجاد یک نشانی فرستنده باشد، در صورتی که $LOGNAME مقداردهی شده باشد و مگر اینکه از "--force-getpwuid" استفاده شود، از آن به عنوان بخش محلی (local-part) پیام استفاده می‌شود.
هنگام جستجو برای فایل پیکربندی .swaksrc استفاده می‌شود. بخش OPTION PROCESSING -> "CONFIGURATION FILES" در بالا را ببینید.
پیشوند متغیرهای محیطی برای مشخص کردن گزینه‌های Swaks از طریق متغیرهای محیطی. بخش OPTION PROCESSING -> "CONFIGURATION ENVIRONMENT VARIABLES" در بالا را ببینید.

0
هیچ خطایی رخ نداد
1
خطا در تجزیه گزینه‌های خط فرمان
2
خطا در اتصال به سرور راه دور
3
نوع اتصال ناشناخته است
4
هنگام اجرا با نوع اتصال «pipe»، بروز مشکل مهلک در نوشتن یا خواندن از فرآیند فرزند
5
هنگام اجرا با نوع اتصال «pipe»، فرآیند فرزند به‌طور غیرمنتظره‌ای پایان یافت. این می‌تواند به این معنی باشد که برنامه مشخص‌شده با "--pipe" وجود ندارد.
6
اتصال به‌طور غیرمنتظره‌ای بسته شد. اگر بسته شدن اتصال در پاسخ به دستور «QUIT» که Swaks پس از یک پاسخ غیرمنتظره ارسال می‌کند تشخیص داده شود، به جای آن از کد خطای مربوط به همان پاسخ غیرمنتظره استفاده می‌شود. به عنوان مثال، اگر یک سرور ایمیل در پاسخ به MAIL FROM: پاسخ 550 بازگرداند و سپس بلافاصله اتصال را ببندد، Swaks بسته شدن اتصال را تشخیص می‌دهد، اما از کد خروج دقیق‌تر 23 برای مشخص کردن ماهیت شکست استفاده می‌کند. در مقابل اگر سرور کد 250 را بازگرداند و سپس بلافاصله اتصال را ببندد، Swaks از کد خروج 6 استفاده خواهد کرد زیرا کد خروج مشخص‌تری وجود ندارد.
10
خطا در پیش‌نیازها (ماژول مورد نیاز در دسترس نیست)
21
خطا در خواندن بنر اولیه از سرور
22
خطا در تراکنش HELO
23
خطا در تراکنش MAIL
24
هیچ گیرنده‌ای (RCPT) پذیرفته نشد
25
سرور در پاسخ به درخواست DATA خطا بازگرداند
26
سرور پس از داده‌ها، ایمیل را نپذیرفت
27
سرور پس از درخواست خروج (quit) در نشست عادی، خطا بازگرداند
28
خطا در تراکنش AUTH
29
خطا در تراکنش TLS
30
قابلیت PRDR درخواست شده/الزامی است اما توسط سرور اعلان نشده است
32
خطا در EHLO پس از مذاکره TLS
33
خطا در تراکنش XCLIENT
34
خطا در EHLO پس از XCLIENT
35
خطا در پردازش گزینه PROXY
36
خطا در ارسال بنر PROXY

نام «Swaks» تا حدی سرواژه‌ای برای «SWiss Army Knife SMTP» (چاقوی سوئیسی SMTP) است. این نام به دلیل تمایز و قابلیت تلفظ آسان انتخاب شد. در حالی که «Swaks» به عنوان نام یک بسته نرم‌افزاری منحصربه‌فرد است، معانی دیگری خارج از دنیای نرم‌افزار نیز دارد. لطفاً کاربردهای دیگر «swak» یا «swaks» را برای گنجاندن در این بخش ارسال کنید.

"Sealed With A Kiss"
عبارت SWAK/SWAKs گهگاه در اینترنت به معنای «با عشق» (مهر و موم شده با بوسه) دیده می‌شود.
در تیتر «SA se bes en swaks gekledes in 2011» دیده شده که توسط گویشوران بومی به «خوش‌پوش‌ترین‌ها و بدپوش‌ترین‌ها» ترجمه شده است. Google Translate میانه خوبی با «swaks gekledes» ندارد، اما «swak» را به «poor» (ضعیف/بد) و «swak geklede» را به «ill-dressed» (بدپوش) ترجمه می‌کند.

این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU General Public License) همان‌طور که توسط «بنیاد نرم‌افزارهای آزاد» (Free Software Foundation) منتشر شده است، چه نسخه ۲ مجوز و چه (به انتخاب خودتان) هر نسخه بعدی دیگری، بازتوزیع کرده و/یا تغییر دهید.

این برنامه با این امید توزیع شده است که مفید باشد، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی «قابل فروش بودن» یا «مناسب بودن برای یک هدف خاص». برای جزئیات بیشتر به «مجوز عمومی همگانی گنو» مراجعه کنید.

شما باید به همراه این برنامه یک نسخه از مجوز عمومی همگانی گنو را دریافت کرده باشید؛ در غیر این صورت، به نشانی زیر مکاتبه کنید: Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA..SH "اطلاعات تماس (CONTACT INFORMATION)" ارتباط عمومی، پرسش‌ها، وصله‌ها، درخواست‌ها و غیره به proj-swaks@jetmore.net ارسال شوند.

گزارش تغییرات، این راهنما و آخرین نسخه در http://www.jetmore.org/john/code/swaks در دسترس هستند.

ابزار Swaks با عشق توسط John Jetmore از مزارع ذرت ایندیانا در ایالات متحده آمریکا ساخته شده است.

ایمیل
updates-swaks@jetmore.net

اگر مایلید در فهرستی قرار بگیرید تا با انتشار نسخه جدیدی از Swaks اعلان‌ها را دریافت کنید، لطفاً ایمیلی به این نشانی ارسال کنید. پاسخی به ایمیل شما داده نخواهد شد.

وبگاه
http://www.jetmore.org/john/blog/c/swaks
خوراک RSS
http://www.jetmore.org/john/blog/c/swaks/feed
توییتر
http://twitter.com/SwaksSMTP
2025-05-03 perl v5.40.2