จะส่งอีเมลพร้อมเซิร์ฟเวอร์ CentOS ของฉันได้อย่างไร


21

ฉันเพิ่งสร้างเซิร์ฟเวอร์โฮมเจียมเนื้อเจียมตัวโดยใช้ CentOS 5.5 ฉันต้องการให้เซิร์ฟเวอร์สามารถส่งอีเมลไปยังบัญชี Gmail ของฉันหรือบัญชีอีเมลอื่น ๆ สำหรับสิ่งต่าง ๆ เช่นงาน cron นอกจากนี้ยังเป็นการดีที่จะสามารถส่งอีเมลผ่านแอปพลิเคชัน PHP ที่ฉันรัน / พัฒนาบนเซิร์ฟเวอร์ได้เช่นกัน หรือแม้กระทั่งสามารถให้เซิร์ฟเวอร์ส่งอีเมลผ่านคำสั่ง mail

ฉันรู้ว่ามีล้านผลการค้นหาของ Google เกี่ยวกับการตั้งค่าเซิร์ฟเวอร์ Linux ของคุณเป็นเซิร์ฟเวอร์อีเมลหรือการกำหนดค่า sendmail เป็นต้น แต่พวกเขาดูเหมือนจะไม่เป็นสิ่งที่ฉันกำลังมองหา ... อย่างน้อยฉันก็ไม่คิดอย่างนั้น ฉันไม่ได้พยายามตั้งค่าเซิร์ฟเวอร์องค์กรที่ลูกค้ารายอื่นสามารถเชื่อมต่อเพื่อส่งอีเมลหรือสิ่งที่ซับซ้อนเช่นนั้นได้

ฉันแค่อยากให้เซิร์ฟเวอร์ส่งอีเมลเกี่ยวกับสิ่งของให้ฉัน ดูเหมือนว่ามันควรจะง่าย ... ใครช่วยชี้ทางให้ข้าได้?

UPDATE

ตามคำขอของผู้ใช้ด้านล่างฉันลองคำสั่งนี้:

/bin/mail -s "My Subject" "myaddress@gmail.com" < /home/john/test

ไม่มีข้อผิดพลาดหรืออะไร แต่อีเมลไม่เคยปรากฏในกล่องจดหมายของฉัน นี่คือของฉันmaillog

Oct 27 00:52:19 localhost sendmail[13702]: o9R6qJhU013702: from=root, size=10906, class=0, nrcpts=1, msgid=<201010270652.o9R6qJhU013702@localhost.localdomain>, relay=root@localhost
Oct 27 00:52:19 localhost sendmail[13703]: o9R6qJOd013703: from=<root@localhost.localdomain>, size=11209, class=0, nrcpts=1, msgid=<201010270652.o9R6qJhU013702@localhost.localdomain>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
Oct 27 00:52:19 localhost sendmail[13702]: o9R6qJhU013702: to=myaddress@gmail.com, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=40906, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (o9R6qJOd013703 Message accepted for delivery)

เบาะแสใด ๆ


1
คุณเคยลองไหม คุณเห็นปัญหาประเภทใด
Ignacio Vazquez-Abrams

ฉันไม่แน่ใจว่าสิ่งที่ฉันกำลังมองหา ฉันค้นหา Google และดูบทช่วยสอนสำหรับการตั้งค่าเซิร์ฟเวอร์จดหมาย Linux นั่นคือสิ่งที่ฉันต้องการ
Jake Wilson

เพิ่งสังเกตเห็นว่ายังไม่ได้รับคำตอบ จากความอยากรู้คุณคิดออกไหม คุณตรวจสอบว่าเครื่องมีชื่ออยู่ใน PBL หรือไม่? spamhaus.org/pbl
Belmin Fernandez

ฉันไม่ได้ไปทำงาน ฉันยังไม่ได้ผ่านขั้นตอนการติดตั้ง sendmail เพราะผู้โพสต์ด้านล่างบอกเป็นนัยว่าไม่ควรส่งเพียงอีเมลเดียว ฉันนึกภาพไม่ออกว่าเซิร์ฟเวอร์ในบ้านตัวเล็กของฉันอยู่ในรายชื่อจดหมายขยะเพราะฉันไม่เคยแม้แต่จะส่งอีเมลมาก่อน
Jake Wilson

ฉันยังลองใช้คำสั่งง่ายๆที่ฉันได้กล่าวไว้ข้างต้นส่งไปยังบัญชีอีเมล10minutemail.comด้วยผลลัพธ์เดียวกันและข้อความบันทึกเดียวกัน
Jake Wilson

คำตอบ:


13

/bin/mail -s "Enter Subject Line here" -a /home/.../whateverFileYouWantAttached "you@YourEmailAddress" < /home/me/textBody.letter

ลองคำสั่งดังกล่าว :)


1
+1 คุณไม่จำเป็นต้องใช้เซิร์ฟเวอร์อีเมลในระบบเพื่อส่งจดหมายเนื่องจากคุณไม่จำเป็นต้องใช้เซิร์ฟเวอร์อีเมลในเดสก์ท็อปของคุณเพื่อส่งจดหมาย โปรแกรมจดหมายนั้นใช้ได้
dunxd

1
ฉันลองคำสั่งนี้และมันไม่ทำงาน ไม่มีข้อผิดพลาดหรืออะไร ไม่มีจดหมายปรากฏในกล่องจดหมาย gmail ของฉัน ดูข้างบนสิ่งที่ maillog ของฉันพูด
Jake Wilson

ดังนั้น ... ด้วยเหตุผลใดทำไมนี่ไม่ทำงานสำหรับฉัน บันทึกใดที่ฉันควรดูเพื่อพิจารณาว่าทำไมฉันไม่ได้รับจดหมายใด ๆ
Jake Wilson

6

คำตอบง่ายๆ:

ตั้งค่า sendmail มันจะขึ้นอยู่กับการกระจายของคุณ แต่มันไม่ยากเลย หากคุณมีคำถามใด ๆ ถามไป

คำตอบที่ซับซ้อน:

หากคุณถามสิ่งนี้คุณอาจไม่ควรกระโดดปืนและติดตั้ง sendmail เพียงเท่านี้

คุณจะต้องคำนึงถึงสิ่งต่อไปนี้:

  1. ISP ของคุณอนุญาตให้คุณส่งอีเมลหรือไม่ คุณอาจอยู่ในช่วง IP ที่ไม่ใช่เซิร์ฟเวอร์ดังนั้นผู้ให้บริการอีเมลหลายรายจะปิดกั้นการทำงานของคุณทันที

  2. ที่อยู่ใดที่คุณจะใช้เป็นที่อยู่ของคุณ คุณได้รับอนุญาตให้ส่งจากที่อยู่นี้ (SPF, DomainKeys ฯลฯ ) หรือไม่ หากไม่เป็นเช่นนั้นข้อความของคุณอาจถูกตรวจจับว่าเป็นสแปมโดยผู้ให้บริการอีเมลและอย่างถูกต้อง

  3. สุดท้าย แต่ไม่ท้ายสุด: คุณจำเป็นต้องใช้บริการ SMTP ของคุณเองจริง ๆ หรือไม่? ทำไมการใช้ ISP ของคุณไม่ดีพอ?

ย้อนกลับไปในอดีตการตั้งค่าเซิร์ฟเวอร์ SMTP ไม่ใช่เรื่องใหญ่อะไร ทุกวันนี้การตั้งค่าอาจง่ายกว่า แต่การตั้งค่าเพื่อให้ได้รับข้อความไปยังกล่องจดหมายของผู้คนเป็นเรื่องที่ท้าทาย


3

ฉันสามารถยืนยันได้ว่าไม่มีคำแนะนำใด ๆ ข้างต้นที่ทำงานบนระบบ CentOS ที่บ้านเช่นกัน - ไม่ใช่แบบเดียว ซึ่งเป็นที่น่ารำคาญ!

จากนั้นฉันก็ลองทำเช่นเดียวกันกับอินสแตนซ์ Amazon ใหม่ที่ใช้งาน CentOS 6.4 และแม้จะมีการกำหนดค่าเริ่มต้นฉันก็สามารถส่งอีเมลได้โดยไม่มีปัญหา สิ่งที่ฉันต้องทำคือ

yum install mailx

หลังจากนั้นการส่งจดหมายตามที่อธิบายไว้ข้างต้นใช้งานได้ดี การติดตั้งภาวะแทรกซ้อนเช่น sendmail นั้นไม่จำเป็นสำหรับสิ่งที่ Jakub พยายามทำ

ต้องมีการกำหนดค่าบางอย่างกับ ISP ของฉันเนื่องจากฉันไม่ได้มีไฟร์วอลล์ที่กำหนดค่าได้ที่นี่


2

คุณต้องทำสิ่งต่อไปนี้:

  1. sudo yum install postfix telnet mailx
  2. sudo /etc/init.d/postfix start
  3. sudo vi /etc/postfix/main.cf
  4. เปลี่ยนแปลง mydestination = mydomain.com, localhost.mydomain.com, localhost

    ไปยัง

    mydestination = localhost.mydomain.com, localhost

ทดสอบโดยใช้สิ่งต่อไปนี้จากบรรทัดคำสั่ง

  1. mail address@example.com หัวเรื่อง:
  2. ทดสอบอีเมลจากการทดสอบ demoslice.com
  3. เนื้อหาของอีเมล
  4. .

หมายเลข 4 - มีเพียงหยุดเต็มเพื่อทำให้เนื้อหาของอีเมลเสร็จสมบูรณ์ ตอนนี้คุณควรมีจดหมาย

ข้างต้นจะช่วยให้คุณได้รับ MTA (Mail Transfer Agent) ทรัพยากรบางอย่างที่จะช่วยคุณในการตั้งค่าขั้นสูงสามารถอ่านได้ที่บทความของ slicehostเกี่ยวกับการตั้งค่าอีเมลสำหรับ CentOS (เลื่อนลงไปที่ส่วน CentOS และอีเมล) คุณควรพิจารณาการตั้งค่าต่อไปนี้อย่างถูกต้อง: บันทึกชื่อโฮสต์, RDNS (Reverse DNS) และ SPF (Sender Policy Framework) กับผู้ให้บริการ DNS ของคุณ


นี่คือคำตอบที่ยอดเยี่ยม - สั้นและได้ผล
monkjack

1

คุณได้ปรับเปลี่ยน /etc/mail.rc ของคุณเพื่อตั้งค่าที่อยู่ smtp หรือไม่


1
เนื้อหาของการ/etc/mail.rcเป็นset ask askcc append dot save crt ignore Received Message-Id Resent-Message-Id Status Mail-From Return-Path Viaสิ่งที่คุณบอกฉันทำอย่างไร
Jake Wilson


0

Postfix อยู่ในเส้นทางที่ถูกต้อง แต่ถ้า gmail คิดว่าคุณเป็นอย่างน้อย legit (เช่นคุณไม่ใช่ผู้ส่งสแปม) การได้รับจดหมายของคุณนั้นค่อนข้างไม่น่าเป็นไปได้

กระบวนการนี้เกี่ยวข้องกับการโพสต์ที่นี่เล็กน้อย แต่วิธีที่ง่ายที่สุดที่ฉันได้พบในการบรรลุเป้าหมายนี้ (และมีการส่งอีเมลของคุณ) คือการตั้งค่า postfix เป็นการถ่ายทอดโดยใช้บัญชี gmail ของคุณเองเป็นพาหนะ

กระบวนการที่ฉันใช้มีรายละเอียดที่นี่:

http://rs20.mine.nu/w/2011/07/gmail-as-relay-host-in-postfix/

ไม่จำเป็นต้องตั้งค่า certs ที่ลงชื่อด้วยตนเอง (ตาม sendmail) และจากประสบการณ์ของฉันมันใช้งานได้!


0

ทางออกที่ง่ายไม่ใช่ sendmail แต่ sendEmail:

http://caspian.dotconf.net/menu/Software/SendEmail/#download

สคริปต์ Perl ที่ได้รับการกำหนดค่าให้ส่งผ่านเซิร์ฟเวอร์ SMTP ใดก็ได้ที่คุณสามารถทำได้ง่าย - ฉันใช้สคริปต์นี้เพื่อส่งผ่านบัญชี Gmail ตลอดเวลา แต่ก็ใช้งานได้กับ SMTP ธรรมดาผ่าน TCP บนพอร์ต 25 ฯลฯ

ฉันมักจะห่อสคริปต์ Perl ของ sendEmail กับเชลล์สคริปต์ของฉันเองสำหรับ Gmail:

#!/bin/bash

# Send gmail through an account specified in ~/.sendGmailAuthFile (or file identified with -k.)
# The auth file must have values for the -f (from@domain) and -xp (password) options of sendEmail,
# structured as:
#
#    user=me.surnamen@gmail.com
#    pwd=xxxxxxx
#
# We will fill in the rest, and other params are passed through to sendEmail
#
# Example: sendGmail -u "My subject line" -t "test@whatever.com" < message.txt

function sendGmailImmed {
        local authFile="$HOME/.sendGmailAuthFile"
        for arg in "$@"; do
                if [[ "$arg" == "-k" ]]; then
                        shift
                        authFile="$1"
                        shift
                fi
        done
        initAuthFile $authFile
        source $authFile

        sendEmail -f $user -xu $user -xp $pwd -s smtp.gmail.com:587 -o tls=yes "$@"
}

function initAuthFile {
        # If the authfile doesn't exist, we'll create a dummy:
        if [[ ! -f $1 ]]; then
                echo "# sendGmail authentication file: " > $1
                echo "user=my.name@gmail.com" >> $1
                echo "pwd=my-password" >> $1
                echo "A shell auth file has been created as $1"
        fi
}

if [[ -z $sourceMe ]]; then
        sendGmailImmed "$@"
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.