ฉันใช้ Ubuntu 16.04 บน Amazon Lightsail ฉันเพิ่งกำหนดค่า Postfix เพื่อส่งอีเมล

  • ถ้าฉันส่งอีเมลหลังจากผ่านไปสองสามชั่วโมง อีเมลจะได้รับทันที

  • ถ้าฉันส่งอีเมลหลายฉบับพร้อมกัน อีเมลจะล่าช้าประมาณ 10-30 นาที

คำถาม:

  1. ฉันจะแก้ไขความล่าช้าเพื่อให้ส่งอีเมลได้ทันทีได้อย่างไร
  2. ฉันจะแน่ใจได้อย่างไรว่าอีเมลทั้งหมดที่ส่งถึงผู้ใช้ (รูท & อูบุนตู) โดยแอปพลิเคชันในพื้นที่ถูกส่งไปยังอีเมลภายนอกที่มีโดเมนเดียวกัน

การกำหนดค่าของฉัน:

/etc/resolv.conf

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.x.x.x
search ec2.internal

/etc/hosts

127.0.0.1       localhost
127.0.1.1       webserver.DOMAIN-NAME.com webserver
3x.x.x.x        webserver.DOMAIN-NAME.com webserver #3.x.x.x is the IP that is mentioned in domain DNS

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

/etc/ชื่อโฮสต์

webserver

/etc/aliases

postmaster:    root
root:          [email protected]

/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

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

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = webserver.DOMAIN-NAME.com
mydomain = DOMAIN-NAME.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#myorigin = /etc/mailname
myorigin = $mydomain
#mydestination = $myhostname, DOMAIN-NAME.com, webserver.DOMAIN-NAME.com, localhost.DOMAIN-NAME.com, localhost
mydestination =
#relayhost =
relayhost = $mydomain
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
#inet_interfaces = all
inet_interfaces = loopback-only
#inet_protocols = all
inet_protocols = ipv4

/var/log/mail.log

May  1 02:17:15 webserver postfix/smtp[6105]: 0287CC775F: to=<[email protected]>, relay=alt1.aspmx.l.google.com[64.233.190.27]:25, delay=531, delays=465/0.01/64/1.9, dsn=2.0.0, status=sent (250 2.0.0 OK 1493605035 h2si13051738qte.100 - gsmtp)
May  1 02:17:15 webserver postfix/qmgr[6102]: 0287CC775F: removed
May  1 02:17:40 webserver postfix/smtp[6107]: connect to alt1.aspmx.l.google.com[64.233.190.27]:25: Connection timed out
May  1 02:17:40 webserver postfix/smtp[6108]: connect to alt1.aspmx.l.google.com[64.233.190.27]:25: Connection timed out
May  1 02:18:10 webserver postfix/smtp[6108]: connect to aspmx2.googlemail.com[64.233.190.27]:25: Connection timed out
May  1 02:18:10 webserver postfix/smtp[6107]: connect to aspmx3.googlemail.com[209.85.203.26]:25: Connection timed out
May  1 02:18:40 webserver postfix/smtp[6108]: connect to aspmx3.googlemail.com[209.85.203.26]:25: Connection timed out
May  1 02:18:40 webserver postfix/smtp[6107]: connect to aspmx2.googlemail.com[64.233.190.27]:25: Connection timed out
May  1 02:18:40 webserver postfix/smtp[6108]: CBE50C77C6: to=<[email protected]>, relay=none, delay=7845, delays=7695/0.02/150/0, dsn=4.4.1, status=deferred (connect to aspmx3.googlemail.com[209.85.203.26]:25: Connection timed out)
May  1 02:18:40 webserver postfix/smtp[6107]: 2266DC775D: to=<[email protected]>, relay=none, delay=174, delays=24/0.01/150/0, dsn=4.4.1, status=deferred (connect to aspmx2.googlemail.com[64.233.190.27]:25: Connection timed out)
May  1 02:20:02 webserver postfix/scache[6110]: statistics: start interval May  1 02:16:41
May  1 02:20:02 webserver postfix/scache[6110]: statistics: domain lookup hits=0 miss=1 success=0%
May  1 02:20:02 webserver postfix/scache[6110]: statistics: address lookup hits=0 miss=2 success=0%
May  1 02:20:02 webserver postfix/scache[6110]: statistics: max simultaneous domains=1 addresses=1 connection=1
May  1 02:26:10 webserver postfix/qmgr[6102]: 2266DC775D: from=<[email protected]er.DOMAIN-NAME.com>, size=425, nrcpt=1 (queue active)
May  1 02:26:10 webserver postfix/smtp[6138]: 2266DC775D: to=<[email protected]>, relay=aspmx.l.google.com[209.85.201.26]:25, delay=625, delays=624/0.01/0.09/0.18, dsn=2.0.0, status=sent (250 2.0.0 OK 1493605570 p15si12740899qta.122 - gsmtp)
May  1 02:26:10 webserver postfix/qmgr[6102]: 2266DC775D: removed
answer

Amazon Lightsail เป็นโซลูชัน VPS บนระบบคลาวด์ราคาต่ำสำหรับนักพัฒนาแอปพลิเคชันเว็บ ทุกอย่างในเอกสารประกอบของ Lightsailเกี่ยวข้องกับการเลือกและกำหนดค่าเว็บเซิร์ฟเวอร์และแพลตฟอร์ม CMS ไม่ได้ระบุไว้อย่างชัดเจน แต่เห็นได้ชัดว่า Lightsail ไม่ได้รับการพิจารณาให้เป็นเซิร์ฟเวอร์อีเมล แม้แต่ชื่อเซิร์ฟเวอร์ของคุณก็ยังเป็นwebserver!

เว็บแอปพลิเคชันอาจส่งอีเมลเป็นระยะๆ ดังนั้นพอร์ต SMTP 25 จึงไม่ถูกบล็อกอย่างสมบูรณ์ แต่มีข้อจำกัด การกำหนดค่า Postfix ของคุณใช้ได้สำหรับเซิร์ฟเวอร์ SMTP แบบสแตนด์อโลน แต่mail.logจะแสดงสิ่งที่เกิดขึ้น: หลังจากที่คุณถึงขีดจำกัด การเชื่อมต่อ SMTP จะหมดเวลาและอีเมลได้รับdeferredเลื่อนออกไปเพื่อลองใหม่ในภายหลัง RFC 3463ตามรหัสสถานะ SMTP dsn=4.4.1บอกเหมือนกัน:

4.4.1 The recipient’s server is not responding

This is an error emanating from your server indicating that the recipient’s server is not responding. Your server will automatically try again a number of times – how many depends on how your server has been configured.

คุณพูดถึงในความคิดเห็นว่าสิ่งนี้เกิดขึ้นกับ Postfix บน Ubuntu เท่านั้น แต่ไม่ใช่กับ Sendmail บน Amazon Linux ฉันไม่คุ้นเคยกับ Amazon Linux และ Amazon SESเท่าไหร่ แต่ฉันเดาว่า Amazon Linux Sendmail อาจมี Amazon SES ที่กำหนดค่าล่วงหน้าเป็นรีเลย์ เป็นไปได้ที่จะรวม Amazon SES กับ Postfixด้วย

อย่างที่คุณมีrelayhost = $mydomainคุณอาจกำลังพยายามส่งต่อจดหมายทั้งหมดไปยังเซิร์ฟเวอร์อีเมลภายนอกของโดเมนของคุณ ตามที่ควรจะเป็น อย่างไรก็ตาม ข้อจำกัดของพอร์ต25ไม่มีข้อยกเว้นสำหรับ MTA ภายนอกของคุณ ดังนั้นคุณควรใช้ตัวแทนการส่งข้อความ (พอร์ต587) แทน

  1. คุณต้องกำหนดค่า MSA ในเซิร์ฟเวอร์อีเมลของคุณ ถ้าเป็น Postfix คุณควรมี/etc/postfix/master.cfส่วนที่ขึ้นต้นด้วยsubmissionuncommented:

     submission inet n       -       -       -       -       smtpd
       -o syslog_name=postfix/submission
       -o smtpd_tls_security_level=encrypt
       -o smtpd_sasl_auth_enable=yes
       -o smtpd_client_restrictions=permit_sasl_authenticated,reject
       -o milter_macro_daemon_name=ORIGINATING
    
  2. กำหนดค่า Lightsail ของคุณrelayhostเพื่อใช้พอร์ตการส่งและการตรวจสอบสิทธิ์main.cf:

     relayhost = $mydomain:587
     # Alternative example without DNS MX lookup:
     # relayhost = [mail.example.com]:587
     smtp_sasl_auth_enable = yes
     smtp_sasl_security_options = noanonymous
     smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
     smtp_use_tls = yes
     smtp_tls_security_level = encrypt
     smtp_tls_note_starttls_offer = yes
    
  3. /etc/postfix/sasl_passwdเป็นBerkeley DB ( hash:) สำหรับชื่อผู้ใช้และรหัสผ่านเพื่อใช้ในการตรวจสอบสิทธิ์กับเซิร์ฟเวอร์เกตเวย์อีเมล ตัวอย่าง:

     # destination                   credentials
     [mail.example.com]              username:password
     # Alternative form:
     # [mail.example.com]:submission username:password
    

สำหรับข้อมูลเพิ่มเติมโปรดดูที่Postfix SASL Howto