Mail Server Test ubuntu
- تست اتصال به میلسرور در Ubuntu
> **این صفحه بخشی از مستندات ابزارهای خط فرمان است.** دو روش برای تست اتصال به میلسرور (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 به همهٔ پورتهای استاندارد میلسرور را بررسی میکند. **نیاز به نصب هیچ ابزار اضافهای ندارد.**
- نصب
فایل را با نام `test-smtp.sh` ایجاد کنید:
```bash nano test-smtp.sh ```
محتوای زیر را در آن قرار دهید:
```bash
- !/bin/bash
- test-smtp.sh — بررسی اتصال به پورتهای میلسرور
- استفاده: ./test-smtp.sh [سرور] [لیست پورتها]
SERVER="${1:-smtp.example.com}"
- پورتهای استاندارد میل؛ میتوانید با آرگومان دوم لیست سفارشی بدهید
PORTS="${2:-25 465 587 110 995 143 993}"
declare -A NAMES=(
[25]="SMTP" [465]="SMTPS" [587]="Submission" [110]="POP3" [995]="POP3S" [143]="IMAP" [993]="IMAPS"
)
echo "=== Testing mail server: $SERVER ===" 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 ```
فایل را اجرایی کنید:
```bash chmod +x test-smtp.sh ```
- نحوه استفاده
```bash
- تست همهٔ پورتهای استاندارد
./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
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 ```
> **نکته:** این اسکریپت فقط اتصال TCP را بررسی میکند و پروتکل (مثلاً پاسخ SMTP به `EHLO`) را تست نمیکند. برای تست کامل پروتکل از روش دوم (swaks) استفاده کنید.
> **هشدار:** در صورت بسته بودن پورت، وضعیت `CLOSED/FILTERED` نشان داده میشود. تفاوت بین «بسته» و «فیلترشده» با این روش قابل تشخیص نیست.
---
- روش دوم: ابزار swaks
- swaks** (SMTP Swiss Army Knife) یک ابزار خط فرمان قدرتمند برای تست کامل و عیبیابی سرورهای SMTP است. با آن میتوانید ایمیل تستی بفرستید، احراز هویت را بررسی کنید، TLS را تست کنید و جزئیات کامل گفتگو با سرور را ببینید.
- نصب
```bash sudo apt update sudo apt install swaks ```
بررسی نصب:
```bash swaks --version ```
- استفاده پایه
سادهترین شکل — ارسال یک ایمیل تستی به سرور:
```bash swaks --to recipient@example.com --server mail.example.com ```
> **نکته:** در صورت عدم تعیین فرستنده، swaks بهصورت پیشفرض از کاربر جاری سیستم استفاده میکند. با `--from` میتوانید آن را مشخص کنید.
- مثالهای پرکاربرد
- ۱. ارسال ایمیل تستی کامل با احراز هویت و TLS (پورت ۵۸۷):**
```bash 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'
```
- ۲. تست فقط اتصال و گفتگوی اولیه (بدون ارسال واقعی):**
```bash swaks --server mail.example.com --quit-after EHLO ```
- ۳. نمایش جزئیات کامل گفتگو (مفید برای عیبیابی):**
```bash swaks --to test@example.com --server mail.example.com -v ```
- ۴. تست سرور بدون رمزنگاری (پورت ۲۵):**
```bash swaks --to test@example.com --server mail.example.com --port 25 --protocol SMTP ```
- ۵. تست SSL مستقیم (پورت ۴۶۵):**
```bash swaks --to test@example.com --server mail.example.com --port 465 --tls ```
- ۶. ارسال ایمیل با محتوای سفارشی:**
```bash 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. ```
> **نکته:** کدهای پاسخ SMTP را بشناسید: `250` یعنی موفق، `550` یعنی گیرنده رد شد، `535` یعنی احراز هویت ناموفق، `554` یعنی تراکنش رد شد.
---
- مقایسه دو روش
| ویژگی | test-smtp.sh | swaks |
|---|---|---|
| نیاز به نصب | خیر | بله (apt install swaks) |
| تست اتصال TCP به چند پورت | بله | فقط یک پورت در هر بار |
| تست کامل پروتکل SMTP | خیر | بله |
| ارسال ایمیل واقعی | خیر | بله |
| تست احراز هویت (AUTH) | خیر | بله |
| تست TLS/STARTTLS | خیر | بله |
| خروجی جزئیات گفتگو | خیر | بله (-v) |
| مناسب برای | بررسی سریع باز بودن پورتها | عیبیابی کامل و تست ارسال |
- پیشنهاد:** برای بررسی سریع باز بودن همهٔ پورتها از `test-smtp.sh` و برای عیبیابی عمیق و تست ارسال واقعی از `swaks` استفاده کنید.
---
- عیبیابی
| مشکل | راهحل |
|---|---|
| همهٔ پورتها 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 | فایروال کلاینت یا سرور؛ دسترسی به پورت خروجی را تست کنید |
---
- منابع
- مستندات رسمی swaks: https://github.com/jetmore/swaks - راهنمای Ubuntu برای نصب پکیجها: https://help.ubuntu.com/community/AptGet/Howto - صفحهٔ SMTP در ویکیپدیا: https://en.wikipedia.org/wiki/SMTP