I enabled more logging and did a full capture, but it’s way too much to post it all. As far as I can tell everything up to this point passes all the checks, ie, sender, recipient, domains, etc. According to CoPilot:
Amazon SES aborted the SMTP transaction before sending DATA.
This is why no message appears in the queue, and nothing is delivered.
🟦 Why SES aborts at this stage (common causes)
Since you didn’t ask for diagnosis, I’ll keep this tight and factual:
- SES sometimes aborts if it thinks the connection is too slow
- SES aborts if it hits an internal timeout
- SES aborts if it sees something unexpected in the greeting or capabilities
- SES aborts if it internally retries a different outbound node
- SES aborts if it thinks the recipient is invalid (even if Postfix accepted it)
- SES aborts if TLS negotiation was borderline but succeeded
- SES aborts if its internal spam/abuse heuristics trigger mid‑session
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: ctable_locate: leave existing entry key 020000001kcao1nv-d4od0ptd-504a-2dsm-4sfp-mkgfo6210do0-000000@amazonses.com?user@mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr request = lookup
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr table = mysql:/opt/postfix/conf/sql/mysql_recipient_canonical_maps.cf
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr flags = 524352
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr key = user@mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: private/proxymap socket: wanted attribute: status
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: status
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute value: 1
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: private/proxymap socket: wanted attribute: value
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: value
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute value: (end)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: private/proxymap socket: wanted attribute: (list terminator)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: (end)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: dict_proxy_lookup: table=mysql:/opt/postfix/conf/sql/mysql_recipient_canonical_maps.cf flags=lock|utf8_request key=user@mydomain.com -> status=1 result=
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: maps_find: recipient_canonical_maps: user@mydomain.com: not found
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: match_string: mydestination: mydomain.com ~? localhost.localdomain
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: match_string: mydestination: mydomain.com ~? localhost
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: match_list_match: mydomain.com: no match
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr request = lookup
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr table = mysql:/opt/postfix/conf/sql/mysql_recipient_canonical_maps.cf
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr flags = 524352
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr key = @mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: private/proxymap socket: wanted attribute: status
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: status
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute value: 1
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: private/proxymap socket: wanted attribute: value
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: value
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute value: (end)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: private/proxymap socket: wanted attribute: (list terminator)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: (end)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: dict_proxy_lookup: table=mysql:/opt/postfix/conf/sql/mysql_recipient_canonical_maps.cf flags=lock|utf8_request key=@mydomain.com -> status=1 result=
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: maps_find: recipient_canonical_maps: @mydomain.com: not found
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: mail_addr_find: user@mydomain.com -> (not found)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: maps_find: canonical_maps: user@mydomain.com: not found
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: match_string: mydestination: mydomain.com ~? localhost.localdomain
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: match_string: mydestination: mydomain.com ~? localhost
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: match_list_match: mydomain.com: no match
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: maps_find: canonical_maps: @mydomain.com: not found
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: mail_addr_find: user@mydomain.com -> (not found)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr request = lookup
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr table = mysql:/opt/postfix/conf/sql/mysql_virtual_alias_maps.cf
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr flags = 524352
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr key = user@mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: private/proxymap socket: wanted attribute: status
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: status
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute value: 0
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: private/proxymap socket: wanted attribute: value
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: value
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute value: user@mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: private/proxymap socket: wanted attribute: (list terminator)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: (end)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: dict_proxy_lookup: table=mysql:/opt/postfix/conf/sql/mysql_virtual_alias_maps.cf flags=lock|utf8_request key=user@mydomain.com -> status=0 result=user@mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: maps_find: virtual_alias_maps: proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_alias_maps.cf(0,lock|fold_fix|utf8_request): user@mydomain.com = user@mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: mail_addr_find: user@mydomain.com -> user@mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: report recipient to all milters (flags=0x0)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: milter_macro_lookup: "i"
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: milter_macro_lookup: "{rcpt_addr}"
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: ctable_locate: leave existing entry key 020000001kcao1nv-d4od0ptd-504a-2dsm-4sfp-mkgfo6210do0-000000@amazonses.com?user@mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: milter_macro_lookup: result "user@mydomain.com"
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: milter_macro_lookup: "{rcpt_host}"
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: ctable_locate: leave existing entry key 020000001kcao1nv-d4od0ptd-504a-2dsm-4sfp-mkgfo6210do0-000000@amazonses.com?user@mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: milter_macro_lookup: result "inet:dovecot:24"
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: milter_macro_lookup: "{rcpt_mailer}"
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: ctable_locate: leave existing entry key 020000001kcao1nv-d4od0ptd-504a-2dsm-4sfp-mkgfo6210do0-000000@amazonses.com?user@mydomain.com
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: milter_macro_lookup: result "lmtp"
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: milter8_rcpt_event: milter inet:rspamd:9900: rcpt <user@mydomain.com>
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: event: SMFIC_RCPT; macros: {rcpt_addr}=user@mydomain.com {rcpt_host}=inet:dovecot:24 {rcpt_mailer}=lmtp
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: skipping reply for event SMFIC_RCPT from milter inet:rspamd:9900
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: before input_transp_cleanup: cleanup flags = enable_header_body_filter enable_automatic_bcc enable_address_mapping enable_milters
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: after input_transp_cleanup: cleanup flags = enable_header_body_filter enable_automatic_bcc enable_address_mapping enable_milters
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: name_mask: sendmail
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: name_mask: verify
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: connect to subsystem public/cleanup
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: public/cleanup socket: wanted attribute: protocol
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: protocol
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute value: cleanup_protocol
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: public/cleanup socket: wanted attribute: queue_id
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: queue_id
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute value: 3A9243228C5
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: public/cleanup socket: wanted attribute: (list terminator)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: input attribute name: (end)
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send attr flags = 242
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: send 0 milters
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: 3A9243228C5: client=a124-194.smtp-out.amazonses.com[54.240.124.194]
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: > a124-194.smtp-out.amazonses.com[54.240.124.194]: 250 2.1.5 Ok
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: smtp_stream_setup: maxtime=300 enable_deadline=0 min_data_rate=0
postfix-mailcow-1 | Mar 11 12:27:20 eca637a4e25c postfix/smtpd[417]: watchdog_pat: 0x55fdbf5d0430
postfix-mailcow-1 | Mar 11 12:27:23 eca637a4e25c postfix/smtpd[417]: < a124-194.smtp-out.amazonses.com[54.240.124.194]: RSET
postfix-mailcow-1 | Mar 11 12:27:23 eca637a4e25c postfix/smtpd[417]: abort all milters
postfix-mailcow-1 | Mar 11 12:27:23 eca637a4e25c postfix/smtpd[417]: milter8_abort: abort milter inet:rspamd:9900
postfix-mailcow-1 | Mar 11 12:27:23 eca637a4e25c postfix/smtpd[417]: > a124-194.smtp-out.amazonses.com[54.240.124.194]: 250 2.0.0 Ok
postfix-mailcow-1 | Mar 11 12:27:23 eca637a4e25c postfix/smtpd[417]: smtp_stream_setup: maxtime=300 enable_deadline=0 min_data_rate=0
postfix-mailcow-1 | Mar 11 12:27:23 eca637a4e25c postfix/smtpd[417]: watchdog_pat: 0x55fdbf5d0430
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: < a124-194.smtp-out.amazonses.com[54.240.124.194]: QUIT
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: > a124-194.smtp-out.amazonses.com[54.240.124.194]: 221 2.0.0 Bye
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_hostname: smtpd_client_event_limit_exceptions: a124-194.smtp-out.amazonses.com ~? 127.0.0.0/8
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_hostaddr: smtpd_client_event_limit_exceptions: 54.240.124.194 ~? 127.0.0.0/8
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_hostname: smtpd_client_event_limit_exceptions: a124-194.smtp-out.amazonses.com ~? 192.168.1.0/23
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_hostaddr: smtpd_client_event_limit_exceptions: 54.240.124.194 ~? 192.168.1.0/23
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_hostname: smtpd_client_event_limit_exceptions: a124-194.smtp-out.amazonses.com ~? 172.16.59.0/24
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_hostaddr: smtpd_client_event_limit_exceptions: 54.240.124.194 ~? 172.16.59.0/24
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_hostname: smtpd_client_event_limit_exceptions: a124-194.smtp-out.amazonses.com ~? 172.22.1.0/24
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_hostaddr: smtpd_client_event_limit_exceptions: 54.240.124.194 ~? 172.22.1.0/24
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_hostname: smtpd_client_event_limit_exceptions: a124-194.smtp-out.amazonses.com ~? 104.139.4.27
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_hostaddr: smtpd_client_event_limit_exceptions: 54.240.124.194 ~? 104.139.4.27
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_list_match: a124-194.smtp-out.amazonses.com: no match
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: match_list_match: 54.240.124.194: no match
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: send attr request = disconnect
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: send attr ident = smtpd:54.240.124.194
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: private/anvil: wanted attribute: status
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: input attribute name: status
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: input attribute value: 0
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: private/anvil: wanted attribute: (list terminator)
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: input attribute name: (end)
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: abort all milters
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: milter8_abort: abort milter inet:rspamd:9900
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: disconnect event to all milters
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: milter8_disc_event: quit milter inet:rspamd:9900
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: disconnect from a124-194.smtp-out.amazonses.com[54.240.124.194] ehlo=1 mail=1 rcpt=1 rset=1 quit=1 commands=5
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: free all milters
postfix-mailcow-1 | Mar 11 12:27:45 eca637a4e25c postfix/smtpd[417]: free milter inet:rspamd:9900
Does this make any sense?
Thanks