เซิร์ฟเวอร์ SMTP ขาออกที่มีน้ำหนักเบา


46

คุณใช้อะไรเป็น SMTP น้ำหนักเบาสำหรับอีเมลขาออกเท่านั้น

ฉันใช้งานแอพที่ส่งอีเมลผ่าน SMTP เมื่อมีเหตุการณ์เกิดขึ้นนาน ๆ ครั้งและฉันไม่ต้องการเซิร์ฟเวอร์อีเมลที่มีคุณสมบัติครบถ้วน

แก้ไข: ฉันมีความสุขมากกว่าที่จะใช้บางสิ่งบางอย่างเช่น postfix (และทำได้) หากเป็นตัวเลือกที่ดีที่สุด ฉันคิดว่าอาจจะมีบางสิ่งที่ง่ายกว่านั้นก็หมดกล่อง


ฉันคิดว่ามันสมเหตุสมผลอย่างสมบูรณ์ที่จะยึดติดกับสิ่งที่ชอบ exim และ postfix ไม่ยากที่จะกำหนดค่าหากคุณทำสิ่งที่ง่าย
Faheem Mitha

ความหมายของคำว่า "จริงจัง" ของคุณคืออะไร? คุณคาดหวังว่าข้อความจะใหญ่ขนาดไหน? "นาน ๆ ครั้ง" บ่อยแค่ไหน?
Mike B

คำตอบ:


22

เอเจนต์การโอนเมลแบบถ่ายทอดอย่างเดียว (MTAs หรือ "เมลเซิร์ฟเวอร์") มีตัวเลือกน้อยที่สุดซึ่งบางตัวมีการกล่าวถึงในคำตอบอื่น ๆ :

สำหรับการทำงานอย่างใดอย่างหนึ่งคุณจำเป็นต้องมี MTA ที่สมบูรณ์ซึ่งจะส่งต่อข้อความของคุณ (หรือที่เรียกว่า "เมลฮับ") และขอแนะนำอย่างยิ่งให้คุณควบคุมเมลฮับนี้ Bad Things ™สามารถเกิดขึ้นได้เป็นอย่างอื่น


esmtp ไม่ได้รับการบำรุงรักษาอีกต่อไป
Nikola Kotur

1
nullmailer มีปัญหาการปฏิบัติตามร้ายแรงของ SMTP: จะลองอีกครั้งเมื่อได้รับข้อผิดพลาดถาวรของ SMTP สิ่งนี้อาจทำให้คุณเสียเงินจริงถ้าคุณจ่ายแบนด์วิดท์ / การขนส่งbugs.debian.org/cgi-bin/bugreport.cgi?bug=329192
telent

@telent: คุณไม่ควรใช้ nullmailer ในสถานการณ์ดังกล่าว

ขอบคุณ! คู่มือการกำหนดค่าที่Troubleshooters.com/linux/nullmailer บันทึกปัญหาด้านความปลอดภัยด้วย nullmailer: มันจะเปิดเผยรหัสผ่านในบรรทัดคำสั่งหรืออย่างน้อยก็ใช้ในการทำเช่นนั้น การสนทนาอื่น ๆ ทราบว่า mstmp ทำให้ชัดเจนน้อยลงวิธีการจัดคิวจดหมายกว่า nullmailer
nealmcb

11

IMHO วิธีที่ง่ายที่สุดในการทำเช่นนี้คือ postfix คุณสามารถกำหนดค่าให้มันเป็นรีเลย์ขาออกไฟด้วยคำสั่งเหล่านี้:

postconf -e relayhost=other.mailserver.com
postconf -e myorigin=my.domainname.com

ตราบใดที่เซิร์ฟเวอร์ SMTP ที่ระบุไว้relayhostไม่จำเป็นต้องมีการตรวจสอบสิทธิ์อนุญาตให้คุณส่งต่อหรือเป็นปลายทางที่ถูกต้องสำหรับที่อยู่ผู้รับซึ่งจะใช้งานได้

myoriginพารามิเตอร์จะเป็นชื่อโดเมนเริ่มต้น ดังนั้นถ้าคุณส่งจดหมายไปที่ foo มันจะไปที่ foo@my.domainname.com จดหมายที่ส่งโดยผู้ใช้บาร์จะมาจาก bar@my.domainname.com

หากคุณต้องการพิสูจน์ตัวตนและต้องการสนับสนุน TLS ให้รันคำสั่งต่อไปนี้:

postconf -e smtp_tls_security_level=may
postconf -e smtp_sasl_auth_enable=yes
postconf -e smtp_sasl_password_maps=pcre:/etc/postfix/sasl_password_maps

จากนั้น/etc/postfix/sasl_password_mapsมีเนื้อหานี้:

/./ username:password

อีเมลทั้งหมดจะถูกส่งไปยัง relayhost ของคุณด้วยชื่อผู้ใช้และรหัสผ่านที่ระบุ


พยายามตั้งค่าเหล่านี้และฉันได้รับข้อผิดพลาด: "ข้อผิดพลาด: ประเภทพจนานุกรมที่ไม่สนับสนุน:
pcre

1
ติดตั้ง pcre และ / หรือ postfix-pcre แล้วลองอีกครั้ง
bahamat

ฉันคิดว่ามันออกมาในเวลาเดียวกันก็มีสองแพ็คเกจที่ขาดหายไปอันแรกก็คือ postfix-pcre อย่างที่คุณพูด ฉันงงว่า libsasl2 และ libsasl2-modules-db ได้รับการติดตั้งอย่างไร แต่ libsasl2-modules ขาดหายไป ... ตอนนี้ทุกอย่างก็ใช้ได้ คุณช่วยเพิ่มข้อมูลสำคัญลงในคำตอบของคุณได้ไหม?
valentt

1
สำหรับ TLS ผมยังใช้relayhost=other.mailserver.com:465แล้วsmtp_tls_wrappermode=yesและsmtp_tls_security_level=encryptแต่ก็พยายามที่จะใช้ผู้ใช้ท้องถิ่นเป็นรับรองความถูกต้อง ฉันต้องเขียนผู้ใช้รับรองความถูกต้องอย่างใด
ทิวดอร์

"ตราบใดที่เซิร์ฟเวอร์ SMTP ที่ระบุใน relayhost ไม่ต้องการการรับรองความถูกต้อง" -> ตกลง แต่ก็ไม่ค่อยเป็นเช่นนั้นในปัจจุบัน ข้อเสนอแนะของคุณถูกต้อง แต่ส่วนใหญ่ไม่เกี่ยวข้อง!
FarO

9

สมมติว่าคุณต้องการโปรแกรมที่คุณสามารถเรียกใช้จากเชลล์เช่น sendmail (8), บางทีMSMTPจะเหมาะกับความต้องการของคุณ? สามารถเชื่อมต่อกับเซิร์ฟเวอร์ SMTP ระยะไกลและส่งอีเมลที่ได้รับเป็น stdin เช่นเดียวกับ sendmail


ฉันใช้ MSMTP สำหรับสิ่งนี้ใช้งานได้ดีและการกำหนดค่านั้นง่ายมาก
dsp

ฉันดีใจที่คุณแนะนำสิ่งนี้ ฉันกำลังมองหาบางอย่างเช่นนี้มาระยะหนึ่งแล้ว การกำหนดค่าของ sendmail นั้นแตกต่างจากความต้องการของฉันมากเกินไป
ixtmixilix

4

ESMTPเป็นเซิร์ฟเวอร์ส่งเมลแบบถ่ายทอดเท่านั้นที่สามารถใช้งานได้กับแอปพลิเคชันของคุณ


1
ดูเหมือนว่าโครงการจะตายในปี 2009
SHernandez

2

คุณอาจพบ sSMTP ที่เหมาะสมกับความต้องการของคุณ อ่านบทความนี้และข้อ จำกัด ของมัน

แม้ว่าโดยสุจริตฉันจะไม่เครียดเกินไปเกี่ยวกับการติดตั้ง postfix หรือ exim แม้ว่าจะเป็นการส่งอีเมลเท่านั้น


1
+1 สำหรับ ssmtp, -1 สำหรับความคิดเห็นที่ไม่จำเป็นที่ sendmail เช่นเดียวกับการแนะนำการใช้เอ็มทีเต็มรูปแบบซึ่งเป็นวิธีที่ยากที่จะทำ การกำหนดค่าที่ไม่ดีและการดูแลรักษาเซิร์ฟเวอร์อีเมลทำให้ชีวิตของเราเป็นผู้ดูแลระบบอีเมล

@hop: ฉันไม่เห็นด้วยกับทั้งสองนับ sendmail แย่มาก ตัวอย่างเช่น exim เป็นค่าเริ่มต้นของ Debian และใช้งานง่ายอย่างสมบูรณ์แบบ อาจจะเป็น postfix ก็ได้ แต่ฉันไม่เคยใช้มันเลย
Faheem Mitha


1

ในทางเทคนิคคุณไม่จำเป็นต้องมีเซิร์ฟเวอร์อีเมลในโฮสต์ของคุณสิ่งที่คุณต้องการ (และอาจมีอยู่แล้ว) คือ smtp-client (หรือ MUA) ที่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ SMTP องค์กรของคุณ (ซึ่งอาจเป็นที่ใดก็ได้ที่คุณสามารถเชื่อมต่อกับ .)

ขึ้นอยู่กับแอพ (และภาษาการเขียนโปรแกรม) มีหลายวิธีที่แอพของคุณจะเชื่อมต่อกับ 'เซิร์ฟเวอร์ SMTP' ในเครือข่ายของคุณ

โดยปกติแล้วด้วย PHP หรือ Python มีไฟล์กำหนดค่าพร้อมแอปเพื่อระบุเซิร์ฟเวอร์ "SMTP" (ซึ่งสามารถอยู่บนโฮสต์ของคุณหรือที่อื่น ๆ ในเครือข่ายของคุณ) หากคุณมีเซิร์ฟเวอร์อีเมลในเครือข่ายให้ชี้ไปที่ กำหนดค่าไปยังเซิร์ฟเวอร์นั้น

หากไม่มีตัวเลือกอื่น ๆ แอปสามารถสร้างข้อความอีเมลไปยังเอาต์พุตมาตรฐานที่คุณสามารถดำเนินการกับสิ่งที่ชอบ:

listoftargets = "me@example.com jab@example.com" echo "ทดสอบเนื้อหา" | mail -s "รายการทดสอบเรื่อง" $ listoftargets

ในบางระบบมีเมลเซิร์ฟเวอร์ขั้นต่ำสำหรับการส่งเท่านั้น

แซมต.


ฉันมีเซิร์ฟเวอร์จำนวนมากในคลาวด์และฉันต้องการให้แต่ละคนมีเซิร์ฟเวอร์ SMTP ขาออกของตัวเองแทนที่จะพึ่งพาสิ่งภายนอก ด้วยวิธีนี้ถ้าเซิร์ฟเวอร์ SMTP ระยะไกลของฉันไม่ทำงานจะไม่ส่งผลกระทบต่อทุกเซิร์ฟเวอร์
FlappySocks

1) ถ้าคุณปล่อยให้ PHP หรือ Python ทำส่วน smtp คุณต้องทำงานทั้งหมด (การรอคิวการจัดการข้อผิดพลาด) ที่ MTA จะจัดการ 2) ในตอนท้ายคุณขัดแย้งกับสิ่งที่คุณพูดในตอนแรก

แอปพลิเคชั่น linux บางตัวได้รับการตั้งค่าให้คาดหวังmailหรือsendmailตั้งชื่อไฟล์เรียกทำงาน ระบบแจ้งเตือน นั่นคือประเด็นทั้งหมดใช่ไหม? สำหรับสิ่งอื่นไม่มีข้อ จำกัด
Craig Hicks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.