Mail Server Test ubuntu: Difference between revisions
(Created page with "# تست اتصال به میلسرور در Ubuntu > **این صفحه بخشی از مستندات ابزارهای خط فرمان است.** دو روش برای تست اتصال به میلسرور (SMTP/IMAP/POP3) در Ubuntu توضیح داده شده است: > ۱. اسکریپت سبک **test-smtp.sh** (بدون نیاز به نصب ابزار اضافه) > ۲. ابزار قدرتمند **swaks** (SMTP Swiss Army Knife) --- ## فهرست مطالب - [...") |
No edit summary |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
__TOC__ | |||
این صفحه راهنمای تست اتصال به میلسرور (SMTP/IMAP/POP3) در Ubuntu است. دو روش در اینجا آموزش داده میشود: | |||
- | # اسکریپت سبک '''test-smtp.sh''' (بدون نیاز به نصب ابزار اضافه) | ||
# ابزار قدرتمند '''swaks''' (SMTP Swiss Army Knife) | |||
{{Note|این صفحه بخشی از مستندات ابزارهای خط فرمان است.}} | |||
== پیشنیازها == | |||
* سیستمعامل '''Ubuntu''' (نسخه ۲۰.۰۴ یا جدیدتر توصیه میشود) | |||
* دسترسی کاربر با مجوز <code>sudo</code> | |||
* نام میزبان یا آدرس IP میلسرور مقصد | |||
* باز بودن پورتهای خروجی در فایروال سمت کلاینت (در صورت وجود) | |||
--- | {| class="wikitable" style="width:100%;" | ||
|+ پورتهای استاندارد میل | |||
! پورت !! سرویس !! پروتکل !! رمزنگاری | |||
|- | |||
| ۲۵ || SMTP || ارسال || بدون رمزنگاری (یا STARTTLS) | |||
|- | |||
| ۴۶۵ || SMTPS || ارسال || SSL/TLS | |||
|- | |||
| ۵۸۷ || Submission || ارسال || STARTTLS | |||
|- | |||
| ۱۱۰ || POP3 || دریافت || بدون رمزنگاری | |||
|- | |||
| ۹۹۵ || POP3S || دریافت || SSL/TLS | |||
|- | |||
| ۱۴۳ || IMAP || دریافت || بدون رمزنگاری | |||
|- | |||
| ۹۹۳ || IMAPS || دریافت || SSL/TLS | |||
|} | |||
== روش اول: اسکریپت test-smtp.sh == | |||
این اسکریپت با استفاده از قابلیت <code>/dev/tcp</code> هستهٔ Bash، اتصال TCP به همهٔ پورتهای استاندارد میلسرور را بررسی میکند. آدرس IP دامنه نیز بهصورت خودکار resolve و در خروجی نمایش داده میشود. '''نیاز به نصب هیچ ابزار اضافهای ندارد.''' | |||
=== نصب === | |||
فایل را با نام <code>test-smtp.sh</code> ایجاد کنید: | |||
- | |||
<syntaxhighlight lang="bash"> | |||
nano test-smtp.sh | nano test-smtp.sh | ||
</syntaxhighlight> | |||
محتوای زیر را در آن قرار دهید: | محتوای زیر را در آن قرار دهید: | ||
<syntaxhighlight lang="bash"> | |||
#!/bin/bash | #!/bin/bash | ||
# test-smtp.sh — بررسی اتصال به پورتهای میلسرور | # test-smtp.sh — بررسی اتصال به پورتهای میلسرور | ||
| Line 66: | Line 54: | ||
# پورتهای استاندارد میل؛ میتوانید با آرگومان دوم لیست سفارشی بدهید | # پورتهای استاندارد میل؛ میتوانید با آرگومان دوم لیست سفارشی بدهید | ||
PORTS="${2:-25 465 587 110 995 143 993}" | PORTS="${2:-25 465 587 110 995 143 993}" | ||
# یافتن آدرس IP دامنه | |||
IP=$(getent hosts "$SERVER" | awk '{print $1}' | head -n1) | |||
[ -z "$IP" ] && IP="(resolve failed)" | |||
declare -A NAMES=( | declare -A NAMES=( | ||
| Line 77: | Line 69: | ||
) | ) | ||
echo "=== Testing mail server: $SERVER ===" | echo "=== Testing mail server: $SERVER ($IP) ===" | ||
echo "Port Service Status" | echo "Port Service Status" | ||
echo "-----------------------------------" | echo "-----------------------------------" | ||
| Line 89: | Line 81: | ||
printf "%-10s %-16s %s\n" "$PORT" "${NAMES[$PORT]:-Unknown}" "$STATUS" | printf "%-10s %-16s %s\n" "$PORT" "${NAMES[$PORT]:-Unknown}" "$STATUS" | ||
done | done | ||
</syntaxhighlight> | |||
فایل را اجرایی کنید: | فایل را اجرایی کنید: | ||
<syntaxhighlight lang="bash"> | |||
chmod +x test-smtp.sh | chmod +x test-smtp.sh | ||
</syntaxhighlight> | |||
=== نحوه استفاده === | |||
<syntaxhighlight lang="bash"> | |||
# تست همهٔ پورتهای استاندارد | # تست همهٔ پورتهای استاندارد | ||
./test-smtp.sh mail.example.com | ./test-smtp.sh mail.example.com | ||
| Line 108: | Line 99: | ||
# اسکن یک بازهٔ پورت | # اسکن یک بازهٔ پورت | ||
./test-smtp.sh mail.example.com "$(seq 1 100)" | ./test-smtp.sh mail.example.com "$(seq 1 100)" | ||
</syntaxhighlight> | |||
=== خروجی نمونه === | |||
<pre> | |||
=== Testing mail server: mail.example.com (192.0.2.10) === | |||
=== Testing mail server: mail.example.com === | |||
Port Service Status | Port Service Status | ||
----------------------------------- | ----------------------------------- | ||
| Line 123: | Line 113: | ||
143 IMAP OPEN | 143 IMAP OPEN | ||
993 IMAPS OPEN | 993 IMAPS OPEN | ||
</pre> | |||
> | |||
{{Note|آدرس IP در پرانتز کنار نام سرور نمایش داده میشود. اگر resolve ناموفق باشد، عبارت <code>(resolve failed)</code> چاپ میشود.}} | |||
{{Note|این اسکریپت فقط اتصال TCP را بررسی میکند و پروتکل (مثلاً پاسخ SMTP به <code>EHLO</code>) را تست نمیکند. برای تست کامل پروتکل از روش دوم (swaks) استفاده کنید.}} | |||
{{Warning|در صورت بسته بودن پورت، وضعیت <code>CLOSED/FILTERED</code> نشان داده میشود. تفاوت بین «بسته» و «فیلترشده» با این روش قابل تشخیص نیست.}} | |||
== روش دوم: ابزار swaks == | |||
'''swaks''' (SMTP Swiss Army Knife) یک ابزار خط فرمان قدرتمند برای تست کامل و عیبیابی سرورهای SMTP است. با آن میتوانید ایمیل تستی بفرستید، احراز هویت را بررسی کنید، TLS را تست کنید و جزئیات کامل گفتگو با سرور را ببینید. | |||
=== نصب === | |||
<syntaxhighlight lang="bash"> | |||
sudo apt update | sudo apt update | ||
sudo apt install swaks | sudo apt install swaks | ||
</syntaxhighlight> | |||
بررسی نصب: | بررسی نصب: | ||
<syntaxhighlight lang="bash"> | |||
swaks --version | swaks --version | ||
</syntaxhighlight> | |||
=== استفاده پایه === | |||
سادهترین شکل — ارسال یک ایمیل تستی به سرور: | سادهترین شکل — ارسال یک ایمیل تستی به سرور: | ||
<syntaxhighlight lang="bash"> | |||
swaks --to recipient@example.com --server mail.example.com | swaks --to recipient@example.com --server mail.example.com | ||
</syntaxhighlight> | |||
{{Note|در صورت عدم تعیین فرستنده، swaks بهصورت پیشفرض از کاربر جاری سیستم استفاده میکند. با <code>--from</code> میتوانید آن را مشخص کنید.}} | |||
=== مثالهای پرکاربرد === | |||
'''۱. ارسال ایمیل تستی کامل با احراز هویت و TLS (پورت ۵۸۷):''' | |||
<syntaxhighlight lang="bash"> | |||
swaks \ | swaks \ | ||
--from sender@example.com \ | --from sender@example.com \ | ||
| Line 172: | Line 158: | ||
--auth-user sender@example.com \ | --auth-user sender@example.com \ | ||
--auth-password 'YourPassword' | --auth-password 'YourPassword' | ||
</syntaxhighlight> | |||
'''۲. تست فقط اتصال و گفتگوی اولیه (بدون ارسال واقعی):''' | |||
<syntaxhighlight lang="bash"> | |||
swaks --server mail.example.com --quit-after EHLO | swaks --server mail.example.com --quit-after EHLO | ||
</syntaxhighlight> | |||
'''۳. نمایش جزئیات کامل گفتگو (مفید برای عیبیابی):''' | |||
<syntaxhighlight lang="bash"> | |||
swaks --to test@example.com --server mail.example.com -v | swaks --to test@example.com --server mail.example.com -v | ||
</syntaxhighlight> | |||
'''۴. تست سرور بدون رمزنگاری (پورت ۲۵):''' | |||
<syntaxhighlight lang="bash"> | |||
swaks --to test@example.com --server mail.example.com --port 25 --protocol SMTP | swaks --to test@example.com --server mail.example.com --port 25 --protocol SMTP | ||
</syntaxhighlight> | |||
'''۵. تست SSL مستقیم (پورت ۴۶۵):''' | |||
<syntaxhighlight lang="bash"> | |||
swaks --to test@example.com --server mail.example.com --port 465 --tls | swaks --to test@example.com --server mail.example.com --port 465 --tls | ||
</syntaxhighlight> | |||
'''۶. ارسال ایمیل با محتوای سفارشی:''' | |||
<syntaxhighlight lang="bash"> | |||
swaks \ | swaks \ | ||
--to test@example.com \ | --to test@example.com \ | ||
| Line 206: | Line 192: | ||
--header "Subject: Test Mail" \ | --header "Subject: Test Mail" \ | ||
--body "This is a test email sent by swaks." | --body "This is a test email sent by swaks." | ||
</syntaxhighlight> | |||
=== خروجی نمونه === | |||
<pre> | |||
=== Trying mail.example.com:587... | === Trying mail.example.com:587... | ||
=== Connected to mail.example.com. | === Connected to mail.example.com. | ||
| Line 228: | Line 213: | ||
<- 221 2.0.0 Bye | <- 221 2.0.0 Bye | ||
=== Connection closed with remote host. | === Connection closed with remote host. | ||
</pre> | |||
> | |||
{{Note|کدهای پاسخ SMTP را بشناسید: <code>250</code> یعنی موفق، <code>550</code> یعنی گیرنده رد شد، <code>535</code> یعنی احراز هویت ناموفق، <code>554</code> یعنی تراکنش رد شد.}} | |||
| | == مقایسه دو روش == | ||
|-- | {| class="wikitable" style="width:100%;" | ||
| | ! ویژگی !! test-smtp.sh !! swaks | ||
| | |- | ||
| | | نیاز به نصب || خیر || بله (<code>apt install swaks</code>) | ||
| | |- | ||
| | | تست اتصال TCP به چند پورت || بله || فقط یک پورت در هر بار | ||
| | |- | ||
| تست کامل پروتکل SMTP || خیر || بله | |||
|- | |||
| ارسال ایمیل واقعی || خیر || بله | |||
|- | |||
| تست احراز هویت (AUTH) || خیر || بله | |||
|- | |||
| تست TLS/STARTTLS || خیر || بله | |||
|- | |||
| خروجی جزئیات گفتگو || خیر || بله (<code>-v</code>) | |||
|- | |||
| مناسب برای || بررسی سریع باز بودن پورتها || عیبیابی کامل و تست ارسال | |||
|} | |||
- | {{Tip|برای بررسی سریع باز بودن همهٔ پورتها از <code>test-smtp.sh</code> و برای عیبیابی عمیق و تست ارسال واقعی از <code>swaks</code> استفاده کنید.}} | ||
== عیبیابی == | |||
{| class="wikitable" style="width:100%;" | |||
! مشکل !! راهحل | |||
|- | |||
| همهٔ پورتها CLOSED هستند || فایروال سمت سرور (مثلاً <code>ufw</code>) یا ISP را بررسی کنید: <code>sudo ufw status</code> | |||
|- | |||
| نام سرور resolve نمیشود || تست DNS: <code>dig mail.example.com</code> یا <code>nslookup mail.example.com</code> | |||
|- | |||
| خطای احراز هویت (۵۳۵) || نام کاربری/رمز عبور را بررسی کنید؛ در Gmail باید از App Password استفاده کنید | |||
|- | |||
| خطای TLS || مطمئن شوید پورت درست است؛ پورت ۴۶۵ برای SSL مستقیم و ۵۸۷ برای STARTTLS است | |||
|- | |||
| پاسخ <code>550</code> هنگام ارسال || گیرنده یا دامنهٔ فرستنده تأیید نشده؛ SPF/DKIM سرور را بررسی کنید | |||
|- | |||
| <code>Connection timed out</code> || فایروال کلاینت یا سرور؛ دسترسی به پورت خروجی را تست کنید | |||
|} | |||
== منابع == | |||
* [https://github.com/jetmore/swaks مستندات رسمی swaks] | |||
* [https://help.ubuntu.com/community/AptGet/Howto راهنمای Ubuntu برای نصب پکیجها] | |||
* [https://en.wikipedia.org/wiki/SMTP صفحهٔ SMTP در ویکیپدیا] | |||
Latest revision as of 11:54, 16 August 2026
این صفحه راهنمای تست اتصال به میلسرور (SMTP/IMAP/POP3) در Ubuntu است. دو روش در اینجا آموزش داده میشود:
- اسکریپت سبک test-smtp.sh (بدون نیاز به نصب ابزار اضافه)
- ابزار قدرتمند swaks (SMTP Swiss Army Knife)
پیشنیازها
- سیستمعامل Ubuntu (نسخه ۲۰.۰۴ یا جدیدتر توصیه میشود)
- دسترسی کاربر با مجوز
sudo - نام میزبان یا آدرس IP میلسرور مقصد
- باز بودن پورتهای خروجی در فایروال سمت کلاینت (در صورت وجود)
| پورت | سرویس | پروتکل | رمزنگاری |
|---|---|---|---|
| ۲۵ | SMTP | ارسال | بدون رمزنگاری (یا STARTTLS) |
| ۴۶۵ | SMTPS | ارسال | SSL/TLS |
| ۵۸۷ | Submission | ارسال | STARTTLS |
| ۱۱۰ | POP3 | دریافت | بدون رمزنگاری |
| ۹۹۵ | POP3S | دریافت | SSL/TLS |
| ۱۴۳ | IMAP | دریافت | بدون رمزنگاری |
| ۹۹۳ | IMAPS | دریافت | SSL/TLS |
روش اول: اسکریپت test-smtp.sh
این اسکریپت با استفاده از قابلیت /dev/tcp هستهٔ Bash، اتصال TCP به همهٔ پورتهای استاندارد میلسرور را بررسی میکند. آدرس IP دامنه نیز بهصورت خودکار resolve و در خروجی نمایش داده میشود. نیاز به نصب هیچ ابزار اضافهای ندارد.
نصب
فایل را با نام test-smtp.sh ایجاد کنید:
nano test-smtp.sh
محتوای زیر را در آن قرار دهید:
#!/bin/bash
# test-smtp.sh — بررسی اتصال به پورتهای میلسرور
# استفاده: ./test-smtp.sh [سرور] [لیست پورتها]
SERVER="${1:-smtp.example.com}"
# پورتهای استاندارد میل؛ میتوانید با آرگومان دوم لیست سفارشی بدهید
PORTS="${2:-25 465 587 110 995 143 993}"
# یافتن آدرس IP دامنه
IP=$(getent hosts "$SERVER" | awk '{print $1}' | head -n1)
[ -z "$IP" ] && IP="(resolve failed)"
declare -A NAMES=(
[25]="SMTP"
[465]="SMTPS"
[587]="Submission"
[110]="POP3"
[995]="POP3S"
[143]="IMAP"
[993]="IMAPS"
)
echo "=== Testing mail server: $SERVER ($IP) ==="
echo "Port Service Status"
echo "-----------------------------------"
for PORT in $PORTS; do
if timeout 5 bash -c "echo > /dev/tcp/$SERVER/$PORT" 2>/dev/null; then
STATUS="OPEN"
else
STATUS="CLOSED/FILTERED"
fi
printf "%-10s %-16s %s\n" "$PORT" "${NAMES[$PORT]:-Unknown}" "$STATUS"
done
فایل را اجرایی کنید:
chmod +x test-smtp.sh
نحوه استفاده
# تست همهٔ پورتهای استاندارد
./test-smtp.sh mail.example.com
# تست پورتهای دلخواه (فقط SMTP)
./test-smtp.sh mail.example.com "25 465 587"
# اسکن یک بازهٔ پورت
./test-smtp.sh mail.example.com "$(seq 1 100)"
خروجی نمونه
=== Testing mail server: mail.example.com (192.0.2.10) === Port Service Status ----------------------------------- 25 SMTP OPEN 465 SMTPS OPEN 587 Submission CLOSED/FILTERED 110 POP3 CLOSED/FILTERED 995 POP3S CLOSED/FILTERED 143 IMAP OPEN 993 IMAPS OPEN
روش دوم: ابزار swaks
swaks (SMTP Swiss Army Knife) یک ابزار خط فرمان قدرتمند برای تست کامل و عیبیابی سرورهای SMTP است. با آن میتوانید ایمیل تستی بفرستید، احراز هویت را بررسی کنید، TLS را تست کنید و جزئیات کامل گفتگو با سرور را ببینید.
نصب
sudo apt update
sudo apt install swaks
بررسی نصب:
swaks --version
استفاده پایه
سادهترین شکل — ارسال یک ایمیل تستی به سرور:
swaks --to recipient@example.com --server mail.example.com
مثالهای پرکاربرد
۱. ارسال ایمیل تستی کامل با احراز هویت و TLS (پورت ۵۸۷):
swaks \
--from sender@example.com \
--to recipient@example.com \
--server mail.example.com \
--port 587 \
--tls \
--auth LOGIN \
--auth-user sender@example.com \
--auth-password 'YourPassword'
۲. تست فقط اتصال و گفتگوی اولیه (بدون ارسال واقعی):
swaks --server mail.example.com --quit-after EHLO
۳. نمایش جزئیات کامل گفتگو (مفید برای عیبیابی):
swaks --to test@example.com --server mail.example.com -v
۴. تست سرور بدون رمزنگاری (پورت ۲۵):
swaks --to test@example.com --server mail.example.com --port 25 --protocol SMTP
۵. تست SSL مستقیم (پورت ۴۶۵):
swaks --to test@example.com --server mail.example.com --port 465 --tls
۶. ارسال ایمیل با محتوای سفارشی:
swaks \
--to test@example.com \
--server mail.example.com \
--header "Subject: Test Mail" \
--body "This is a test email sent by swaks."
خروجی نمونه
=== Trying mail.example.com:587... === Connected to mail.example.com. <- 220 mail.example.com ESMTP Postfix -> EHLO localhost <- 250-mail.example.com <- 250-PIPELINING <- 250-SIZE 10240000 <- 250-STARTTLS <- 250-AUTH PLAIN LOGIN <- 250-ENHANCEDSTATUSCODES <- 250 8BITMIME -> STARTTLS <- 220 2.0.0 Ready to start TLS ... -> QUIT <- 221 2.0.0 Bye === Connection closed with remote host.
مقایسه دو روش
| ویژگی | test-smtp.sh | swaks |
|---|---|---|
| نیاز به نصب | خیر | بله (apt install swaks)
|
| تست اتصال TCP به چند پورت | بله | فقط یک پورت در هر بار |
| تست کامل پروتکل SMTP | خیر | بله |
| ارسال ایمیل واقعی | خیر | بله |
| تست احراز هویت (AUTH) | خیر | بله |
| تست TLS/STARTTLS | خیر | بله |
| خروجی جزئیات گفتگو | خیر | بله (-v)
|
| مناسب برای | بررسی سریع باز بودن پورتها | عیبیابی کامل و تست ارسال |
عیبیابی
| مشکل | راهحل |
|---|---|
| همهٔ پورتها CLOSED هستند | فایروال سمت سرور (مثلاً ufw) یا ISP را بررسی کنید: sudo ufw status
|
| نام سرور resolve نمیشود | تست DNS: dig mail.example.com یا nslookup mail.example.com
|
| خطای احراز هویت (۵۳۵) | نام کاربری/رمز عبور را بررسی کنید؛ در Gmail باید از App Password استفاده کنید |
| خطای TLS | مطمئن شوید پورت درست است؛ پورت ۴۶۵ برای SSL مستقیم و ۵۸۷ برای STARTTLS است |
پاسخ 550 هنگام ارسال |
گیرنده یا دامنهٔ فرستنده تأیید نشده؛ SPF/DKIM سرور را بررسی کنید |
Connection timed out |
فایروال کلاینت یا سرور؛ دسترسی به پورت خروجی را تست کنید |