mailx ส่งเมลโดยใช้รีเลย์ SMTP หรือเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ SMTP เป้าหมายหรือไม่


30

สมมติว่าฉันส่งเมลโดยใช้คำสั่งต่อไปนี้:

mailx person@x.com

จากนั้น mailx จะลองค้นหาเซิร์ฟเวอร์ SMTP ของ ISP ของฉันก่อนเพื่อส่งต่อเมลหรือเชื่อมต่อโดยตรง มันขึ้นอยู่กับว่าพีซีของฉันมีที่อยู่ IP สาธารณะหรืออยู่หลัง NAT ฉันจะตรวจสอบการตั้งค่าของ mailx บนพีซีของฉันได้อย่างไร ฉันจะตรวจสอบสิ่งนี้โดยใช้ tcpdump ได้อย่างไร

คำตอบ:


29

ตามเนื้อผ้า Unix mailและอนุพันธ์ (และเครื่องมือ Unix อื่น ๆ ) ใช้/usr/bin/sendmailอินเทอร์เฟซที่จัดทำโดยตัวแทนการถ่ายโอนจดหมายเกือบทั้งหมด (MTAs - postfix, exim, courier, และ sendmail แน่นอน)

นั่นคือmailโปรแกรมไม่ได้พูดโปรโตคอลเครือข่ายใด ๆ - มันฟีดข้อความไปยังsendmailทาง stdin และช่วยให้มันจัดการการส่งมอบจริง (สิ่งนี้จะย้อนกลับไปวันที่เมลบางอันใช้ SMTP บางคนใช้ UUCP บางคนใช้ BITNET ... )

เมื่อมีการจัดคิวข้อความsendmailMTA จะจัดการการส่งข้อความจริงไม่ว่าจะผ่าน SMTP หรืออย่างอื่น ขึ้นอยู่กับการกำหนดค่าอาจเชื่อมต่อโดยตรงกับ MTA ปลายทางหรือส่งต่อเมลผ่านโฮสต์อื่น (เรียกอีกอย่างว่าสมาร์ทโฮสต์)

การเชื่อมต่อโดยตรงนั้นพบได้บ่อยในเซิร์ฟเวอร์ การส่งผ่านสมาร์ทโฮสต์นั้นพบได้ทั่วไปในคอมพิวเตอร์ส่วนบุคคลในการเชื่อมต่อที่บ้าน - การส่งผ่านบัญชี Gmail หรือ ISP / อีเมลที่ทำงานของคุณเป็นสิ่งจำเป็นเพื่อหลีกเลี่ยงตัวกรองสแปมแบบไดนามิก "IP IP"

(MTAs บางอย่างเช่นesmtpหรือnullmailerสร้างขึ้นเป็นพิเศษสำหรับผู้ใช้ตามบ้านและมักจะใช้รีเลย์โฮสต์สิ่งเหล่านี้ไม่รองรับการรับจดหมายและเบากว่าทรัพยากรมาก)

mailx → [/ usr / bin / sendmail] →คิว MTA ท้องถิ่น→ [SMTP] →ผู้รับ MTA →กล่องรับจดหมาย
mailx → [/ usr / bin / sendmail] →คิว MTA ท้องถิ่น→ [SMTP] → Gmail หรือ ISP / เซิร์ฟเวอร์ทำงาน→ [SMTP] →ผู้รับ MTA →กล่องรับของผู้รับ

โปรแกรมอื่น ๆ ส่วนใหญ่ที่ใช้งานง่ายลูกค้ากราฟิกเช่น Thunderbird หรือ Outlook, เสมอเชื่อมต่อโดยตรงกับการถ่ายทอด / เซิร์ฟเวอร์ SMTP มาร์ทโฮสต์ (อีกครั้งมักจะ Gmail หรือ ISP / ทำงานเซิร์ฟเวอร์ SMTP) ซึ่งส่งข้อความในนามของคุณ

สนับสนุน SMTP พื้นเมืองอยู่ในปัจจุบันแต่ไม่ได้อยู่ในแบบดั้งเดิมheirloom-mailxbsd-mailx

แอพ→ [SMTP] → Gmail หรือ ISP / เซิร์ฟเวอร์ที่ทำงาน→ [SMTP] →ผู้รับ MTA →กล่องรับของผู้รับ

วิธีที่สาม - การเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ของผู้รับ - แทบจะไม่เคยใช้เลยและไม่มี MUA ที่รองรับ ในคอมพิวเตอร์ส่วนบุคคลการใช้ข้อความนี้จะทำให้ข้อความของคุณถูกปฏิเสธ (มีการส่งสแปมจำนวนมากจากที่อยู่ IP ของผู้ใช้ตามบ้านที่ติดไวรัส)

แอพ→ [SMTP] →ผู้รับ MTA →โดนตัวกรองสแปม

1
จะหา MTA ของฉันบน linux ได้อย่างไร?
Rohit Banga

1
@iamrohitbanga 1) ตรวจสอบรายการแพ็คเกจที่ติดตั้ง (ไม่ใช่ distros ทั้งหมดที่มาพร้อมกับ MTA โดยค่าเริ่มต้น)
grawity

1
@iamrohitbanga 2) ฉันตอบแล้ว มักใช้ Outlook บนคอมพิวเตอร์ส่วนบุคคลที่บ้านและผู้ให้บริการอีเมลหลายคนปฏิเสธข้อความที่ได้รับจากที่อยู่ของผู้ใช้ตามบ้าน (เนื่องจากมีอัตราสแปมสูงจากที่อยู่เหล่านี้) นั่นเป็นเหตุผลที่จำเป็นต้องมีการถ่ายทอดผ่านเซิร์ฟเวอร์องค์กร
grawity

1
@iamrohitbanga 3) "หรือ" หมายถึง "อย่างใดอย่างหนึ่ง" ไม่ใช่ "ทั้งคู่" ผู้ที่ใช้ Gmail เป็นบัญชีอีเมลหลักส่งอีเมลผ่านเซิร์ฟเวอร์ของ Gmail ผู้ที่มีกล่องจดหมายที่ ISP ใช้เซิร์ฟเวอร์ของ ISP
grawity

1
@iamrohitbanga 4) นั่นเป็นเพราะmailx ไม่ได้ใช้ "วิธีที่สาม" มันใช้ MTA ตามที่อธิบายไว้ด้านบนของคำตอบของฉัน และอีกครั้งหากคุณไม่ได้อยู่ในการเชื่อมต่ออินเทอร์เน็ตขององค์กรอีเมลที่ส่งโดยตรงจากพีซีของคุณ (ไม่มีรีเลย์) มีแนวโน้มที่จะถูกทิ้ง
grawity

31

mailx สามารถใช้ SMTP มันเป็นไฟล์กำหนดค่าคือ ~ / .mailrc

ตัวอย่างหนึ่งคือmailx โดยใช้ SMTP

การกำหนดค่าสามารถอยู่ในคำสั่งเดียวได้:

mailx -v -s "$EMAIL_SUBJECT" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://smtp.gmail.com:587 \
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
-S smtp-auth-user=$FROM_EMAIL_ADDRESS \
-S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD \
-S ssl-verify=ignore \
-S nss-config-dir=~/.mozilla/firefox/xxxxxxxx.default/ \
$TO_EMAIL_ADDRESS

หากใช้เซิร์ฟเวอร์ SMTP ปกติมันง่ายกว่ามาก (ดูรายละเอียดเบื้องต้นได้ที่นี่ ):

mailx -v -s "$EMAIL_SUBJECT" \
-S smtp=smtp://smtp.example.com
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
$TO_EMAIL_ADDRESS

คุณยังสามารถใส่สิ่งเหล่านี้ลงในไฟล์กำหนดค่าของ mailx ~ / .mailrc


โปรดทราบว่าสิ่งนี้ขึ้นอยู่กับ heirloom-mailx ซึ่งไม่ใช่ mailx เริ่มต้น
สกอตต์

@Scott: ใช่ แต่ขึ้นอยู่กับการกระจาย Linux ในบางระบบค่าเริ่มต้นไม่ใช่มรดกสืบทอด (เช่น Ubuntu: fclose.com/b/linux/1411/ ......ดูเหมือนว่าจะมีรุ่น mailx 3 รุ่น) ในบางกรณีเช่น Fedora, OpenSUSE ค่าเริ่มต้นคือ "คุณสมบัติที่มีการจัด" "heirloom-mailx"
ericzma

@ericzma ฉันคิดว่า heirloom-mailx นั้นดีที่สุด / คือ heirloom mailx เดียวที่ทำได้ (ระบุจากเซิร์ฟเวอร์ smtp ที่บรรทัดคำสั่ง)? มันทำงานได้ดีบน Debian แม้ว่าจะไม่ได้ติดตั้งไว้ บน Debian mailx ลิงก์ไปยัง / etc / ทางเลือก / mailx ซึ่งเชื่อมโยงไปยัง / usr / bin / bsd-mailx หลังจากติดตั้ง heirloom-mailx ไปยัง debian, / etc / ทางเลือก / mailx ลิงก์ไปยัง / usr / bin / heirloom-mailx และทำงานอย่างสวยงาม
barlop

@barlop การค้นหาของคุณสอดคล้องกับของฉัน: heirloom-mailx ทำงานได้ในขณะที่ bsd-mailx ไม่ทำงาน ยังไม่ทราบเกี่ยวกับการใช้งานอื่น ๆ
ericzma

CentOS 6.7 ใช้ Heirloom mailx 12.4
Joshua Grigonis

3

จากmailx(1)หน้าคนส่วนคำอธิบายส่วนย่อยตัวเลือกสตริง :

   smtp   Normally, mailx invokes sendmail(8) directly to  transfer
          messages.  If the smtp variable is set, a SMTP connection
          to the server specified by the value of this variable  is
          used  instead.

สิ่งนี้ทำให้ฉันสับสนเล็กน้อย คุณสามารถทำอย่างละเอียดมากขึ้น
Rohit Banga

เอ่อ ... มันใช้sendmailนอกเสียจากมีการตั้งค่าตัวเลือกนี้
Ignacio Vazquez-Abrams

1

มีทางเลือกอื่นที่ไม่มี mta ท้องถิ่นเช่น sendmail / postix

แพคเกจเดเบียนssmtp

ข้อมูลจากคำอธิบายรอบต่อนาที:

Summary     : Extremely simple MTA to get mail off the system to a Mailhub
URL         : http://packages.debian.org/stable/mail/ssmtp
License     : GPLv2+
Description : A secure, effective and simple way of getting mail off a system to your mail
            : hub. It contains no suid-binaries or other dangerous things - no mail spool
            : to poke around in, and no daemons running in the background. Mail is simply
            : forwarded to the configured mailhost. Extremely easy configuration.

HTH

สเตฟานเค


1
เกือบ ... ssmtp เป็นไคลเอนต์ SMTP เหมือน MTA มันทำงานเหมือน / usr / bin / sendmail แต่แทนที่จะเชื่อมต่อโดยตรงกับระเบียน MX ของโดเมนเฉพาะมันมอบหมายงานนี้ให้กับเซิร์ฟเวอร์ SMTP ที่สามารถเข้าถึงได้ (โดยปกติผ่านชื่อผู้ใช้ / รหัสผ่าน) ไปยังเครื่องที่ใช้ ssmtp สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับระบบที่ส่งอีเมลจากช่วง IP ที่มีสแปมสูงเช่นช่วง ADSL แบบไดนามิก IP, ผู้ให้บริการโฮสติ้งที่หลบ ฯลฯ
Andre de Miranda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.