การตั้งค่า SMTP คือกระบวนการตั้งค่าเซิร์ฟเวอร์เมล (หรือไคลเอนต์อีเมล) เพื่อส่งข้อความได้อย่างถูกต้องโดยใช้โปรโตคอล Simple Mail Transfer Protocol ทำให้ถูกต้องแล้วอีเมลของคุณจะไปถึงกล่องจดหมายเข้า ทำให้ผิดพลาดแล้วคุณจะเผชิญกับความล้มเหลวในการส่ง ข้อผิดพลาดการตรวจสอบสิทธิ์ หรือข้อความที่เงียบ ๆ ไปอยู่ในโฟลเดอร์สแปม สิ่งสามอย่างที่คุณต้องทำให้ถูกต้องทุกครั้งคือพอร์ตที่ถูกต้อง วิธีการเข้ารหัสที่ถูกต้อง และข้อมูลประจำตัวการตรวจสอบสิทธิ์ที่ใช้งานได้ครับ
สารบัญ
SMTP ทำงานอย่างไรจริง ๆ
SMTP คือโปรโตคอลที่ไคลเอนต์อีเมลหรือแอปพลิเคชันของคุณใช้เพื่อส่งข้อความขาออกไปยังเซิร์ฟเวอร์เมล ซึ่งจะกำหนดเส้นทางไปยังผู้รับต่อไป มันจัดการเฉพาะด้านการส่งเท่านั้น การรับอีเมลจัดการโดยโปรโตคอลแยกต่างหาก: IMAP (สำหรับการซิงค์) หรือ POP3 (สำหรับการดาวน์โหลด) ครับ
เมื่อคุณกดปุ่ม "ส่ง" ไคลเอนต์ของคุณจะเปิดการเชื่อมต่อ TCP ไปยังเซิร์ฟเวอร์ SMTP ตรวจสอบสิทธิ์ส่งข้อความ และตัดการเชื่อมต่อ จากนั้นเซิร์ฟเวอร์จะพยายามส่งข้อความนั้นไปยังเซิร์ฟเวอร์เมลของผู้รับโดยใช้โปรโตคอลเดียวกัน โดยค้นหาระเบียน MX (Mail Exchange) DNS ของปลายทางเพื่อหาว่าจะส่งไปที่ไหน ครับ
SMTP ถูกกำหนดใน RFC 5321 ซึ่งแทนที่ RFC 2821 เดิม การเข้าใจข้อกำหนดจะช่วยเมื่อคุณต้องการแก้ไขการสนทนา SMTP ดิบหรือตั้งค่าเซิร์ฟเวอร์ตั้งแต่เริ่มต้น ครับ
อธิบายพอร์ต SMTP: 25, 465, และ 587
มีสามพอร์ตที่คุณจะพบเห็นในการตั้งค่า SMTP ใด ๆ แต่ละพอร์ตมีบทบาทเฉพาะ และการใช้พอร์ตที่ผิดเป็นหนึ่งในสาเหตุที่พบบ่อยที่สุดของความล้มเหลวในการส่งอีเมล ครับ
| พอร์ต | ชื่อ | การเข้ารหัส | การใช้งานทั่วไป |
|---|---|---|---|
| 25 | SMTP | ไม่มี (หรือ STARTTLS) | การส่งต่อเซิร์ฟเวอร์ถึงเซิร์ฟเวอร์ (MTA ถึง MTA) |
| 465 | SMTPS | SSL/TLS โดยปริยาย | การส่งข้อมูลไคลเอนต์แบบเดิม (แอปเก่า) |
| 587 | Submission | STARTTLS (TLS ที่ชัดแจ้ง) | การส่งอีเมลไคลเอนต์ที่ได้รับการตรวจสอบสิทธิ์ |
พอร์ต 25 กับ 587: ควรใช้อันไหน
พอร์ต 25 คือพอร์ต SMTP ดั้งเดิม ที่กำหนดไว้ย้อนกลับไปในปี 1982 มันถูกออกแบบมาสำหรับเซิร์ฟเวอร์เมลที่พูดคุยกัน ไม่ใช่สำหรับผู้ใช้ปลายทาง ISP และผู้ให้บริการคลาวด์ส่วนใหญ่บล็อกพอร์ต 25 ขาออกจาก IP ที่อยู่อาศัยและโฮสติ้งร่วมกันโดยเฉพาะเพื่อป้องกันสแปม หากคุณกำลังเรียกใช้แอปพลิเคชันที่ส่งอีเมล การพยายามใช้พอร์ต 25 จะล้มเหลวเกือบแน่นอน ครับ
พอร์ต 587 คือตัวเลือกที่ถูกต้องสำหรับการส่งอีเมลจากไคลเอนต์หรือแอปพลิเคชัน มันถูกกำหนดมาตรฐานใน RFC 6409 เป็นพอร์ต "การส่งข้อความ" ที่อุทิศให้ มันต้องการ STARTTLS ซึ่งหมายความว่าการเชื่อมต่อเริ่มต้นโดยไม่เข้ารหัส จากนั้นอัปเกรดเป็น TLS ก่อนส่งข้อมูลประจำตัวใด ๆ นี่คือสิ่งที่ Gmail, Outlook และผู้ให้บริการอีเมลสมัยใหม่เกือบทั้งหมดคาดหวังให้คุณใช้ ครับ
พอร์ต SMTP 465: พอร์ต SSL แบบเดิม
พอร์ต 465 มีประวัติที่ผิดปกติ มันได้รับการมอบหมายให้กับ SMTPS (SMTP over SSL) เพียงชั่วคราวในปี 1997 จากนั้นการมอบหมายนั้นถูกเพิกถอนในปี 1998 เมื่อ STARTTLS บนพอร์ต 587 กลายเป็นวิธีการที่ต้องการ แม้ว่าจะเลิกใช้อย่างเป็นทางการ เซิร์ฟเวอร์เมลหลายตัวยังคงสนับสนุนมัน และต่อมาได้รับการลงทะเบียนใหม่โดย IANA เพื่อวัตถุประสงค์ที่แตกต่างกัน ครับ
ในทางปฏิบัติ ผู้ให้บริการส่วนใหญ่ยังคงยอมรับการเชื่อมต่อบนพอร์ต 465 โดยใช้ SSL/TLS โดยปริยาย ซึ่งหมายความว่า TLS ห่อหุ้มการเชื่อมต่อทั้งหมดตั้งแต่ไบต์แรก แทนที่จะอัปเกรดในช่วงกลางของการจับมือเหมือน STARTTLS แอปพลิเคชันและฮาร์ดแวร์ที่เก่าบางตัว (เครื่องพิมพ์เครือข่ายบางเครื่อง CRM แบบเดิม) รองรับเฉพาะพอร์ต 465 เท่านั้น ดังนั้นมันจึงยังคงมีประโยชน์ในกรณีเหล่านั้น ครับ
- ใช้พอร์ต 465 หากแอปพลิเคชันหรืออุปกรณ์ของคุณต้องการ SSL โดยปริยายโดยเฉพาะและไม่สามารถทำ STARTTLS ได้
- ใช้พอร์ต 587 สำหรับทุกอย่างอื่น มันคือมาตรฐานสมัยใหม่ ครับ
- หลีกเลี่ยงพอร์ต 25 สำหรับการส่งข้อมูลไคลเอนต์โดยสิ้นเชิง ครับ
การตรวจสอบสิทธิ์ SMTP: ทำงานอย่างไร
การตรวจสอบสิทธิ์ SMTP (มักเขียนเป็น SMTP AUTH) ถูกกำหนดใน RFC 4954 มันต้องให้ไคลเอนต์พิสูจน์ตัวตนของตนเองก่อนที่เซิร์ฟเวอร์จะยอมรับเมลขาออก หากไม่มี ใครก็ตามที่สามารถเข้าถึงเซิร์ฟเวอร์ของคุณได้สามารถใช้มันเพื่อส่งสแปมได้ ซึ่งเป็นเหตุผลว่าทำไมรีเลย์เปิดจึงถูกมองว่าเป็นปัญหาความปลอดภัยที่ร้ายแรง ครับ
กลไกการตรวจสอบสิทธิ์ที่พบบ่อยที่สุดในการตั้งค่า SMTP มีดังนี้:
- PLAIN: ส่งชื่อผู้ใช้และรหัสผ่านที่เข้ารหัส base64 ปลอดภัยเฉพาะผ่านการเชื่อมต่อที่เข้ารหัส (TLS ต้องใช้งานก่อน) ครับ
- LOGIN: คล้ายกับ PLAIN แต่ส่งชื่อผู้ใช้และรหัสผ่านเป็นการแลกเปลี่ยนแยกต่างหาก นอกจากนี้ยังต้องใช้ TLS ครับ
- CRAM-MD5: กลไกการตอบสนองต่อความท้าทายที่หลีกเลี่ยงการส่งรหัสผ่านโดยตรง พบได้น้อยกว่าบนเซิร์ฟเวอร์สมัยใหม่ ครับ
- XOAUTH2: ใช้โดย Gmail และบัญชี Google Workspace อื่น ๆ แทนรหัสผ่าน คุณจะจัดเตรียมโทเค็นการเข้าถึง OAuth 2.0 นี่คือสิ่งที่คุณต้องเมื่อ "การเข้าถึงแอปที่ปลอดภัยน้อยกว่า" ถูกปิดใช้งาน ครับ
ตั้งค่าเซิร์ฟเวอร์อีเมลทีละขั้นตอน
ไม่ว่าคุณจะตั้งค่าไคลเอนต์อีเมลเช่น Thunderbird แอปเว็บที่ส่งอีเมลธุรกรรม หรือเซิร์ฟเวอร์เมลที่โฮสต์เองก็ตาม กระบวนการจะเป็นไปตามลำดับตรรกะเดียวกัน ครับ
สำหรับไคลเอนต์อีเมลและแอปพลิเคชัน
-
รับชื่อโฮสต์ SMTP จากผู้ให้บริการของคุณ
ตัวอย่าง:
smtp.gmail.com,smtp.office365.com,mail.yourdomain.comครับ - เลือกพอร์ตที่ถูกต้อง ใช้ 587 กับ STARTTLS เป็นค่าเริ่มต้นของคุณ ถอยกลับไปที่ 465 กับ SSL เฉพาะหากแอปของคุณต้องการมัน ครับ
- ป้อนข้อมูลประจำตัวการตรวจสอบสิทธิ์ของคุณ นี่มักจะเป็นที่อยู่อีเมลเต็มของคุณเป็นชื่อผู้ใช้บวกรหัสผ่านหรือรหัสผ่านแอป ครับ
- ตั้งค่าวิธีการเข้ารหัส จับคู่กับพอร์ต: STARTTLS สำหรับ 587, SSL/TLS สำหรับ 465 ครับ
- ทดสอบการเชื่อมต่อ ไคลเอนต์อีเมลส่วนใหญ่มีปุ่ม "ทดสอบการตั้งค่าบัญชี" หรือ "ตรวจสอบ" ใช้มันก่อนบันทึก ครับ
สำหรับเซิร์ฟเวอร์เมลที่โฮสต์เอง (ตัวอย่าง Postfix)
หากคุณกำลังเรียกใช้เซิร์ฟเวอร์ของคุณเองด้วย Postfix การตั้งค่า SMTP หลักจะอยู่ใน
/etc/postfix/main.cf
นี่คือตัวอย่างการทำงานขั้นต่ำสำหรับเซิร์ฟเวอร์ที่ส่งต่อผ่านผู้ให้บริการ SMTP ของบุคคลที่สาม:
# /etc/postfix/main.cf - Basic relay configuration
relayhost = [smtp.sendgrid.net]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_use_tls = yes
หลังจากแก้ไข สร้าง
/etc/postfix/sasl_passwd
ด้วยข้อมูลประจำตัวของคุณ เรียกใช้
postmap /etc/postfix/sasl_passwd
เพื่อแฮช จากนั้นโหลด Postfix ใหม่ด้วย
systemctl reload postfix
ครับ
chmod 600 /etc/postfix/sasl_passwd
และ
chmod 600 /etc/postfix/sasl_passwd.db
หลังจากสร้างไฟล์ ไฟล์ข้อมูลประจำตัวที่อ่านได้นั้นเป็นการกำหนดค่าเซิร์ฟเวอร์ที่ผิดพลาดทั่วไป ครับ
การตั้งค่า SMTP ทั่วไปสำหรับผู้ให้บริการยอดนิยม
| ผู้ให้บริการ | โฮสต์ SMTP | พอร์ต | การเข้ารหัส | หมายเหตุการตรวจสอบสิทธิ์ |
|---|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | STARTTLS | ใช้รหัสผ่านแอปหรือ OAuth2 |
| Gmail (ทางเลือก) | smtp.gmail.com | 465 | SSL/TLS | ใช้รหัสผ่านแอปหรือ OAuth2 |
| Microsoft 365 | smtp.office365.com | 587 | STARTTLS | Modern Auth / รหัสผ่านแอป |
| Yahoo Mail | smtp.mail.yahoo.com | 465 | SSL/TLS | ต้องมีรหัสผ่านแอป |
| Zoho Mail | smtp.zoho.com | 587 | STARTTLS | ที่อยู่อีเมลเต็มเป็นชื่อผู้ใช้ |
| Amazon SES | email-smtp.us-east-1.amazonaws.com | 587 | STARTTLS | ข้อมูลประจำตัว SMTP ของ IAM |
แก้ไขปัญหาการเชื่อมต่อ SMTP
ความล้มเหลว SMTP ส่วนใหญ่อยู่ในหมวดหมู่จำนวนเล็กน้อย ก่อนที่จะขุดลึกลงไปในบันทึก ให้ตรวจสอบว่าพอร์ตนั้นสามารถเข้าถึงได้จากเซิร์ฟเวอร์หรือเครือข่ายของคุณหรือไม่ ไฟร์วอลล์หรือบล็อก ISP มักเป็นตัวการ และคุณสามารถยืนยันได้อย่างรวดเร็วโดยไม่ต้องใช้เครื่องมือพิเศษใด ๆ ครับ
คุณสามารถตรวจสอบว่าพอร์ต SMTP เปิดอยู่บนเซิร์ฟเวอร์เมลของคุณหรือไม่โดยใช้เครื่องมือตรวจสอบพอร์ตออนไลน์ฟรี ป้อนชื่อโฮสต์หรือ IP ของเซิร์ฟเวอร์เมลของคุณ เลือกพอร์ต 25, 465 หรือ 587 และเรียกใช้การทดสอบ หากผลมาเป็นปิดหรือหมดเวลา ปัญหาคือระดับเครือข่าย (ไฟร์วอลล์ บล็อก ISP หรือบริการไม่ทำงาน) แทนที่จะเป็นข้อผิดพลาดการตั้งค่าภายในแอปของคุณ ครับ
ข้อความแสดงข้อผิดพลาดทั่วไปและความหมายของพวกเขา
- การเชื่อมต่อถูกปฏิเสธ / การเชื่อมต่อหมดเวลา: พอร์ตถูกบล็อกหรือบริการไม่ได้ฟังอยู่ ตรวจสอบกฎไฟร์วอลล์ของคุณและยืนยันว่า daemon SMTP กำลังทำงาน ครับ
- 535 Authentication failed: ชื่อผู้ใช้หรือรหัสผ่านผิด สำหรับ Gmail โดยปกติหมายความว่าคุณต้องใช้รหัสผ่านแอป ไม่ใช่รหัสผ่านบัญชีของคุณ ครับ
- 550 5.7.1 Relay access denied: เซิร์ฟเวอร์ของคุณไม่ได้ถูกกำหนดค่าให้ส่งต่อเมลสำหรับที่อยู่ผู้ส่งนั้น หรือการตรวจสอบสิทธิ์ไม่เกิดขึ้นก่อนคำสั่ง MAIL FROM ครับ
- 421 Too many connections: เซิร์ฟเวอร์ที่ได้รับจำกัดอัตราของคุณ ลดความถี่ในการส่งหรือใช้คิวที่มีความล่าช้า ครับ
- TLS handshake failed: ความไม่ตรงกันของใบรับรองหรือเวอร์ชัน TLS ที่ล้าสมัย ตรวจสอบว่าใบรับรอง SSL ของเซิร์ฟเวอร์ของคุณถูกต้องและคุณไม่ได้พยายามใช้ TLS 1.0 หรือ 1.1 ซึ่งผู้ให้บริการส่วนใหญ่ได้ปิดใช้งาน ครับ
รายการตรวจสอบวินิจฉัยอย่างรวดเร็ว
- ยืนยันว่าพอร์ต SMTP เปิดอยู่และสามารถเข้าถึงได้จากสภาพแวดล้อมการส่งของคุณ ครับ
-
ตรวจสอบว่าชื่อโฮสต์แก้ไขได้อย่างถูกต้องด้วย
nslookup smtp.yourdomain.comครับ - ตรวจสอบว่า IP ส่งของคุณไม่ได้อยู่ในรายชื่อบล็อกโดยใช้เครื่องมือเช่น MXToolbox Blacklist Check ครับ
- ยืนยันว่าระเบียน SPF, DKIM และ DMARC DNS ของคุณเผยแพร่อย่างถูกต้อง ระเบียนที่ขาดหายไปหรือเสีย ทำให้เมลที่ถูกต้องถูกปฏิเสธหรือถูกจัดเรียง ครับ
-
ตรวจสอบบันทึกเซิร์ฟเวอร์เมลของคุณ สำหรับ Postfix ให้ตรวจสอบ
/var/log/mail.logโค้ดการตอบสนอง SMTP ที่แท้จริงในบันทึกบอกคุณว่าเซิร์ฟเวอร์ระยะไกลปฏิเสธอะไรและเหตุใด ครับ
พอร์ต SMTP ของคุณเปิดอยู่จริง ๆ หรือไม่
ก่อนที่จะโทษการตั้งค่า smtp ของคุณ ให้ยืนยันว่าปัญหาไม่ใช่พอร์ตที่ถูกบล็อก เครื่องมือตรวจสอบพอร์ตฟรีของเราช่วยให้คุณทดสอบพอร์ต 25, 465 หรือ 587 บนเซิร์ฟเวอร์เมลใด ๆ ทันที เพื่อให้คุณทราบว่าคุณกำลังเผชิญกับปัญหาไฟร์วอลล์หรือข้อผิดพลาดการตั้งค่า ครับ
ตรวจสอบพอร์ต SMTP ของคุณในตอนนี้ →
พอร์ต 465 ใช้ SSL/TLS โดยปริยาย ซึ่งหมายความว่าการเชื่อมต่อทั้งหมดจะถูกเข้ารหัสตั้งแต่เริ่มต้น พอร์ต 587 ใช้ STARTTLS ซึ่งเริ่มต้นเป็นการเชื่อมต่อธรรมดาและจากนั้นอัปเกรดเป็น TLS ก่อนส่งข้อมูลประจำตัว ทั้งสองปลอดภัยเมื่อตั้งค่าอย่างถูกต้อง แต่พอร์ต 587 คือมาตรฐานสมัยใหม่ที่แนะนำสำหรับการส่งอีเมลไคลเอนต์ ใช้ 465 เฉพาะหากแอปพลิเคชันของคุณต้องการ SSL โดยปริยายโดยเฉพาะและไม่สามารถสนับสนุน STARTTLS ได้ ครับ
พอร์ต 25 ถูกบล็อกบนเครือข่ายโฮสติ้งส่วนใหญ่ที่อยู่อาศัยและร่วมกัน เนื่องจากมันถูกใช้ในอดีตเพื่อส่งสแปมโดยตรงจากเครื่องที่ถูกบุกรุก โดยการบล็อกพอร์ต 25 ขาออก ISP และผู้ให้บริการคลาวด์ (รวมถึง AWS EC2 ตามค่าเริ่มต้น) ป้องกันไม่ให้ช่วง IP ของพวกเขาถูกใช้เป็นแหล่งสแปม สำหรับการส่งอีเมลจากแอปพลิเคชัน ให้ใช้พอร์ต 587 หากคุณกำลังเรียกใช้เซิร์ฟเวอร์เมลที่ถูกต้องซึ่งต้องการให้พอร์ต 25 เปิดสำหรับรีเลย์เซิร์ฟเวอร์ต่อเซิร์ฟเวอร์ โดยปกติคุณต้องขอให้ผู้ให้บริการของคุณยกเลิกบล็อก ครับ
ในกรณีส่วนใหญ่ ชื่อผู้ใช้ SMTP ของคุณคือที่อยู่อีเมลเต็มของคุณ เช่น
you@yourdomain.com
ระบบเก่าบางระบบใช้เพียงส่วนท้องถิ่นก่อนเครื่องหมาย @ สำหรับบริการเช่น Amazon SES ชื่อผู้ใช้คือข้อมูลประจำตัว SMTP ที่สร้างโดย IAM ไม่ใช่ที่อยู่อีเมลของคุณเลย ตรวจสอบเอกสารประกอบสำหรับผู้ให้บริการเฉพาะของคุณเสมอ เมื่อใช้ Gmail หรือ Outlook โดยเปิดใช้งานการตรวจสอบสิทธิ์สองปัจจัย คุณจะต้องสร้างรหัสผ่านเฉพาะแอปแทนที่จะใช้รหัสผ่านบัญชีปกติ ครับ
คุณสามารถทดสอบในหลายระดับ ก่อนอื่น ให้ตรวจสอบว่าพอร์ต SMTP สามารถเข้าถึงได้โดยใช้เครื่องมือตรวจสอบพอร์ตหรือโดยการเรียกใช้
telnet smtp.yourdomain.com 587
จากเซิร์ฟเวอร์ของคุณ หากพอร์ตเปิดอยู่ คุณสามารถทดสอบการจับมือ SMTP เต็มรูปแบบได้โดยใช้
openssl s_client -starttls smtp -connect smtp.yourdomain.com:587
ซึ่งแสดงใบรับรอง TLS และช่วยให้คุณพิมพ์คำสั่ง SMTP ดิบ สำหรับการทดสอบแบบครบวงจรโดยไม่ส่งมอบไปยังกล่องจดหมายจริง ให้ใช้บริการเช่น Mailtrap ซึ่งยอมรับการเชื่อมต่อ SMTP และแสดงข้อความโดยไม่ต้องส่งต่อ ครับ
การตรวจสอบสิทธิ์ SMTP ที่สำเร็จจะพิสูจน์ได้เพียงว่าคุณได้รับอนุญาตให้ใช้เซิร์ฟเวอร์เท่านั้น การกรองสแปมเกิดขึ้นแยกต่างหากที่ปลายทางการรับและขึ้นอยู่กับปัจจัยหลายประการ: ไม่ว่า IP ส่งของคุณจะอยู่ในรายชื่อบล็อกหรือไม่ ไม่ว่าระเบียน SPF ของคุณอนุญาตให้ IP นั้นส่งสำหรับโดเมนของคุณหรือไม่ ไม่ว่าลายเซ็น DKIM ของคุณถูกต้องและตรงกับระเบียน DNS ของคุณหรือไม่ และไม่ว่านโยบาย DMARC ของคุณจะเผยแพร่หรือไม่ ระเบียน SPF ที่ขาดหายไปหรือเสียเพียงอย่างเดียวก็เพียงพอที่จะทำให้ Gmail หรือ Outlook จัดเรียงข้อความของคุณ ตรวจสอบระเบียน DNS ทั้งสามและตรวจสอบชื่อเสียง IP ส่งของคุณ ครับ
ได้ แต่มีข้อ จำกัด เซิร์ฟเวอร์ SMTP ของ Gmail (
smtp.gmail.com
บนพอร์ต 587) จะส่งเมลที่ตรวจสอบสิทธิ์เป็นบัญชี Gmail ของคุณ หากคุณต้องการให้ที่อยู่ "จาก" แสดงโดเมนที่กำหนดเอง คุณต้องเพิ่มที่อยู่นั้นในการตั้งค่า Gmail ภายใต้ "ส่งเมลเป็น" และตรวจสอบความเป็นเจ้าของ อย่างไรก็ตาม Gmail จะเพิ่มคำอธิบาย "ส่งผ่าน gmail.com" ที่มองเห็นได้ในไคลเอนต์อีเมลบางตัว สำหรับการตั้งค่าที่สะอาดกว่าด้วยโดเมนของคุณเอง การใช้ผู้ให้บริการอีเมลธุรกรรมเช่น Amazon SES หรือรีเลย์ SMTP ที่อุทิศให้เป็นตัวเลือกที่ดีกว่าในระยะยาว ครับ