在 CentOS-Bash 共享托管环境中,我托管一个网站,其中包含一个带有 PHPmail()
函数的简单后端-前端联系表单。
测试电子邮件可以到达我的 Gmail 帐户,但如果它们确实到达(这种情况非常罕见),则需要很长时间,通常超过一个小时。
我从我的托管公司的基础设施开发人员那里了解到,这是因为:
- 最终发送的电子邮件
[email protected]
没有有效的 DKIM、有效的 SPF 和 SMTP 身份验证
基础设施开发人员建议,为了解决这个问题,我将在我的托管环境中打开一个电子邮件帐户并将电子邮件转至那里,这样我就确实拥有有效的 DKIM、有效的 SPF 和 SMTP 身份验证。
但假设我仍然想将电子邮件转介至我的 Gmail 帐户;
如何在 Linux 环境 (CentOS) 中为后端-前端联系表单设置 SMTP 身份验证?
这甚至可以在共享托管环境中实现(那么 DKIM 和 SPF 又如何呢?)...
笔记
- 在上述问题的基础上添加的另一个问题发生在第二个表格中,该表格比本次会议基础上的简单测试表格稍微复杂一些;
这"From" => $email
标头的电子邮件地址是我自己的 Gmail 地址,因此最终的发送地址[email protected]
被错误地理解为电子邮件伪造(“欺骗”),再次,除了上述服务器不匹配之外
答案1
PHPmail()
依赖于底层操作系统的邮件传输代理(简称 MTA;它是一种电子邮件服务软件,如 Sendmail、Postfix、Exim、OpenSMTPD...)。在您的情况下,Web 主机的 MTA 似乎基本上是在“出厂默认设置”下运行,这表明主机提供商并不期望它实际上以这种方式用于发送邮件。
我建议更改您的 PHP 表单处理程序以使用PHP邮件程序或类似的东西而不是非常基本的mail()
。这将允许您在应用程序中指定邮件服务器,而不是依赖主机的默认设置。
这还允许您使用 SMTP 身份验证(及其必要的配套加密)等功能。如果网络主机在多个用户之间共享,您很可能没有根访问权限 - 在这种情况下,使用 PHPMailer 之类的东西可能是您的唯一方法能选择您的应用程序将使用的邮件服务器设置。
如果您想向全世界发送邮件,DKIM 和 SPF 是相关的;仅仅将邮件转发到一个帐户就太过分了。通过将您的应用程序配置为使用端口 587 或 465 联系 SMTP 服务器(具体取决于 TLS 的应用方式),您的应用程序在发送邮件时基本上就像邮件客户端一样,让 SMTP 服务器管理员无需担心 DKIM和防晒指数。但是服务器管理员将要求您(/您的应用程序)进行身份验证,然后才能让您受益于服务器的 DKIM 和 SPF...并且需要加密,因为您不想将身份验证凭据传递到未加密的服务器。
即便如此,我还是建议不要使用您的个人 Gmail 帐户通过网络表单发送电子邮件。获取一个单独的帐户,以防万一网络主机被黑客攻击并且邮件访问凭据被盗。