如何为发件人地址配置真实域名

如何为发件人地址配置真实域名

我尝试使用 php 函数发送电子邮件mail(),但不知何故失败了,并抱怨需要真实的域名。在邮件日志中观察到以下内容:

sendmail 4984 r25984:来自=apache,大小=273,类=0,nrcpts=1,msgid=<[电子邮件保护]>,relay=apache@localhost
sendmail 4985 r25985: ruleset=check_mail, arg1=,relay=mydomain.com [127.0.0.1],reject=553 5.5.4 ... 发件人地址需要真实域名
sendmail 4984 r25984: [电子邮件保护], ctladdr=apache (48/48), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=30273, reply=[127.0.0.1] [127.0.0.1], dsn=5.6.0, stat=数据格式错误
sendmail 4984 r25984: r25984: DSN: 数据格式错误

cron 能够发送电子邮件至[电子邮件保护]每当 logrotate 出现问题时。我不确定为什么 php 无法做到这一点。我尝试使用以下内容更改 sendmail.mc 中的默认配置:

MASQUERADE_AS(`mydomain.com')dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
MASQUERADE_DOMAIN(localhost)dnl
MASQUERADE_DOMAIN(localhost.localdomain)dnl
MASQUERADE_DOMAIN(mycom)dnl

但是,它似乎没有任何效果。php 邮件函数中的地址标头已经设置。我还确保httpd_can_sendmail启用了 SELinux。我还需要做什么才能让邮件送达?

答案1

我想我刚刚解决了这个问题。我有以下内容/etc/hosts

127.0.0.1 www.mydomain.com test.mydomain.com
127.0.0.1 cdn.mycdn.com
127.0.0.1 localhost.localdomain localhost myserver.com

我需要将 myserver.com 放在行首,localhost.localdomain以便发送邮件会认为它正在使用真实的域名来发送电子邮件。

答案2

就我的情况而言,在 AWS 实例上的 Ubuntu 16.04 上,需要添加/etc/mail/sendmail.mc

define(`confDOMAIN_NAME', `mydomainname.com')dnl

在文件末尾的行之前的一行上MAILER_DEFINITIONS,并将同一行添加到末尾/etc/mail/submit.mc。然后输入sudo suroot 权限,并使用以下命令编译配置:

m4 sendmail.mc > sendmail.cf
m4 submit.mc > submit.cf

...然后exitsudo。最后,sudo service sendmail restart重新启动 sendmail,从那时起,电子邮件就显示为从域名发送的。不需要其他 FEATURE 或 MASQUERADE 命令,也不需要文件中的条目/etc/hosts

答案3

您必须在脚本中配置电子邮件的标题。From: [email protected]

答案4

在您的sendmail.mc添加中:

LOCAL_CONFIG
Djmyserver.com

重新编译sendmail.cf,重新启动 sendmail 就可以了

相关内容