我尝试使用 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 su
root 权限,并使用以下命令编译配置:
m4 sendmail.mc > sendmail.cf
m4 submit.mc > submit.cf
...然后exit
sudo。最后,sudo service sendmail restart
重新启动 sendmail,从那时起,电子邮件就显示为从域名发送的。不需要其他 FEATURE 或 MASQUERADE 命令,也不需要文件中的条目/etc/hosts
。
答案3
您必须在脚本中配置电子邮件的标题。From: [email protected]
答案4
在您的sendmail.mc
添加中:
LOCAL_CONFIG
Djmyserver.com
重新编译sendmail.cf
,重新启动 sendmail 就可以了