创建电子邮件表单,用户在其中选择目标电子邮件并从自己的电子邮件中发送

Posted

技术标签:

【中文标题】创建电子邮件表单,用户在其中选择目标电子邮件并从自己的电子邮件中发送【英文标题】:Creating email form where user picks destination email and sends it from their own 【发布时间】:2021-04-15 04:22:23 【问题描述】:

我之前没有使用 php 的经验,但我正在尝试创建一个 html 电子邮件表单,该表单将消息从用户的电子邮件地址发送到从下拉菜单中选择的收件人。

HTML:

    <form action="contact-form.php" method="post">
Which person would you like to contact?</strong><br>
<select name="person" size="1">
<option value="example1@me.com" selected>one</option>
<option value="example2@me.com">two</option>
<option value="example3@me.com">three</option>
<option value="example4@me.com">four</option>

<input type="hidden" name="subject" value="inquiry">
Message:<br>
<textarea name="Comments" rows="5" cols="42"></textarea><P>
Tell the donor how to get in touch with you:<br>
<p>
Name<input type="text" size="35" maxlength="256" name="realname"><br>
E-mail<input type="text" size="35" maxlength="256" name="UserEmail"><br>
Telephone<input type="text" size="35" maxlength="256" name="UserTel"><br>

PHP:

<?php $recipient = $POST['person'];
$subject = "Contact Form";
$message = $_POST['message'];
$formcontent="From: $name \n Message: $message";
$name = $_POST['realname'];
$email = $_POST['UserEmail'];
$telephone = $_POST['EserTel'];
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "Thank You!";?>

我如何确定电子邮件会从用户的地址发送?我的下拉菜单设置是否有效?我希望比我有更多知识的人能够快速浏览一下并给我反馈。

更新:------------------------------ ------

因此,据我了解,感谢您的帮助,我离这更近了一点

这是我的新 PHP 代码,看起来更好吗?

<?php  $sending = [
 ...
 1 => 'one@me.com',
 ...
 2 => 'two@me.com',
 ...
 3 => 'three@me.com',
 ...
 4 => 'four@me.com',
 ...
];
$subject = "Contact Form";
$message = $_POST['message'];
$formcontent="From: $name \n Message: $message";
$name = $_POST['realname'];
$email = $_POST['UserEmail'];
$telephone = $_POST['UserTel'];
$headers = "From: ['realname'] <info@mywebaddress.com>\r\n";
$headers = "Reply-To: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "Thank You!";
?>

【问题讨论】:

这是不可能的,原因很充分。这意味着任何人都可以从他想要的任何地址发送电子邮件。不是个好主意,对吧? 不可能的原因why:您要用于实际发送电子邮件的电子邮件服务器将拒绝它。这就是呼叫预防中继。 【参考方案1】:

你有三个主要问题。

最明显的是我可以在“发件人”字段中输入任何内容。我可以使用我的真实电子邮件 - 或任何其他电子邮件。

一个不太明显的问题是您发送给'person'选择的值。这也是可以操纵的!你应该有类似的东西

 <option value="1">LSerni</option>

然后在接收代码中,一个数组

 $sending = [
     ...
     1 => 'lserni@gmail.com',
     ...
 ];

这样即使我可以强制发送我喜欢的任何号码,如果该号码不在 $sending 数组中,也不会生成邮件。

第三个问题是您无法保证 Web 服务器将被其邮件中继授权代表任何 John Doe 发送电子邮件。很有可能不会。

即便如此,来自“john@somewhere.foo”的电子邮件可能是从具有 DKIM 和/或 SFP 安全策略的域发送的,这将使任何发件人机器除了注册的某处.foo MX - 您的服务器不是 - 被禁止并标记为垃圾邮件来源:

 (from "john@mail.baz" to "joe@mail.foo")
 webserver.bar      mail.bar                           mail.foo       joe@mail.foo
 YOUR SERVER ---> ITS MAIL RELAY --> ... --> ... --> RCPT SERVER ----> USER
                   |                                  |                  |
                  refuses to send                refuses to receive      |
                  except @mail.bar              except from @mail.bar    |
                                                                         |
                                   marks as spam ------------------------+

总而言之,您最好将用户的电子邮件作为文本内容包含在电子邮件中,并且电子邮件本身使用网络服务器默认允许的电子邮件地址发送(询问您的网络服务器的维护人员或 ISP 了解详情)。

(另一种更简单的方法是使用mailto: 链接:这会将所有内容转移到读者的系统和他自己熟悉的邮件程序中)。

【讨论】:

我要添加,而不是将From 标头设置为用户提供的地址,而是将Reply-To 标头设置为它。这不会触发 SPF/DKIM,但收件人的电子邮件客户端应用程序仍会像发件人直接创建邮件一样运行。 非常感谢你们。我添加到问题中的 php 更好吗?

以上是关于创建电子邮件表单,用户在其中选择目标电子邮件并从自己的电子邮件中发送的主要内容,如果未能解决你的问题,请参考以下文章

从自定义电子邮件表发送电子邮件的代理作业

Wordpress 两步注册表单

自定义 HTML 电子邮件表单 [重复]

Google Apps 脚本 | Switch Case 仅选择默认选项

html 允许用户选择表单的电子邮件地址。此代码允许您在表单中设置“选择”字段,以允许用户设置

html 允许用户选择表单的电子邮件地址。此代码允许您在表单中设置“选择”字段,以允许用户设置