【发布时间】:2020-09-24 09:25:34
【问题描述】:
实际上,我在使用我的 VPS 服务器发送邮件时遇到了问题。 我的服务器安装了 PHP 和 sendmail。
我尝试从 HTML 表单发送一封电子邮件,该表单在 JS 中检查,然后以 HTML 格式发送,请求启动良好,但没有发送任何内容。
我的 JS 代码:
submitMail() {
const emailValue = document.getElementById('mail').value;
const subjectValue = document.getElementById('subject').value;
const messageValue = document.getElementById('text').value;
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://ag-dev.fr/mailform.php', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
this.sendComplet();
}
};
xhr.send(JSON.stringify({
email: emailValue,
subject: subjectValue,
message: messageValue,
}));
},
我的 PHP 代码:
<?php
if (!empty($_POST['message']))
{
$to = 'contact@ag-dev.fr';
$from = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'] . "\n\n\n\n Ceci est un message envoyé depuis le formulaire de contact. Pour répondre à ce mail, envoyez un mail à l'adresse suivante : " . $_POST['email'];
$headers = 'MIME-Version: 1.0\r\n';
$headers .= 'Content-type: text/html; charset=iso-8859-1\r\n';
$headers .= 'To: Guyomar Alexis <contact@ag-dev.fr>\r\n';
$headers .= 'From: ' . ' <' . $from . '>\r\n';
mail($to,$subject,$message,$headers);
}
?>
我用 sendmail 在我的命令行服务器上运行了一个测试,我收到了没有问题的邮件。我认为我的代码或配置服务器有问题。
如果有人知道这可能来自哪里......
【问题讨论】:
-
这是一个很好的 PHP 电子邮件问题调试通用指南:stackoverflow.com/a/24644450/5947043
-
我在这里唯一注意到的是 1)
mail有一个特定的$to字段。那么你为什么要在 $headers 中再次定义“to”呢?这当然没有必要,甚至可能会导致问题。附言您甚至没有检查mail是否返回 true 或 false,因此您在调试这个方面还没有走得太远。 -
另外,2) 您允许用户在 HTML 表单中指定“发件人”地址。这是一个坏主意——许多邮件服务器如果收到这样的邮件,就会将其视为垃圾邮件而拒绝,甚至您发送邮件的服务器甚至可能根本不接受邮件进行投递。这是因为“发件人”地址很可能与生成电子邮件的服务器具有不同的域。当然,这是电子邮件欺骗者用来进行网络钓鱼尝试、垃圾邮件、假冒等很常见的事情,因此它通常被禁止或标记为可疑。
-
改为使用固定的“no-reply@yourdomain.com”类型的地址作为发件人字段。如果您想在邮件中包含提供的电子邮件地址,您可以简单地将其放在邮件正文中,或者尝试将其添加为回复字段。
-
哦,实际上,即使在您了解所有这些之前,我只是注意到:
JSON.stringify({ email: emailValue, subject: subjectValue, message: messageValue,})也是一个问题 - 您在这里发送 JSON,但 PHP 期待常规的 form-url-encoded POST价值观。因此它将无法从您发送的内容中检测到POST["message"]变量。阅读:Receive JSON POST with PHP 并相应地调整您的 PHP 代码。先解决这个问题,也许你不会对电子邮件本身有任何问题......我们会看到的。
标签: javascript php sendmail vps