Postfix - 找不到主机或域

Vin*_*TUR 25 smtp postfix

我刚刚在本地网络上的 Ubuntu 上安装了 Postfix。

在这个网络上,我有一个 Exchange 服务器(使用域mail.example.com)。我在向本地地址发送电子邮件时遇到问题adress@example.com

relay=none, delay=0.01, delays=0.01/0/0/0, dsn=4.3.5, status=deferred 
(Host or domain name not found. Name service error for name=example.com
type=AAAA: Host found but no data record of requested type)
Run Code Online (Sandbox Code Playgroud)

relay_domain在 Postfix 中使用解决了这个问题main.cf

relay_domains = example.com
transport_maps = hash:/etc/postfix/transport
Run Code Online (Sandbox Code Playgroud)

而在我的/etc/postfix/transport

example.com smtp:[mail.example.com]
Run Code Online (Sandbox Code Playgroud)

现在我可以发送邮件了@example.com,并且我已经测试了一些主要的网络邮件(Gmail、Yahoo、Hotmail...)。有用。但是为什么我的地址出现这个错误@example.com?我如何确定我永远不会在其他域上发现此错误?

我的 Postfix 配置是:

postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = all
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
mydestination = SRVWEB, localhost.localdomain, localhost
myhostname = SRVWEB
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relay_domains = domain.com
relayhost =
smtp_generic_maps = hash:/etc/postfix/generic
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
transport_maps = hash:/etc/postfix/transport
Run Code Online (Sandbox Code Playgroud)

Jen*_*y D 36

您的服务器在发送邮件时尝试使用 IPv6。由于mail.example.com没有 AAAA 记录(与 A 记录相同,但对于 IPv6),这不起作用。

如果您希望 Postfix从不使用 IPv6,您可以在配置文件中更改它,如 postconf(5) 手册页中所述:

When IPv6 support is enabled via the inet_protocols parameter,  Post-
fix will do DNS type AAAA record lookups.

When  both IPv4 and IPv6 support are enabled, the Postfix SMTP client
will attempt to connect via IPv6 before attempting to use IPv4.

Examples:

inet_protocols = ipv4
inet_protocols = all (DEFAULT)
inet_protocols = ipv6
inet_protocols = ipv4, ipv6
Run Code Online (Sandbox Code Playgroud)

如果您只想为此域更改它,请将您的传输映射更改为读取

example.com smtp-ipv4:[mail.domain.com]
Run Code Online (Sandbox Code Playgroud)

  • 失败的不是连接,而是它之前的 DNS 查找。当我有 `inet_protocols = all` 时,如果 `AAAA` 查找失败,它不会尝试 `A` 查找,这似乎毫无意义。此外,如果更改此值,则必须重新启动 postfix,而不仅仅是重新加载。 (8认同)