Mail Server Test ubuntu: Difference between revisions

From wiki karavi
Jump to navigation Jump to search
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
# تست اتصال به میل‌سرور در Ubuntu
__TOC__


> **این صفحه بخشی از مستندات ابزارهای خط فرمان است.** دو روش برای تست اتصال به میل‌سرور (SMTP/IMAP/POP3) در Ubuntu توضیح داده شده است:
این صفحه راهنمای تست اتصال به میل‌سرور (SMTP/IMAP/POP3) در Ubuntu است. دو روش در اینجا آموزش داده می‌شود:
> ۱. اسکریپت سبک **test-smtp.sh** (بدون نیاز به نصب ابزار اضافه)
> ۲. ابزار قدرتمند **swaks** (SMTP Swiss Army Knife)


---
# اسکریپت سبک '''test-smtp.sh''' (بدون نیاز به نصب ابزار اضافه)
# ابزار قدرتمند '''swaks''' (SMTP Swiss Army Knife)


## پیش‌نیازها
{{Note|این صفحه بخشی از مستندات ابزارهای خط فرمان است.}}


- سیستم‌عامل **Ubuntu** (نسخه ۲۰.۰۴ یا جدیدتر توصیه می‌شود)
== پیش‌نیازها ==
- دسترسی کاربر با مجوز `sudo`
* سیستم‌عامل '''Ubuntu''' (نسخه ۲۰.۰۴ یا جدیدتر توصیه می‌شود)
- نام میزبان یا آدرس IP میل‌سرور مقصد
* دسترسی کاربر با مجوز <code>sudo</code>
- باز بودن پورت‌های خروجی در فایروال سمت کلاینت (در صورت وجود)
* نام میزبان یا آدرس IP میل‌سرور مقصد
* باز بودن پورت‌های خروجی در فایروال سمت کلاینت (در صورت وجود)


<table style="border-collapse:collapse; width:100%">
{| class="wikitable" style="width:100%;"
  <tr>
|+ پورت‌های استاندارد میل
    <th style="border:1px solid #999; padding:6px 10px; background:#f0f0f0">پورت</th>
! پورت !! سرویس !! پروتکل !! رمزنگاری
    <th style="border:1px solid #999; padding:6px 10px; background:#f0f0f0">سرویس</th>
|-
    <th style="border:1px solid #999; padding:6px 10px; background:#f0f0f0">پروتکل</th>
| ۲۵ || SMTP || ارسال || بدون رمزنگاری (یا STARTTLS)
    <th style="border:1px solid #999; padding:6px 10px; background:#f0f0f0">رمزنگاری</th>
|-
  </tr>
| ۴۶۵ || SMTPS || ارسال || SSL/TLS
  <tr><td style="border:1px solid #999; padding:6px 10px">۲۵</td><td style="border:1px solid #999; padding:6px 10px">SMTP</td><td style="border:1px solid #999; padding:6px 10px">ارسال</td><td style="border:1px solid #999; padding:6px 10px">بدون رمزنگاری (یا STARTTLS)</td></tr>
|-
  <tr><td style="border:1px solid #999; padding:6px 10px">۴۶۵</td><td style="border:1px solid #999; padding:6px 10px">SMTPS</td><td style="border:1px solid #999; padding:6px 10px">ارسال</td><td style="border:1px solid #999; padding:6px 10px">SSL/TLS</td></tr>
| ۵۸۷ || Submission || ارسال || STARTTLS
  <tr><td style="border:1px solid #999; padding:6px 10px">۵۸۷</td><td style="border:1px solid #999; padding:6px 10px">Submission</td><td style="border:1px solid #999; padding:6px 10px">ارسال</td><td style="border:1px solid #999; padding:6px 10px">STARTTLS</td></tr>
|-
  <tr><td style="border:1px solid #999; padding:6px 10px">۱۱۰</td><td style="border:1px solid #999; padding:6px 10px">POP3</td><td style="border:1px solid #999; padding:6px 10px">دریافت</td><td style="border:1px solid #999; padding:6px 10px">بدون رمزنگاری</td></tr>
| ۱۱۰ || POP3 || دریافت || بدون رمزنگاری
  <tr><td style="border:1px solid #999; padding:6px 10px">۹۹۵</td><td style="border:1px solid #999; padding:6px 10px">POP3S</td><td style="border:1px solid #999; padding:6px 10px">دریافت</td><td style="border:1px solid #999; padding:6px 10px">SSL/TLS</td></tr>
|-
  <tr><td style="border:1px solid #999; padding:6px 10px">۱۴۳</td><td style="border:1px solid #999; padding:6px 10px">IMAP</td><td style="border:1px solid #999; padding:6px 10px">دریافت</td><td style="border:1px solid #999; padding:6px 10px">بدون رمزنگاری</td></tr>
| ۹۹۵ || POP3S || دریافت || SSL/TLS
  <tr><td style="border:1px solid #999; padding:6px 10px">۹۹۳</td><td style="border:1px solid #999; padding:6px 10px">IMAPS</td><td style="border:1px solid #999; padding:6px 10px">دریافت</td><td style="border:1px solid #999; padding:6px 10px">SSL/TLS</td></tr>
|-
</table>
| ۱۴۳ || IMAP || دریافت || بدون رمزنگاری
|-
| ۹۹۳ || IMAPS || دریافت || SSL/TLS
|}


---
== روش اول: اسکریپت test-smtp.sh ==
این اسکریپت با استفاده از قابلیت <code>/dev/tcp</code> هستهٔ Bash، اتصال TCP به همهٔ پورت‌های استاندارد میل‌سرور را بررسی می‌کند. آدرس IP دامنه نیز به‌صورت خودکار resolve و در خروجی نمایش داده می‌شود. '''نیاز به نصب هیچ ابزار اضافه‌ای ندارد.'''


## روش اول: اسکریپت test-smtp.sh
=== نصب ===
فایل را با نام <code>test-smtp.sh</code> ایجاد کنید:


این اسکریپت با استفاده از قابلیت `/dev/tcp` هستهٔ Bash، اتصال TCP به همهٔ پورت‌های استاندارد میل‌سرور را بررسی می‌کند. **نیاز به نصب هیچ ابزار اضافه‌ای ندارد.**
<syntaxhighlight lang="bash">
 
### نصب
 
فایل را با نام `test-smtp.sh` ایجاد کنید:
 
```bash
nano test-smtp.sh
nano test-smtp.sh
```
</syntaxhighlight>


محتوای زیر را در آن قرار دهید:
محتوای زیر را در آن قرار دهید:


```bash
<syntaxhighlight lang="bash">
#!/bin/bash
#!/bin/bash
# test-smtp.sh — بررسی اتصال به پورت‌های میل‌سرور
# test-smtp.sh — بررسی اتصال به پورت‌های میل‌سرور
Line 55: 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 66: Line 69:
)
)


echo "=== Testing mail server: $SERVER ==="
echo "=== Testing mail server: $SERVER ($IP) ==="
echo "Port        Service          Status"
echo "Port        Service          Status"
echo "-----------------------------------"
echo "-----------------------------------"
Line 78: 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>


فایل را اجرایی کنید:
فایل را اجرایی کنید:


```bash
<syntaxhighlight lang="bash">
chmod +x test-smtp.sh
chmod +x test-smtp.sh
```
</syntaxhighlight>


### نحوه استفاده
=== نحوه استفاده ===
 
<syntaxhighlight lang="bash">
```bash
# تست همهٔ پورت‌های استاندارد
# تست همهٔ پورت‌های استاندارد
./test-smtp.sh mail.example.com
./test-smtp.sh mail.example.com
Line 97: 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 112: Line 113:
143        IMAP            OPEN
143        IMAP            OPEN
993        IMAPS            OPEN
993        IMAPS            OPEN
```
</pre>
 
> **نکته:** این اسکریپت فقط اتصال TCP را بررسی می‌کند و پروتکل (مثلاً پاسخ SMTP به `EHLO`) را تست نمی‌کند. برای تست کامل پروتکل از روش دوم (swaks) استفاده کنید.
 
> **هشدار:** در صورت بسته بودن پورت، وضعیت `CLOSED/FILTERED` نشان داده می‌شود. تفاوت بین «بسته» و «فیلترشده» با این روش قابل تشخیص نیست.


---
{{Note|آدرس IP در پرانتز کنار نام سرور نمایش داده می‌شود. اگر resolve ناموفق باشد، عبارت <code>(resolve failed)</code> چاپ می‌شود.}}


## روش دوم: ابزار swaks
{{Note|این اسکریپت فقط اتصال TCP را بررسی می‌کند و پروتکل (مثلاً پاسخ SMTP به <code>EHLO</code>) را تست نمی‌کند. برای تست کامل پروتکل از روش دوم (swaks) استفاده کنید.}}


**swaks** (SMTP Swiss Army Knife) یک ابزار خط فرمان قدرتمند برای تست کامل و عیب‌یابی سرورهای SMTP است. با آن می‌توانید ایمیل تستی بفرستید، احراز هویت را بررسی کنید، TLS را تست کنید و جزئیات کامل گفتگو با سرور را ببینید.
{{Warning|در صورت بسته بودن پورت، وضعیت <code>CLOSED/FILTERED</code> نشان داده می‌شود. تفاوت بین «بسته» و «فیلترشده» با این روش قابل تشخیص نیست.}}


### نصب
== روش دوم: ابزار swaks ==
'''swaks''' (SMTP Swiss Army Knife) یک ابزار خط فرمان قدرتمند برای تست کامل و عیب‌یابی سرورهای SMTP است. با آن می‌توانید ایمیل تستی بفرستید، احراز هویت را بررسی کنید، TLS را تست کنید و جزئیات کامل گفتگو با سرور را ببینید.


```bash
=== نصب ===
<syntaxhighlight lang="bash">
sudo apt update
sudo apt update
sudo apt install swaks
sudo apt install swaks
```
</syntaxhighlight>


بررسی نصب:
بررسی نصب:


```bash
<syntaxhighlight lang="bash">
swaks --version
swaks --version
```
</syntaxhighlight>
 
### استفاده پایه


=== استفاده پایه ===
ساده‌ترین شکل — ارسال یک ایمیل تستی به سرور:
ساده‌ترین شکل — ارسال یک ایمیل تستی به سرور:


```bash
<syntaxhighlight lang="bash">
swaks --to recipient@example.com --server mail.example.com
swaks --to recipient@example.com --server mail.example.com
```
</syntaxhighlight>


> **نکته:** در صورت عدم تعیین فرستنده، swaks به‌صورت پیش‌فرض از کاربر جاری سیستم استفاده می‌کند. با `--from` می‌توانید آن را مشخص کنید.
{{Note|در صورت عدم تعیین فرستنده، swaks به‌صورت پیش‌فرض از کاربر جاری سیستم استفاده می‌کند. با <code>--from</code> می‌توانید آن را مشخص کنید.}}


### مثال‌های پرکاربرد
=== مثال‌های پرکاربرد ===
'''۱. ارسال ایمیل تستی کامل با احراز هویت و TLS (پورت ۵۸۷):'''


**۱. ارسال ایمیل تستی کامل با احراز هویت و TLS (پورت ۵۸۷):**
<syntaxhighlight lang="bash">
 
```bash
swaks \
swaks \
   --from sender@example.com \
   --from sender@example.com \
Line 161: Line 158:
   --auth-user sender@example.com \
   --auth-user sender@example.com \
   --auth-password 'YourPassword'
   --auth-password 'YourPassword'
```
</syntaxhighlight>


**۲. تست فقط اتصال و گفتگوی اولیه (بدون ارسال واقعی):**
'''۲. تست فقط اتصال و گفتگوی اولیه (بدون ارسال واقعی):'''


```bash
<syntaxhighlight lang="bash">
swaks --server mail.example.com --quit-after EHLO
swaks --server mail.example.com --quit-after EHLO
```
</syntaxhighlight>


**۳. نمایش جزئیات کامل گفتگو (مفید برای عیب‌یابی):**
'''۳. نمایش جزئیات کامل گفتگو (مفید برای عیب‌یابی):'''


```bash
<syntaxhighlight lang="bash">
swaks --to test@example.com --server mail.example.com -v
swaks --to test@example.com --server mail.example.com -v
```
</syntaxhighlight>


**۴. تست سرور بدون رمزنگاری (پورت ۲۵):**
'''۴. تست سرور بدون رمزنگاری (پورت ۲۵):'''


```bash
<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 مستقیم (پورت ۴۶۵):**
'''۵. تست SSL مستقیم (پورت ۴۶۵):'''


```bash
<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>


**۶. ارسال ایمیل با محتوای سفارشی:**
'''۶. ارسال ایمیل با محتوای سفارشی:'''


```bash
<syntaxhighlight lang="bash">
swaks \
swaks \
   --to test@example.com \
   --to test@example.com \
Line 195: 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 217: Line 213:
<-  221 2.0.0 Bye
<-  221 2.0.0 Bye
=== Connection closed with remote host.
=== Connection closed with remote host.
```
</pre>
 
> **نکته:** کدهای پاسخ SMTP را بشناسید: `250` یعنی موفق، `550` یعنی گیرنده رد شد، `535` یعنی احراز هویت ناموفق، `554` یعنی تراکنش رد شد.
 
---
 
## مقایسه دو روش
 
<table style="border-collapse:collapse; width:100%">
  <tr>
    <th style="border:1px solid #999; padding:6px 10px; background:#f0f0f0">ویژگی</th>
    <th style="border:1px solid #999; padding:6px 10px; background:#f0f0f0">test-smtp.sh</th>
    <th style="border:1px solid #999; padding:6px 10px; background:#f0f0f0">swaks</th>
  </tr>
  <tr><td style="border:1px solid #999; padding:6px 10px">نیاز به نصب</td><td style="border:1px solid #999; padding:6px 10px">خیر</td><td style="border:1px solid #999; padding:6px 10px">بله (<code>apt install swaks</code>)</td></tr>
  <tr><td style="border:1px solid #999; padding:6px 10px">تست اتصال TCP به چند پورت</td><td style="border:1px solid #999; padding:6px 10px">بله</td><td style="border:1px solid #999; padding:6px 10px">فقط یک پورت در هر بار</td></tr>
  <tr><td style="border:1px solid #999; padding:6px 10px">تست کامل پروتکل SMTP</td><td style="border:1px solid #999; padding:6px 10px">خیر</td><td style="border:1px solid #999; padding:6px 10px">بله</td></tr>
  <tr><td style="border:1px solid #999; padding:6px 10px">ارسال ایمیل واقعی</td><td style="border:1px solid #999; padding:6px 10px">خیر</td><td style="border:1px solid #999; padding:6px 10px">بله</td></tr>
  <tr><td style="border:1px solid #999; padding:6px 10px">تست احراز هویت (AUTH)</td><td style="border:1px solid #999; padding:6px 10px">خیر</td><td style="border:1px solid #999; padding:6px 10px">بله</td></tr>
  <tr><td style="border:1px solid #999; padding:6px 10px">تست TLS/STARTTLS</td><td style="border:1px solid #999; padding:6px 10px">خیر</td><td style="border:1px solid #999; padding:6px 10px">بله</td></tr>
  <tr><td style="border:1px solid #999; padding:6px 10px">خروجی جزئیات گفتگو</td><td style="border:1px solid #999; padding:6px 10px">خیر</td><td style="border:1px solid #999; padding:6px 10px">بله (<code>-v</code>)</td></tr>
  <tr><td style="border:1px solid #999; padding:6px 10px">مناسب برای</td><td style="border:1px solid #999; padding:6px 10px">بررسی سریع باز بودن پورت‌ها</td><td style="border:1px solid #999; padding:6px 10px">عیب‌یابی کامل و تست ارسال</td></tr>
</table>
 
**پیشنهاد:** برای بررسی سریع باز بودن همهٔ پورت‌ها از `test-smtp.sh` و برای عیب‌یابی عمیق و تست ارسال واقعی از `swaks` استفاده کنید.
 
---


## عیب‌یابی
{{Note|کدهای پاسخ SMTP را بشناسید: <code>250</code> یعنی موفق، <code>550</code> یعنی گیرنده رد شد، <code>535</code> یعنی احراز هویت ناموفق، <code>554</code> یعنی تراکنش رد شد.}}


<table style="border-collapse:collapse; width:100%">
== مقایسه دو روش ==
  <tr>
{| class="wikitable" style="width:100%;"
    <th style="border:1px solid #999; padding:6px 10px; background:#f0f0f0">مشکل</th>
! ویژگی !! test-smtp.sh !! swaks
    <th style="border:1px solid #999; padding:6px 10px; background:#f0f0f0">راه‌حل</th>
|-
  </tr>
| نیاز به نصب || خیر || بله (<code>apt install swaks</code>)
  <tr><td style="border:1px solid #999; padding:6px 10px">همهٔ پورت‌ها CLOSED هستند</td><td style="border:1px solid #999; padding:6px 10px">فایروال سمت سرور (مثلاً <code>ufw</code>) یا ISP را بررسی کنید: <code>sudo ufw status</code></td></tr>
|-
  <tr><td style="border:1px solid #999; padding:6px 10px">نام سرور resolve نمی‌شود</td><td style="border:1px solid #999; padding:6px 10px">تست DNS: <code>dig mail.example.com</code> یا <code>nslookup mail.example.com</code></td></tr>
| تست اتصال TCP به چند پورت || بله || فقط یک پورت در هر بار
  <tr><td style="border:1px solid #999; padding:6px 10px">خطای احراز هویت (۵۳۵)</td><td style="border:1px solid #999; padding:6px 10px">نام کاربری/رمز عبور را بررسی کنید؛ در Gmail باید از App Password استفاده کنید</td></tr>
|-
  <tr><td style="border:1px solid #999; padding:6px 10px">خطای TLS</td><td style="border:1px solid #999; padding:6px 10px">مطمئن شوید پورت درست است؛ پورت ۴۶۵ برای SSL مستقیم و ۵۸۷ برای STARTTLS است</td></tr>
| تست کامل پروتکل SMTP || خیر || بله
  <tr><td style="border:1px solid #999; padding:6px 10px">پاسخ <code>550</code> هنگام ارسال</td><td style="border:1px solid #999; padding:6px 10px">گیرنده یا دامنهٔ فرستنده تأیید نشده؛ SPF/DKIM سرور را بررسی کنید</td></tr>
|-
  <tr><td style="border:1px solid #999; padding:6px 10px"><code>Connection timed out</code></td><td style="border:1px solid #999; padding:6px 10px">فایروال کلاینت یا سرور؛ دسترسی به پورت خروجی را تست کنید</td></tr>
| ارسال ایمیل واقعی || خیر || بله
</table>
|-
| تست احراز هویت (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> || فایروال کلاینت یا سرور؛ دسترسی به پورت خروجی را تست کنید
|}


- مستندات رسمی swaks: https://github.com/jetmore/swaks
== منابع ==
- راهنمای Ubuntu برای نصب پکیج‌ها: https://help.ubuntu.com/community/AptGet/Howto
* [https://github.com/jetmore/swaks مستندات رسمی swaks]
- صفحهٔ SMTP در ویکی‌پدیا: https://en.wikipedia.org/wiki/SMTP
* [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 است. دو روش در اینجا آموزش داده می‌شود:

  1. اسکریپت سبک test-smtp.sh (بدون نیاز به نصب ابزار اضافه)
  2. ابزار قدرتمند swaks (SMTP Swiss Army Knife)

Template:Note

پیش‌نیازها

  • سیستم‌عامل 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

Template:Note

Template:Note

Template:Warning

روش دوم: ابزار 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

Template:Note

مثال‌های پرکاربرد

۱. ارسال ایمیل تستی کامل با احراز هویت و 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.

Template:Note

مقایسه دو روش

ویژگی test-smtp.sh swaks
نیاز به نصب خیر بله (apt install swaks)
تست اتصال TCP به چند پورت بله فقط یک پورت در هر بار
تست کامل پروتکل SMTP خیر بله
ارسال ایمیل واقعی خیر بله
تست احراز هویت (AUTH) خیر بله
تست TLS/STARTTLS خیر بله
خروجی جزئیات گفتگو خیر بله (-v)
مناسب برای بررسی سریع باز بودن پورت‌ها عیب‌یابی کامل و تست ارسال

Template:Tip

عیب‌یابی

مشکل راه‌حل
همهٔ پورت‌ها 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 فایروال کلاینت یا سرور؛ دسترسی به پورت خروجی را تست کنید

منابع