กำหนดค่า Postfix เพื่อส่ง / ส่งอีเมล Gmail (smtp.gmail.com) ผ่านทางพอร์ต 587


9

ใช้ Centos 5.4 พร้อม Postfix ฉันสามารถทำ

mail foo@gmail.com 
subject: blah
 test
.
Cc:

และข้อความจะถูกส่งไปยัง gmail แต่จะอยู่ในโฟลเดอร์สแปมซึ่งคาดว่าจะได้

เป้าหมายของฉันคือการสร้างอีเมล msgs และทำให้พวกเขาปรากฏในกล่องจดหมายปกติ! ตามที่ฉันเข้าใจ Postfix / Gmail เป็นไปได้ที่จะกำหนดค่า Postfix ให้ส่ง / ส่งเมลผ่านผู้ใช้ที่ผ่านการตรวจสอบแล้ว / ถูกต้องโดยใช้พอร์ต 587 ซึ่งจะไม่ทำให้จดหมายถูกมองว่าเป็นสแปมอีกต่อไป

ฉันได้ลองใช้พารามิเตอร์จำนวนหนึ่งตามไซต์ / บทความต่าง ๆ จาก 'net โดยไม่มีโชค บางบทความดูเหมือนว่าขัดแย้งกับบทความอื่นจริง ๆ ! ฉันได้ดูการโพสต์ของ stacflow ในเรื่องนี้ด้วย แต่ฉันก็ยังขาดอะไรบางอย่างไป ... พูดคุยกับคนไม่กี่คนใน IRC (Centos / Postfix) และยังมีคำถาม ..

ดังนั้นฉันจึงหันไปใช้ Serverfault อีกครั้ง!

หากมีใครบางคนที่สามารถจัดการเรื่องนี้ได้สำเร็จคุณควรจะโพสต์ main.cf, sasl-passwd ของคุณและไฟล์ conf อื่น ๆ ที่คุณใช้เพื่อให้ทำงานได้หรือไม่! หากฉันสามารถตรวจสอบไฟล์กำหนดค่าของคุณฉันหวังว่าฉันจะสามารถดูได้ว่าฉันทำอะไรผิดพลาดและหาวิธีแก้ไขปัญหา

ขอบคุณสำหรับการอ่านนี้และความช่วยเหลือ / ตัวชี้ใด ๆ ที่คุณให้!

ป.ล. , ถ้ามีโพสต์สแต็คที่พูดถึงสิ่งนี้ที่ฉันอาจพลาดไป, อย่าลังเลที่จะชี้ให้ฉันเห็น!

ทอม

คำตอบ:


16

ในขณะที่ฉันไม่ได้พยายามถ่ายทอดผ่านผู้ให้บริการโดยใช้พอร์ตการส่ง (587) มันควรจะเป็นไปได้ ในการเปิดใช้งาน Postfix ในการถ่ายทอดคุณจะต้องตั้งค่าไฟล์ด้วยข้อมูลรับรองที่ได้รับการรับรองความถูกต้องเพื่อใช้งานและทำการแก้ไข/etc/postfix/main.cfไฟล์ config ของคุณ

แรกคือการรับรองความถูกต้อง สำหรับเรื่องนี้ฉันเพียงแค่ใช้/etc/postfix/sasl_passwdซึ่งฉันเพิ่มบรรทัดที่เหมาะสมโดยใช้แม่แบบ:

smtp.provider.com    smtp_user:smtp_passwd

คุณจะต้องแน่ใจว่าไฟล์นี้ได้รับการปกป้องดังนั้นฉันขอแนะนำให้คุณroot:rootเป็นเจ้าของและ0600ตั้งค่าการอนุญาตไว้ จากนั้นคุณจะต้องเรียกใช้สิ่งต่อไปนี้เพื่อสร้างเวอร์ชันที่แมปแฮชเป็นรูท

postmap hash:/etc/postfix/sasl_passwd

ด้วยวิธีนี้ให้ความสนใจของคุณไป/etc/postfix/main.cfคุณอาจพบค่าบางอย่างที่ตั้งค่าไว้แล้วดังนั้นคุณจะต้องเปลี่ยนค่าตามลำดับ แต่รายละเอียดที่สำคัญมีดังนี้:

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_tls_security_level = may

สิ่งเหล่านี้จะทำให้ Postfix สามารถใช้ไฟล์ sasl_passwd เพื่อตรวจสอบสิทธิ์เมื่อส่งจดหมาย คุณจะต้องแจ้งให้ Postfix ทราบว่าควรใช้ผู้ให้บริการเพื่อส่งจดหมายโดยเพิ่มการกำหนดค่า

relayhost = smtp.provider.com:port

โดยค่าเริ่มต้น Postfix จะถือว่าพอร์ต 25 หากคุณไม่ได้ระบุและสิ่งนี้ได้ผลสำหรับฉันในอดีต ด้วยการตั้งค่าที่คุณร้องขอคุณจะต้องระบุ 587 เป็นพอร์ต ด้วยที่กล่าวว่าฉันไม่แน่ใจว่าคุณจะต้องแก้ไขรายการ sasl_passwd ให้เป็นsmtp.provider.com:587เพียงsmtp.provider.comเพราะฉันไม่ได้ลองทำผ่านพอร์ตที่ไม่ใช่ค่าเริ่มต้นก่อนดังนั้นคุณจะต้องลองด้วยตัวคุณเอง

ขั้นตอนการกำหนดค่าเหล่านี้เพียงอย่างเดียวกำลังจัดการการส่งต่อจดหมายบนเซิร์ฟเวอร์หลายตัวที่ฉันดูแลผ่านเซิร์ฟเวอร์จดหมายกลาง

อัปเดตเพื่อรวมตัวอย่างการทำงานอย่างสมบูรณ์

จริง ๆ แล้วกลายเป็นว่าฉันได้กำหนดค่าแล็ปท็อป Ubuntu (ใช้เดเบียน) ให้ใช้พอร์ต 587 กับผู้ให้บริการอีเมลของฉัน (ไม่ใช่ Gmail) เนื่องจากผู้ให้บริการ DSL บล็อกทราฟฟิกพอร์ต 25 ขาออก ฉันอัปเดตให้ใช้หนึ่งในบัญชี Gmail ของฉันเพื่อส่งเมลแทน การเปลี่ยนแปลงเพียงอย่างเดียวที่ฉันต้องการ

ฉันปิดบังข้อมูลส่วนตัว แต่ไม่เช่นนั้นการวางตามที่เป็นอยู่ก็คือการกำหนดค่าการทำงานสำหรับ Postfix

ก่อนอื่นเรามี/etc/postfix/main.cf:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_security_level = may

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = solitare, localhost.localdomain, , localhost
relayhost = smtp.gmail.com:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =

ต่อไปเรามี/etc/postfix/sasl_passwd:

smtp.gmail.com:587  myusername@gmail.com:mypassword

จากนั้นฉันก็ใช้งานเซสชัน SMTP ต่อไปนี้:

jbouse@solitare:~$ telnet localhost 25
Trying 127.0.0.1...
Connected to solitare.
Escape character is '^]'.
220 example.com ESMTP Postfix (Ubuntu)
helo localhost
250 example.com
mail from: jbouse@example.com
250 2.1.0 Ok
rcpt to: myotherusername@gmail.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
To: myotherusername@gmail.com
From: jbouse@example.com
Subject: Testing Postfix smarthost via Gmail
this is just a test
.
250 2.0.0 Ok: queued as 6269B280191
quit
221 2.0.0 Bye
Connection closed by foreign host.

จากนั้นฉันเข้าสู่myotherusernameบัญชี Gmail ของฉันและอ่านข้อความ:

Return-Path: <myotherusername@gmail.com>
Received: from example.com (mydslproviderhostname.net [x.x.x.229])
        by mx.google.com with ESMTPS id 6sm401663ywd.11.2010.03.04.19.19.58
        (version=TLSv1/SSLv3 cipher=RC4-MD5);
        Thu, 04 Mar 2010 19:19:58 -0800 (PST)
Sender: "Jeremy Bouse" <myotherusername@gmail.com>
Received: from localhost (solitare [127.0.0.1])
    by example.com (Postfix) with SMTP id 6269B280191
    for <myotherusername@gmail.com>; Thu,  4 Mar 2010 22:17:39 -0500 (EST)
To: myotherusername@gmail.com
From: jbouse@example.com
Subject: Testing Postfix smarthost via Gmail
Message-Id: <20100305031745.6269B280191@example.com>
Date: Thu,  4 Mar 2010 22:17:39 -0500 (EST)

this is just a test

ตอนนี้ฉันแสดงให้เห็นว่า 13 ปีของฉันในฐานะผู้ดูแลระบบฉันไม่ได้สูญเสียฉันได้รับอีเมลจากแล็ปท็อปของฉันผ่าน Gmail โดยไม่จำเป็นต้องสร้างใบรับรอง x.509 ที่ลงชื่อเองด้วยตนเองเพราะคนอื่นจะบอกคุณ นอกจากนี้ที่สำคัญในการ/etc/postfix/main.cfเป็นsmtp_tls_security_levelการตั้งค่าที่จะอาจจะบอก Postfix ว่ามันโอเคที่จะออกSTARTTLSคำสั่งเมื่อเชื่อมต่อกับเอ็มทีอีกถ้าสนับสนุน TLS หากคุณลืมการตั้งค่าsmtp_tls_security_levelคุณอาจเห็นรายการในรายการของคุณ/var/log/mail.logตาม:

Mar  4 22:10:58 solitare postfix/smtp[19873]: 20E07280191: to=<myotherusername@gmail.com>, relay=smtp.gmail.com[74.125.47.109]:587, delay=38, delays=38/0.03/0.08/0.01, dsn=5.7.0, status=bounced (host smtp.gmail.com[74.125.47.109] said: 530 5.7.0 Must issue a STARTTLS command first. 20sm399188ywh.48 (in reply to MAIL FROM command))

อย่างไรก็ตามด้วยการตั้งค่าอย่างถูกต้องคุณควรเห็นบางสิ่งตามบรรทัด:

Mar  4 22:20:00 solitare postfix/smtp[20313]: 6269B280191: to=<myotherusername@gmail.com>, relay=smtp.gmail.com[74.125.47.109]:587, delay=141, delays=110/29/0.36/1.9, dsn=2.0.0, status=sent (250 2.0.0 OK 1267759200 6sm401663ywd.11)

สวัสดี Jeremy ... ขอบคุณสำหรับการตอบกลับ คำถามเล็กน้อย. ฉันเคยเห็นโพสต์สุทธิที่มี smtpd _... params .. ฉันเอาไปฉันไม่ต้องการมัน นอกจากนี้บางบทความมี / อ้างถึง certs TSL .. ฉันต้องจัดการกับสิ่งเหล่านั้นหรือไม่? ขอบคุณ !!
tom smith

smtpd _... params สำหรับ Postfix เป็นเซิร์ฟเวอร์ ... ในกรณีของการถ่ายทอดไปยัง smarthost Postfix นั้นทำงานเป็นไคลเอนต์ซึ่งใช้ smtp _... params
Jeremy Bouse

1
เห็นได้ชัดว่าคุณไม่ทราบว่าสิ่งที่คุณกำลังพูดถึง ฉันขอแนะนำให้คุณอ่านบน SMTP และ TLS / SSL / x.509 นิดหน่อยเนื่องจากคุณขาดความรู้ในเรื่องนี้
Jeremy Bouse

1
felipe-alfaro.org/blog/2009/05/10/… ... ย่อหน้าที่สองสะท้อนความเห็นของฉันเอง ...
Jeremy Bouse

1
ขอบคุณสำหรับการล้างข้อมูลนั้นเจเรมี ฉันมักจะคิดว่ามันแปลก ๆ เล็กน้อยที่คุณต้องเซ็นใบรับรองของคุณเอง แต่ในความเร่งรีบของฉัน (และในบทความ / แบบฝึกหัดที่ฉันเคยเห็น) พวกเขาทั้งหมดบอกว่าจะทำเช่นนั้น ใช้ชีวิตและเรียนรู้
gravyface
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.