为什么允许在“From: "”中使用任何电子邮件地址?PHP.Mail()函数中的header


Why is it allowed to use any email adress in "From: " header in PHP.Mail() function?

我很抱歉,如果我的问题听起来很幼稚,但我没有人可以问。我是PHP的新手,现在我正在玩PHP.mail()函数

我使用XAMPP, PHP, SMTP服务器在我们的工作只是为了看到的功能。在C:'xampp'sendmail'sendmail.ini我设置

smtp_server=mail.heaven.com
auth_username=fairy
auth_password=nice

我创建了sendmail.php发送测试邮件给我自己:

<?php
$to      = 'fairy@heaven.com';
$subject = 'greetings';
$message = 'if you read this, everything is fine';
$headers = 'From: devil@hell.com';
mail($to, $subject, $message, $headers);
?>

我运行了它,收到了devil@hell.com的邮件,所以实际上是我的。我无法从这条消息中找到真正的发件人,我试图回复失败…因为devil@hell.com并不存在。

现在来了,什么让我困惑。据我所知,第一步是向SMTP服务器提供真正的登录名和密码(auth_username, auth_password)。服务器知道我的存在,它让我在,所以我可以从我的真实帐户发送电子邮件。我以为,SMTP服务器会自动从我的帐户中获取所有必要的信息,并将其打包到电子邮件消息中,这样其他人就可以回复了,但显然不是。

我不明白,为什么我可以这么容易地添加误导信息。就我而言,我每天都可以用我的账户发假邮件来骚扰我的同事。我无法找出,谁才是真正的发送者。

此信息是否存储在任何地方?客户端是否可以看到谁发送了电子邮件,或者完全依赖于PHP.mail()函数中的From: header ?

谢谢澄清

SMTP协议就是这样制定的。

你在告诉收件人你应该是谁,以及它如何回答你。没有谁控制电子邮件域或电子邮件用户的中央存储库。

它可以自己检查,通过实现安全机制,比如gmail使用DKIM在做什么。你不能冒充gmail的电子邮件。