.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.0102 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "BASE 1" .TH BASE 1 2025-05-03 "perl v5.40.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" Swaks \- چاقوی سوئیسی SMTP، ابزار همه‌منظوره برای آزمودن تراکنش‌های SMTP .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" هدف اصلی طراحی Swaks این است که ابزاری منعطف، اسکریپت‌پذیر و مبتنی بر تراکنش برای آزمودن SMTP باشد. این ابزار از قابلیت‌ها و افزونه‌های SMTP نظیر TLS، احراز هویت (authentication) و pipelining؛ نسخه‌های متعددی از پروتکل SMTP شامل SMTP، ESMTP و LMTP؛ و روش‌های انتقال چندگانه شامل سوکت‌های دامنه یونیکس (UNIX-domain sockets)، سوکت‌های دامنه اینترنت (internet-domain sockets) و لوله‌ها (pipes) به فرایندهای ایجادشده پشتیبانی می‌کند. گزینه‌ها را می‌توان در متغیرهای محیطی، فایل‌های پیکربندی و خط فرمان مشخص کرد که حداکثر قابلیت پیکربندی و سهولت استفاده را برای مدیران سیستم و اسکریپت‌نویسان فراهم می‌آورد. .SH "شروع سریع (QUICK START)" .IX Header "QUICK START" تحویل یک ایمیل آزمایشی استاندارد به user@example.com روی درگاه ۲۵ از test\-server.example.net: .Sp .Vb 1 \& swaks \-\-to user@example.com \-\-server test\-server.example.net .Ve .PP تحویل یک ایمیل آزمایشی استاندارد با الزام به احراز هویت CRAM\-MD5 در نقش کاربر me@example.com. یک سرایند "X\-Test" به بدنه ایمیل اضافه خواهد شد. در صورتی که گذرواژه احراز هویت از فایل .netrc شما قابل دریافت نباشد، برای دریافت آن از شما درخواست خواهد شد: .Sp .Vb 1 \& swaks \-\-to user@example.com \-\-from me@example.com \-\-auth CRAM\-MD5 \-\-auth\-user me@example.com \-\-header\-X\-Test "test email" .Ve .PP آزمودن یک اسکنر ضدویروس با استفاده از EICAR در یک پیوست. بخش DATA پیام نمایش داده نشود: .Sp .Vb 1 \& swaks \-t user@example.com \-\-attach \- \-\-server test\-server.example.com \-\-suppress\-data \*(Aq\*(C'\fR، مقدار \f(CW\*(C`\*(C'\fR آرگومانِ گزینه \f(CW\*(C`\-\-quit\-after\*(C'\fR است. .IP 4 .IX Item "" هنگامی که در تعریف یک گزینه به کار می‌رود، متنی که درون علامت‌های قلاب شکسته (\f(CW\*(C`<>\*(C'\fR) قرار دارد نشان‌دهنده یک برچسب توصیفی برای مقداری است که کاربر باید ارائه دهد. برای نمونه، \f(CW\*(C`\-\-quit\-after \*(C'\fR نشان می‌دهد که \f(CW\*(C`\*(C'\fR باید با یک مقدار معتبر نقطه توقف (stop-point) جایگزین شود. .IP [] 4 .IX Item "[]" هنگامی که در تعریف یک گزینه به کار می‌رود، متنی که درون قلاب‌ها ([]) قرار دارد نشان می‌دهد که مقدار اختیاری است و می‌توان آن را حذف کرد. برای نمونه، \f(CW\*(C`\-\-to []\*(C'\fR نشان می‌دهد که گزینه \f(CW\*(C`\-\-to\*(C'\fR می‌تواند با یا بدون یک \f(CW\*(C`\*(C'\fR مشخص‌شده استفاده شود..SH "پردازش گزینه‌ها (OPTION PROCESSING)" .IX Header "OPTION PROCESSING" برای جلوگیری از سردرگمی احتمالی در این مستند، یک پرچم در Swaks همواره با عنوان «گزینه» (option) نامیده می‌شود. اگر گزینه داده‌های بیشتری دریافت کند، آن داده‌های اضافی به عنوان یک «آرگومان» برای آن گزینه در نظر گرفته می‌شوند. برای نمونه، ممکن است \f(CW\*(C`\-\-from fred@example.com\*(C'\fR در خط فرمان به Swaks داده شود، که در آن \f(CW\*(C`\-\-from\*(C'\fR گزینه و \f(CW\*(C`fred@example.com\*(C'\fR آرگومان \f(CW\*(C`\-\-from\*(C'\fR است. .PP گزینه‌ها و آرگومان‌ها تنها راه ارائه اطلاعات به Swaks هستند. اگر Swaks در حین پردازش گزینه‌ها داده‌ای پیدا کند که نه گزینه است و نه آرگومان یک گزینه، با خطا متوقف شده و خارج می‌شود. برای نمونه، اگر \f(CW\*(C`\-\-no\-data\-fixup 1\*(C'\fR در خط فرمان پیدا شود، این مورد منجر به خطا خواهد شد زیرا \f(CW\*(C`\-\-no\-data\-fixup\*(C'\fR آرگومانی نمی‌پذیرد و بنابراین Swaks متوجه نخواهد شد با \f(CW1\fR چه کار کند. .PP گزینه‌ها را می‌توان به سه روش به Swaks ارسال کرد: می‌توان آن‌ها را در یک فایل پیکربندی، در متغیرهای محیطی، و در خط فرمان مشخص کرد. بسته به گزینه مربوطه و اینکه آیا آرگومانی به آن داده شده است یا خیر، Swaks ممکن است از کاربر درخواست کند آرگومان را وارد کند. .PP هنگامی که Swaks گزینه‌های خود را ارزیابی می‌کند، ابتدا به دنبال فایل پیکربندی می‌گردد (چه در یک مکان پیش‌فرض و چه مشخص‌شده با \f(CW\*(C`\-\-config\*(C'\fR). سپس هر گزینه‌ای را در متغیرهای محیطی ارزیابی می‌کند. در نهایت، گزینه‌های خط فرمان را ارزیابی می‌نماید. در هر مرحله از پردازش، گزینه‌هایی که پیش‌تر تنظیم شده‌اند بازنویسی (override) خواهند شد. علاوه بر این، به هر گزینه‌ای می‌توان پیشوند \f(CW\*(C`no\-\*(C'\fR را اضافه کرد تا Swaks فراموش کند که این متغیر قبلاً تنظیم شده است (چه در مرحله قبلی، چه زودتر در همان مرحله). این قابلیت ضروری است زیرا بسیاری از گزینه‌ها، حالت «تعریف‌شده بدون آرگومان» را متفاوت از «تعریف‌نشده» در نظر می‌گیرند. .PP به عنوان یک قاعده کلی، اگر یک گزینه چندین بار مشخص شود، آخرین باری که داده شده اعمال خواهد شد. این موضوع هم درون یک روش (اگر \f(CW\*(C`\-\-from user1@example.com \-\-from user2@example.com\*(C'\fR داده شود، مقدار \f(CW\*(C`user2@example.com\*(C'\fR استفاده خواهد شد) و هم بین روش‌های مختلف (اگر \f(CW\*(C`from user1@example.com\*(C'\fR در یک فایل پیکربندی داده شود و \f(CW\*(C`\-\-from user2@example.com\*(C'\fR در خط فرمان وارد شود، مقدار \f(CW\*(C`user2@example.com\*(C'\fR استفاده خواهد شد) صدق می‌کند. .PP تعریف هر گزینه با خلاصه‌ای درون پرانتز درباره نحوه رفتار آن پایان می‌یابد. کدهای زیر ممکن است استفاده شوند: .IP "Arg-None, Arg-Optional, Arg-Required" 4 .IX Item "Arg-None, Arg-Optional, Arg-Required" این سه کد مانعة‌الجمع هستند و مشخص می‌کنند که آیا گزینه آرگومان می‌گیرد یا خیر. توجه داشته باشید که این موضوع لزوماً مشخص نمی‌کند که آیا آرگومان باید مستقیماً ارائه شود، بلکه نشان می‌دهد که آیا در نهایت وجود آرگومان الزامی است یا خیر. برای نمونه، \f(CW\*(C`\-\-to\*(C'\fR با برچسب Arg-Required مشخص شده است، اما ارائه \f(CW\*(C`\-\-to\*(C'\fR در خط فرمان بدون آرگومان نیز مجاز است؛ زیرا در صورت عدم ارائه مستقیم، Swaks می‌تواند آرگومان لازم را از کاربر درخواست کند. .IP From-Prompt 4 .IX Item "From-Prompt" گزینه‌ای با برچسب From-Prompt، در صورتی که آرگومانی ارائه نشده باشد، به صورت تعاملی آن را از کاربر درخواست می‌کند. .IP From-File 4 .IX Item "From-File" گزینه‌ای با برچسب From-File، در شرایط خاصی آرگومان‌ها را به عنوان فایل مدیریت می‌کند. .Sp اگر آرگومان اولیه \f(CW\*(C`\-\*(C'\fR باشد، آرگومان نهایی محتویات \f(CW\*(C`STDIN\*(C'\fR خواهد بود. چندین گزینه همگی می‌توانند \f(CW\*(C`STDIN\*(C'\fR را مشخص کنند، اما محتوای یکسانی برای هر یک از آن‌ها استفاده خواهد شد. .Sp اگر آرگومان اولیه با پیشوند \f(CW\*(C`@\*(C'\fR مشخص شود، به عنوان مسیر یک فایل با آن برخورد خواهد شد. فایل باز شده و محتویات آن به عنوان آرگومان نهایی استفاده می‌شود. اگر محتویات فایل قابل خواندن نباشد، Swaks خارج خواهد شد. برای مشخص کردن یک مقدار رشته‌ای صریح که با \f(CW\*(C`@\*(C'\fR شروع می‌شود، از دو نماد \f(CW\*(C`@\*(C'\fR استفاده کنید؛ اولین نماد حذف خواهد شد. امکان مشخص کردن فایلی بدون مسیر مشخص که با علامت \f(CW\*(C`@\*(C'\fR شروع می‌شود وجود ندارد (مانند \f(CW\*(C`\-\-attach @file.txt\*(C'\fR یا \f(CW\*(C`\-\-attach @@file.txt\*(C'\fR)، اما اگر مسیری به فایل اضافه کنید که دو نماد \f(CW\*(C`@\*(C'\fR را جدا کند، کار خواهد کرد (برای نمونه \f(CW\*(C`\-\-attach @./@file.txt\*(C'\fR محتوای فایل \f(CW@file\fR.txt را شامل خواهد شد). .IP Sensitive 4 .IX Item "Sensitive" اگر گزینه‌ای با علامت Sensitive بخواهد آرگومانی را از کاربر درخواست کند و گزینه \f(CW\*(C`\-\-protect\-prompt\*(C'\fR تنظیم شده باشد، Swaks تلاش می‌کند ورودی کاربر را پنهان کند تا روی ترمینال نمایش داده نشود (اکو نشود). Swaks از چندین روش برای پنهان‌سازی ورودی تلاش می‌کند، اما اگر هیچ‌یک از آن‌ها کار نکند، روند اجرای برنامه با ورودی بدون پوشش ادامه خواهد یافت. .IP Deprecated 4 .IX Item "Deprecated" گزینه‌ای با برچسب Deprecated رسماً منسوخ شده است و در نسخه‌های آینده حذف خواهد شد. برای جزئیات بیشتر درباره موارد منسوخ، بخش «DEPRECATIONS» این مستند را ببینید. .PP سازوکار دقیق و قالب استفاده از هر یک از این انواع در زیر فهرست شده است. .IP "فایل‌های پیکربندی (CONFIGURATION FILES)" 4 .IX Item "CONFIGURATION FILES" می‌توان از یک فایل پیکربندی برای تنظیم گزینه‌های پرکاربرد یا بیش‌ازحد طولانی استفاده کرد. به‌طور پیش‌فرض، Swaks به ترتیب به دنبال \fR\f(CI$SWAKS_HOME\fR\fI/.swaksrc\fR، \fI\fR\f(CI$HOME\fR\fI/.swaksrc\fR، و \fI\fR\f(CI$LOGDIR\fR\fI/.swaksrc\fR می‌گردد. اگر یکی از آن‌ها وجود داشته باشد (و از \f(CW\*(C`\-\-config\*(C'\fR استفاده نشده باشد)، آن فایل به عنوان فایل پیکربندی استفاده می‌شود. .Sp علاوه بر این، یک فایل پیکربندی در مکانی غیرپیش‌فرض را می‌توان با استفاده از \f(CW\*(C`\-\-config\*(C'\fR مشخص کرد. اگر این گزینه تنظیم شود و آرگومانی به آن داده نشود، Swaks از هیچ فایل پیکربندی، از جمله هیچ فایل پیش‌فرضی، استفاده نخواهد کرد. اگر \f(CW\*(C`\-\-config\*(C'\fR به یک فایل خواندنی اشاره کند، به عنوان فایل پیکربندی استفاده می‌شود و هر پیش‌فرضی را که وجود داشته باشد لغو می‌کند. اگر به یک فایل غیرقابل‌خواندن اشاره کند، خطایی نشان داده شده و Swaks خارج خواهد شد. .Sp مجموعه‌ای از پیش‌فرض‌های «قابل حمل» (portable) را نیز می‌توان با افزودن گزینه‌ها به انتهای فایل برنامه Swaks ایجاد کرد. در نسخه توزیع‌شده، خط آخر Swaks باید \f(CW\*(C`_\|_END_\|_\*(C'\fR باشد. هر خطی که پس از \f(CW\*(C`_\|_END_\|_\*(C'\fR اضافه شود، به عنوان محتوای یک فایل پیکربندی در نظر گرفته خواهد شد. این امر امکان می‌دهد مجموعه‌ای از ترجیحات کاربر به طور خودکار در قالب یک فایل واحد از سروری به سرور دیگر کپی شود. .Sp اگر فایل‌های پیکربندی به صراحت غیرفعال نشده باشند، پیکربندی \f(CW\*(C`_\|_END_\|_\*(C'\fR همیشه خوانده می‌شود. در هر بار اجرای Swaks، تنها یک فایل پیکربندی دیگر استفاده خواهد شد، حتی اگر چندین فایل پیکربندی مشخص شده باشد. اگر قرار باشد پیکربندی \f(CW\*(C`_\|_END_\|_\*(C'\fR و پیکربندی دیگری خوانده شوند، ابتدا پیکربندی \f(CW\*(C`_\|_END_\|_\*(C'\fR پردازش خواهد شد. مشخص کردن گزینه \f(CW\*(C`\-\-config\*(C'\fR بدون آرگومان، پردازش هر دو پیکربندی \f(CW\*(C`_\|_END_\|_\*(C'\fR و هر فایل پیکربندی واقعی را غیرفعال می‌کند. .Sp در یک فایل پیکربندی، خطوطی که با علامت هش (\f(CW\*(C`#\*(C'\fR) شروع می‌شوند نادیده گرفته می‌شوند. سایر خطوط به عنوان گزینه‌ای برای Swaks در نظر گرفته می‌شوند که خط تیره یا خط تیره‌های ابتدای آن‌ها اختیاری است. هر چیزی پس از اولین فاصله در یک خط گزینه، به عنوان آرگومان آن گزینه در نظر گرفته می‌شود و پردازش شل روی آن انجام نمی‌گیرد. بنابراین، نقل‌قول (کوتیشن) معمولاً غیرضروری است و به صورت تحت‌اللفظی در آرگومان گنجانده خواهد شد. .Sp تفاوت ظریفی میان ارائه گزینه بدون آرگومان و ارائه گزینه با آرگومان خالی وجود دارد. اگر یک خط گزینه فاصله‌ای نداشته باشد، کل خط به عنوان گزینه در نظر گرفته می‌شود و آرگومانی وجود ندارد. اگر خط با یک فاصله تکی پایان یابد، به عنوان گزینه‌ای با آرگومان خالی پردازش می‌شود. بنابراین، \f(CW\*(C`apt\*(C'\fR مانند \f(CW\*(C`\-\-apt\*(C'\fR در نظر گرفته خواهد شد، اما \f(CW\*(C`apt \*(C'\fR مانند \f(CW\*(C`\-\-apt\ \*(Aq\*(Aq\*(C'\fR پردازش می‌شود. .Sp در اینجا مثالی از محتوای یک فایل پیکربندی آورده شده است: .Sp .Vb 6 \& # 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" .Ve .Sp گزینه‌های ویژه فایل پیکربندی: .RS 4 .IP "\-\-config []" 4 .IX Item "--config []" این گزینه مسیری را به یک فایل پیکربندی خاص برای استفاده مشخص می‌کند. اگر بدون آرگومان مشخص شود، هیچ فایل پیکربندی که به‌طور خودکار پیدا شده باشد (از طریق \f(CW$HOME\fR، و غیره، یا \f(CW\*(C`_\|_END_\|_\*(C'\fR) پردازش نخواهد شد. اگر آرگومان فایلی معتبر باشد، آن فایل به عنوان فایل پیکربندی استفاده می‌شود (پس از پیکربندی \f(CW\*(C`_\|_END_\|_\*(C'\fR). اگر آرگومان فایلی معتبر و خواندنی نباشد، Swaks خطا داده و خارج می‌شود. این گزینه را می‌توان چندین بار مشخص کرد، اما تنها اولین باری که مشخص شده است (در ترتیب جستجوی متغیرهای محیطی و خط فرمان) استفاده خواهد شد. (Arg-Optional) .RE .RS 4 .RE .IP "متغیرهای محیطی پیکربندی (CONFIGURATION ENVIRONMENT VARIABLES)" 4 .IX Item "CONFIGURATION ENVIRONMENT VARIABLES" گزینه‌ها را می‌توان از طریق متغیرهای محیطی نیز ارسال کرد. این متغیرها به صورت \f(CW$SWAKS_OPT_name\fR هستند، که در آن \f(CW\*(C`name\*(C'\fR نام گزینه‌ای است که در خط فرمان مشخص می‌شود. از آنجا که در اکثر شل‌های شبه‌یونیکس خط فاصله در نام متغیرهای محیطی مجاز نیست، نباید از خط فاصله‌های ابتدایی استفاده کرد و هر خط فاصله‌ای درون نام گزینه باید با زیرخط (underscore) جایگزین شود. دستورات زیر همان گزینه‌های نشان‌داده‌شده در مثال فایل پیکربندی را ایجاد می‌کنند: .Sp .Vb 2 \& $ SWAKS_OPT_from=\*(Aqfred@example.com\*(Aq \& $ SWAKS_OPT_h_From=\*(Aq"Fred Example" \*(Aq .Ve .Sp تنظیم یک متغیر روی مقداری خالی، معادل مشخص کردن آن در خط فرمان بدون آرگومان است. برای نمونه، تنظیم باعث می‌شود Swaks در هر بار اجرا، سرور مقصد برای اتصال را از کاربر درخواست کند. در ویندوز، تنظیم متغیرهای محیطی خالی امکان‌پذیر نیست؛ این رفتار را می‌توان با تنظیم متغیر محیطی روی \f(CW\*(C`<>\*(C'\fR شبیه‌سازی کرد. علاوه بر این، گنجاندن نام سرآیند در گزینه header از طریق متغیر محیطی در ویندوز مجاز نیست (برای نمونه، \f(CW\*(C`SWAKS_OPT_header_Foo=bar\*(C'\fR منجر به خطا خواهد شد، اما \f(CW\*(C`SWAKS_OPT_header="Foo: bar"\*(C'\fR کار خواهد کرد). .Sp از آنجا که ترتیب ذاتی در گزینه‌های ارائه‌شده از طریق متغیرهای محیطی وجود ندارد، این گزینه‌ها قبل از پردازش مرتب‌سازی می‌شوند. این روش شاید عالی نباشد، اما دست‌کم رفتاری را تعیین می‌کند که در غیر این صورت نامشخص می‌ماند. به عنوان مثال، اگر هر دو متغیر \f(CW$SWAKS_OPT_from\fR و \f(CW$SWAKS_OPT_f\fR تنظیم شده باشند، مقدار \f(CW$SWAKS_OPT_from\fR استفاده خواهد شد، زیرا پس از \f(CW$SWAKS_OPT_f\fR مرتب می‌شود. همچنین به دلیل عدم وجود ترتیب ذاتی در پردازش محیط، غیرفعال کردن گزینه‌ها با پیشوند \f(CW\*(C`no\-\*(C'\fR قابل‌اعتماد نیست. این کار در صورتی عمل می‌کند که گزینه مورد نظر برای خاموش شدن، قبل از \f(CW\*(C`no\-\*(C'\fR مرتب شود، اما اگر بعد از آن مرتب شود ناموفق خواهد بود. از آنجا که هدف اصلی \f(CW\*(C`no\-\*(C'\fR کارکرد بین انواع روش‌های پیکربندی است (برای نمونه، لغو گزینه‌ای از خط فرمان که در فایل پیکربندی تنظیم شده بود)، بعید است این موضوع مشکلی ایجاد کند. .Sp علاوه بر تنظیم معادل گزینه‌های خط فرمان، می‌توان \f(CW$SWAKS_HOME\fR را روی دایرکتوری حاوی فایل پیش‌فرض \fI.swaksrc\fR برای استفاده تنظیم کرد. .IP "گزینه‌های خط فرمان (COMMAND LINE OPTIONS)" 4 .IX Item "COMMAND LINE OPTIONS" آخرین روش ارائه گزینه‌ها به Swaks از طریق خط فرمان است. رفتار گزینه‌ها با اکثر برنامه‌های خط فرمان شبه‌یونیکس سازگار است. بسیاری از گزینه‌ها دارای هر دو شکل کوتاه و بلند هستند (برای نمونه \f(CW\*(C`\-s\*(C'\fR و \f(CW\*(C`\-\-server\*(C'\fR). طبق قرارداد، گزینه‌های کوتاه با یک خط تیره و گزینه‌های بلند با دو خط تیره مشخص می‌شوند. این تنها یک قرارداد است و هر پیشوندی با هر دو نوع کار می‌کند. .Sp دستور زیر مثال نشان‌داده‌شده در بخش‌های فایل پیکربندی و متغیر محیطی را نشان می‌دهد: .Sp .Vb 1 \& $ swaks \-\-from fred@example.com \-\-h\-From: \*(Aq"Fred Example" \*(Aq .Ve .SH "روش‌های انتقال (TRANSPORTS)" .IX Header "TRANSPORTS" برنامه Swaks می‌تواند از طریق پایپ‌های یونیکس («پایپ‌ها»)، سوکت‌های دامنه یونیکس («سوکت‌های یونیکس»)، یا سوکت‌های دامنه اینترنت («سوکت‌های شبکه») به یک هدف متصل شود. اتصال از طریق سوکت‌های شبکه رفتار پیش‌فرض است. با توجه به ماهیت منفرد بودن روش انتقال مورداستفاده، هر مجموعه از گزینه‌های بخش زیر مانعة‌الجمع هستند. مشخص کردن بیش از یکی از گزینه‌های \f(CW\*(C`\-\-server\*(C'\fR، \f(CW\*(C`\-\-pipe\*(C'\fR یا \f(CW\*(C`\-\-socket\*(C'\fR منجر به خطا خواهد شد. ترکیب سایر گزینه‌ها میان انواع روش‌های انتقال، صرفاً منجر به نادیده گرفته شدن گزینه‌های نامربوط می‌شود. در ادامه شرح مختصری از هر روش انتقال و گزینه‌های ویژه آن روش ارائه شده است. .IP "سوکت‌های شبکه (NETWORK SOCKETS)" 4 .IX Item "NETWORK SOCKETS" این روش انتقال تلاش می‌کند تا پیامی را از طریق TCP/IP، که روش استاندارد برای تحویل SMTP است، ارسال کند. این روش انتقال پیش‌فرض برای Swaks است. اگر هیچ‌یک از گزینه‌های \f(CW\*(C`\-\-server\*(C'\fR، \f(CW\*(C`\-\-pipe\*(C'\fR یا \f(CW\*(C`\-\-socket\*(C'\fR داده نشوند، از این انتقال استفاده می‌شود و سرور هدف از روی دامنه گیرنده تعیین می‌گردد (برای جزئیات بیشتر به \f(CW\*(C`\-\-server\*(C'\fR در زیر مراجعه کنید). .Sp این روش انتقال نیازمند ماژول IO::Socket::IP برای هر دو سوکت‌های IPv4 و IPv6 است. اگر این ماژول قابل بارگذاری نباشد، Swaks تلاش خواهد کرد از کتابخانه IO::Socket برای IPv4 و IO::Socket::INET6 برای پشتیبانی از IPv6 استفاده کند. تلاش برای استفاده از این روش انتقال در حالی که هیچ‌یک از این کتابخانه‌ها در دسترس نباشند، منجر به خطا و پایان اجرای برنامه خواهد شد. .Sp استفاده جایگزین از IO::Socket و IO::Socket::INET6 منسوخ شده است و در نسخه‌های آینده حذف خواهد شد. بخش DEPRECATIONS در زیر را ببینید. .RS 4 .IP "\-s, \-\-server [[:]]" 4 .IX Item "-s, --server [[:]]" به‌طور صریح به Swaks می‌گوید که از سوکت‌های شبکه استفاده کند و نام میزبان یا نشانی IP مقصد برای اتصال را مشخص نماید، یا اگر آرگومانی ارائه نشود، آن را از کاربر درخواست کند. اگر این گزینه داده نشود و هیچ گزینه انتقال دیگری نیز مشخص نشده باشد، سرور ایمیل مقصد از روی رکوردهای DNS مناسب برای دامنه نشانی ایمیل گیرنده با استفاده از ماژول Net::DNS تعیین می‌شود. اگر Net::DNS در دسترس نباشد، Swaks تلاش می‌کند برای تحویل به localhost متصل شود. پورت هدف را نیز می‌توان به صورت اختیاری در اینجا تنظیم کرد. قالب‌های پشتیبانی‌شده برای این منظور شامل SERVER:PORT (پشتیبانی از نام‌ها و نشانی‌های IPv4)؛ [SERVER]:PORT و SERVER/PORT (پشتیبانی از نام‌ها، نشانی‌های IPv4 و IPv6) هستند. پورتی که از طریق این گزینه تنظیم شود فقط در صورتی استفاده می‌شود که گزینه \f(CW\*(C`\-\-port\*(C'\fR استفاده نشده باشد. همچنین \f(CW\*(C`\-\-copy\-routing\*(C'\fR را ببینید. (Arg-Required, From-Prompt) .IP "\-p, \-\-port []" 4 .IX Item "-p, --port []" مشخص می‌کند که از کدام پورت TCP در مقصد باید استفاده شود، یا اگر آرگومانی ذکر نشده باشد آن را درخواست می‌کند. آرگومان می‌تواند نام یک سرویس (مطابق دریافت‌شده توسط \fBgetservbyname\fR\|(3)) یا یک شماره پورت باشد. پورت پیش‌فرض smtp/25 است، مگر اینکه تحت تأثیر گزینه‌های \f(CW\*(C`\-\-protocol\*(C'\fR یا \f(CW\*(C`\-\-tls\-on\-connect\*(C'\fR تغییر کند. (Arg-Required, From-Prompt) .IP "\-li, \-\-local\-interface [[:]]" 4 .IX Item "-li, --local-interface [[:]]" استفاده از آرگومان به عنوان رابط محلی برای اتصال خروجی SMTP، یا درخواست از کاربر در صورت ارائه نشدن آرگومان. آرگومان می‌تواند یک نشانی IP یا یک نام میزبان باشد. اقدام پیش‌فرض این است که اجازه داده شود سیستم‌عامل رابط محلی را انتخاب کند. برای توضیحات تکمیلی درباره قالب : به \f(CW\*(C`\-\-server\*(C'\fR مراجعه کنید. پورتی که از طریق این گزینه تنظیم شود تنها در صورتی استفاده خواهد شد که از گزینه \f(CW\*(C`\-\-port\*(C'\fR استفاده نشده باشد. (Arg-Required, From-Prompt) .IP "\-lp, \-\-local\-port, \-\-lport []" 4 .IX Item "-lp, --local-port, --lport []" مشخص کردن پورت خروجی که تراکنش از آن آغاز می‌شود. آرگومان می‌تواند نام یک سرویس (همان‌طور که توسط \fBgetservbyname\fR\|(3) دریافت می‌شود) یا یک شماره پورت باشد. اگر این گزینه مشخص نشود، سیستم یک پورت موقت (ephemeral) انتخاب خواهد کرد. توجه داشته باشید که کاربران عادی نمی‌توانند برخی پورت‌ها را تعیین کنند. (Arg-Required, From-Prompt) .IP "\-\-copy\-routing " 4 .IX Item "--copy-routing " آرگومان به عنوان بخش دامنه یک نشانی ایمیل تفسیر می‌شود و برای یافتن سرور مقصد با همان منطقی به کار می‌رود که برای جستجوی سرور مقصد نشانی ایمیل گیرنده استفاده می‌شود. برای جزئیات بیشتر درباره نحوه تعیین هدف از روی دامنه ایمیل، گزینه \f(CW\*(C`\-\-to\*(C'\fR را ببینید. (Arg-Required) .IP "\-4, \-6" 4 .IX Item "-4, -6" اجبار به استفاده از IPv4 یا IPv6. (Arg-None) .RE .RS 4 .RE .IP "سوکت‌های یونیکس (UNIX SOCKETS)" 4 .IX Item "UNIX SOCKETS" این روش انتقال تلاش می‌کند پیام‌ها را از طریق یک فایل سوکت دامنه یونیکس (UNIX-domain socket) تحویل دهد. این قابلیت برای آزمایش MTA/MDAهایی که به فایل‌های سوکت گوش می‌دهند مفید است (برای نمونه، آزمایش تحویل LMTP به Cyrus). این روش انتقال نیازمند ماژول IO::Socket::UNIX است که بخشی از توزیع استاندارد Perl است. اگر این ماژول قابل بارگذاری نباشد، تلاش برای استفاده از این روش انتقال منجر به خطا و پایان اجرای برنامه خواهد شد. .RS 4 .IP "\-\-socket []" 4 .IX Item "--socket []" این گزینه یک فایل سوکت دامنه یونیکس را به عنوان آرگومان خود دریافت می‌کند. اگر Swaks نتواند این سوکت را باز کند، پیامی مبنی بر خطا نمایش داده و خارج خواهد شد. (Arg-Required, From-Prompt) .RE .RS 4 .RE .IP "پایپ‌ها (PIPES)" 4 .IX Item "PIPES" این روش انتقال تلاش می‌کند تا پردازشی را ایجاد (spawn) کرده و از طریق پایپ‌ها با آن ارتباط برقرار کند. برنامه اجراشده باید آماده باشد تا روی \f(CW\*(C`STDIN\*(C'\fR/\f(CW\*(C`STDOUT\*(C'\fR مانند یک سرور ایمیل رفتار کند. هر MTA که برای اجرا از inet/xinet طراحی شده باشد باید از این حالت پشتیبانی کند. علاوه بر این، برخی از MTAها حالت‌های آزمایشی ارائه می‌دهند که می‌توان از طریق \f(CW\*(C`STDIN\*(C'\fR/\f(CW\*(C`STDOUT\*(C'\fR با آن‌ها ارتباط برقرار کرد. این روش انتقال را می‌توان برای خودکارسازی این آزمایش‌ها استفاده کرد. برای مثال، اگر بررسی DNSBL را با Exim پیاده‌سازی کرده‌اید و می‌خواهید مطمئن شوید که کار می‌کند، می‌توانید \f(CW\*(C`swaks \-\-pipe "exim \-bh 127.0.0.2"\*(C'\fR را اجرا کنید. در حالت ایده‌آل، پردازشی که با آن تعامل دارید باید روی \f(CW\*(C`STDIN\*(C'\fR و \f(CW\*(C`STDOUT\*(C'\fR دقیقاً مانند یک سرور SMTP عمل کند. هرگونه داده اشکال‌زدایی (debug) باید به \f(CW\*(C`STDERR\*(C'\fR فرستاده شود، که به ترمینال شما هدایت خواهد شد. در عمل، Swaks معمولاً می‌تواند مقداری داده اشکال‌زدایی را روی \f(CW\*(C`STDOUT\*(C'\fR پردازش فرزند مدیریت کند، اما هیچ تضمینی درباره مقدار قابل تحمل آن وجود ندارد. .Sp این روش انتقال نیازمند ماژول IPC::Open2 است که بخشی از توزیع استاندارد Perl است. اگر این ماژول قابل بارگذاری نباشد، تلاش برای استفاده از این روش انتقال منجر به خطا و خاتمه برنامه خواهد شد. .RS 4 .IP "\-\-pipe []" 4 .IX Item "--pipe []" یک نام پردازش و آرگومان‌های آن پردازش را ارائه می‌دهد. Swaks تلاش خواهد کرد تا پردازش را اجرا کرده و از طریق پایپ‌ها با آن ارتباط برقرار کند. اگر آرگومان یک فایل اجرایی نباشد، Swaks خطایی نمایش داده و خارج خواهد شد. (Arg-Required, From-Prompt) .RE .RS 4 .RE.SH "گزینه‌های پروتکل (PROTOCOL OPTIONS)" .IX Header "PROTOCOL OPTIONS" این گزینه‌ها به لایهٔ پروتکل مربوط می‌شوند. .IP "\-t, \-\-to [[,[,...]]]" 4 .IX Item "-t, --to [[,[,...]]]" .PD 0 .IP "\-\-cc [[,[,...]]]" 4 .IX Item "--cc [[,[,...]]]" .IP "\-\-bcc [[,[,...]]]" 4 .IX Item "--bcc [[,[,...]]]" .PD همگی این گزینه‌ها به Swaks می‌گویند که از آرگومان(ها) به‌عنوان گیرندهٔ پاکت (envelope-recipient) برای رایانامه استفاده کند. تفاوت‌های ظریفی میان این سه گزینه وجود دارد که جزئیات آن‌ها در ادامه آمده است. اگر گزینه‌ای بدون آرگومان مشخص شود، Swaks از کاربر برای وارد کردن آرگومان درخواست می‌کند. .Sp \&\f(CW\*(C`\-\-to\*(C'\fR از این نظر ویژه است که تنها گزینهٔ الزامی در Swaks است. هیچ مقدار پیش‌فرضی برای این گزینه وجود ندارد. اگر گیرنده‌ای به هیچ طریقی مشخص نشده باشد، از کاربر به‌صورت تعاملی خواسته می‌شود تا مقداری وارد کند. تنها استثنا زمانی است که یک مقدار برای \f(CW\*(C`\-\-quit\-after\*(C'\fR تعیین شده باشد که سبب می‌شود تراکنش SMTP پیش از نیاز به گیرنده پایان یابد. اگر چندین گیرنده مشخص شده باشند و برای تعیین مسیر به دامنهٔ گیرنده نیاز باشد، دامنهٔ آخرین گیرنده در فهرست آرگومان‌های \f(CW\*(C`\-\-to\*(C'\fR استفاده می‌شود. .Sp تمایز اصلی میان این گزینه‌ها در نحوهٔ برخورد با آرگومان‌های آن‌ها هنگام تولید بخش DATA رایانامه است. هر یک از آن‌ها نشانهٔ جایگزین مخصوص به خود را دارند (به‌ترتیب \f(CW\*(C`%TO_ADDRESS%\*(C'\fR، \f(CW\*(C`%CC_ADDRESS%\*(C'\fR و \f(CW\*(C`%BCC_ADDRESS%\*(C'\fR) که هر کس می‌تواند هنگام ساخت یک DATA سفارشی از آن‌ها استفاده کند. در پیام پیش‌فرض Swaks، از \f(CW\*(C`%TO_ADDRESS%\*(C'\fR برای سربرگ To: استفاده می‌شود و در صورت پر بودن، از \f(CW\*(C`%CC_HEADER%\*(C'\fR برای سربرگ Cc: استفاده خواهد شد. \f(CW\*(C`%BCC_ADDRESS%\*(C'\fR در DATA پیش‌فرض استفاده نمی‌شود. (Arg-Required, From-Prompt) .IP "\-f, \-\-from []" 4 .IX Item "-f, --from []" از آرگومان به‌عنوان فرستندهٔ پاکت (envelope-sender) برای رایانامه استفاده می‌کند، یا در صورت مشخص نشدن آرگومان از کاربر درخواست ورودی می‌کند. رشتهٔ \f(CW\*(C`<>\*(C'\fR می‌تواند به معنای فرستندهٔ تهی (null sender) داده شود. اگر کاربر نشانی فرستنده‌ای را مشخص نکند، از یک مقدار پیش‌فرض استفاده می‌شود. بخش دامنه (domain-part) فرستندهٔ پیش‌فرض، بهترین حدس از نام دامنهٔ کاملاً مشخص‌شدهٔ (FQDN) میزبان محلی است. روش تعیین بخش محلی (local-part) متغیر است. اگر متغیر محیطی \f(CW$LOGNAME\fR تنظیم شده باشد، به‌عنوان بخش محلی استفاده خواهد شد. در غیر این صورت، در ویندوز از مقدار \f(CWWin32::LoginName()\fR و در پلتفرم‌های شبه‌یونیکس از \fBgetpwuid\fR\|(3) استفاده می‌شود. همچنین \f(CW\*(C`\-\-force\-getpwuid\*(C'\fR را ببینید. اگر Swaks نتواند نام میزبان محلی را تشخیص دهد و نشانی فرستنده برای تراکنش لازم باشد، Swaks با خطا متوقف شده و خارج می‌شود. در این حالت، باید یک رشتهٔ معتبر از طریق این گزینه ارائه شود. (Arg-Required, From-Prompt) .IP "\-\-ehlo, \-\-lhlo, \-h, \-\-helo []" 4 .IX Item "--ehlo, --lhlo, -h, --helo []" رشته‌ای که به‌عنوان آرگومان برای دستور HELO/EHLO/LHLO استفاده می‌شود، یا در صورت مشخص نشدن آرگومان از کاربر درخواست ورودی می‌کند. اگر از این گزینه استفاده نشود، بهترین حدس از نام دامنهٔ کاملاً مشخص‌شدهٔ میزبان محلی استفاده خواهد شد. اگر Swaks نتواند نام میزبان محلی را تشخیص دهد و رشتهٔ helo برای تراکنش مورد نیاز باشد، Swaks با خطا خارج می‌شود. در این حالت، باید رشته‌ای معتبر از طریق این گزینه ارائه گردد. (Arg-Required, From-Prompt) .IP "\-q, \-\-quit, \-\-quit\-after " 4 .IX Item "-q, --quit, --quit-after " نقطه‌ای که تراکنش باید در آن متوقف شود. هنگامی که تراکنش به نقطهٔ توقف درخواستی برسد، و به شرطی که Swaks پیش از رسیدن به آن دچار خطا نشده باشد، دستور "QUIT" را ارسال کرده و تلاش می‌کند اتصال را به‌طور تمیز ببندد. آرگومان‌های معتبر و نکات مربوط به معنای آن‌ها به شرح زیر است. (Arg-Required) .RS 4 .IP PROXY 4 .IX Item "PROXY" پس از ارسال پاسخ از سوی سرور به یک درخواست PROXY خارج می‌شود. توجه داشته باشید که اگر خطایی در مذاکرهٔ پروکسی رخ ندهد، این گزینه با CONNECT مترادف خواهد بود. .IP "CONNECT, BANNER" 4 .IX Item "CONNECT, BANNER" پس از دریافت بنر خوش‌آمدگویی از مقصد، نشست را پایان می‌دهد. .IP "FIRST-HELO, FIRST-EHLO, FIRST-LHLO" 4 .IX Item "FIRST-HELO, FIRST-EHLO, FIRST-LHLO" در یک نشست STARTTLS (نه در حالت tls-on-connect)، تراکنش را پس از نخستین مورد از دو HELO خاتمه می‌دهد. در یک تراکنش غیر STARTTLS، همانند HELO رفتار می‌کند (پایین را ببینید). .IP XCLIENT 4 .IX Item "XCLIENT" پس از مذاکرهٔ XCLIENT خارج می‌شود. صرف‌نظر از اینکه تلاشی برای آن شده باشد یا خیر، این گزینه همیشه پس از نقطه‌ای که قرار بود XCLIENT مذاکره شود خارج می‌گردد. .IP XCLIENT-HELO 4 .IX Item "XCLIENT-HELO" پس از HELOای که با مذاکرهٔ XCLIENT برانگیخته می‌شود، خارج می‌شود. این مورد با HELO و FIRST-HELO تفاوت دارد زیرا مذاکرهٔ XCLIENT می‌تواند در چندین نقطه از تراکنش SMTP رخ دهد و امکان ارجاع دقیق به HELO متصل به XCLIENT با استفاده از نقاط توقف HELO یا FIRST-HELO وجود ندارد. این گزینه همیشه پس از نقطه‌ای که HELO برانگیخته از XCLIENT قرار بود رخ دهد خارج می‌شود، صرف‌نظر از اینکه تلاشی برای آن انجام شده باشد یا خیر. .IP "STARTTLS, TLS" 4 .IX Item "STARTTLS, TLS" بلافاصله پس از مذاکرهٔ TLS تراکنش را متوقف کرده و خارج می‌شود. توجه داشته باشید که بسته به استفاده از STARTTLS یا tls-on-connect، این اتفاق در مراحل متفاوتی رخ می‌دهد. صرف‌نظر از این که تلاشی برای آن انجام شده باشد یا خیر، همیشه پس از نقطه‌ای که TLS قرار بود مذاکره شود خارج می‌گردد. .IP "HELO, EHLO, LHLO" 4 .IX Item "HELO, EHLO, LHLO" در نشست STARTTLS یا XCLIENT، پس از دومین HELO خارج می‌شود. در غیر این صورت پس از نخستین و تنها HELO پایان می‌یابد. .IP AUTH 4 .IX Item "AUTH" پس از احراز هویت خارج می‌شود. صرف‌نظر از اینکه تلاشی انجام گرفته باشد یا خیر، همواره پس از نقطه‌ای که قرار بود احراز هویت مذاکره شود خارج می‌شود. .IP "MAIL, FROM" 4 .IX Item "MAIL, FROM" پس از ارسال MAIL FROM: خارج می‌شود. .IP "RCPT, TO" 4 .IX Item "RCPT, TO" پس از ارسال RCPT TO: خارج می‌شود. .RE .RS 4 .RE .IP "\-\-da, \-\-drop\-after " 4 .IX Item "--da, --drop-after " این گزینه مشابه \f(CW\*(C`\-\-quit\-after\*(C'\fR است، اما به جای تلاش برای بستن تمیز نشست، صرفاً نشست را قطع می‌کند. این گزینه همان نقاط توقفِ \f(CW\*(C`\-\-quit\-after\*(C'\fR را می‌پذیرد و علاوه بر آن‌ها DATA و DOT را نیز قبول می‌کند که جزئیات آن‌ها در ادامه آمده است. (Arg-Required) .RS 4 .IP DATA 4 .IX Item "DATA" اتصال را پس از ارسال DATA توسط سرور قطع می‌کند. .IP DOT 4 .IX Item "DOT" اتصال را پس از ارسال «.» پایانی پیام توسط سرور قطع می‌کند. .RE .RS 4 .RE .IP "\-\-das, \-\-drop\-after\-send " 4 .IX Item "--das, --drop-after-send " این گزینه شبیه به \f(CW\*(C`\-\-drop\-after\*(C'\fR است، اما به جای قطع ارتباط پس از خواندن پاسخ برای نقطهٔ توقف، بلافاصله پس از ارسال نقطهٔ توقف، اتصال را قطع می‌کند. این گزینه همان نقاط توقف \f(CW\*(C`\-\-drop\-after\*(C'\fR را می‌پذیرد. اگر نقطهٔ توقف برای بخشی اختیاری از تراکنش باشد که عملاً ارسال نشده است (برای نمونه STARTTLS یا AUTH)، این گزینه دقیقاً مانند \f(CW\*(C`\-\-drop\-after\*(C'\fR عمل خواهد کرد. برای جزئیات به موارد زیر مراجعه کنید. (Arg-Required) .RS 4 .IP CONNECT 4 .IX Item "CONNECT" به سرور متصل می‌شود و سپس پیش از دریافت بنر سرور، ارتباط را قطع می‌کند. .IP "STARTTLS, TLS" 4 .IX Item "STARTTLS, TLS" کاملاً یکسان با \f(CW\*(C`\-\-drop\-after\*(C'\fR عمل می‌کند. .IP "HELO, EHLO, LHLO" 4 .IX Item "HELO, EHLO, LHLO" لزوماً مطابق انتظار عمل نمی‌کند. اگر به نظر می‌رسد پاسخ HELO را به نادرستی می‌خواند، به جای آن از FIRST-HELO استفاده کنید. .RE .RS 4 .RE .IP "\-\-timeout [