电子邮件表单问题
Posted
技术标签:
【中文标题】电子邮件表单问题【英文标题】:Email form problems 【发布时间】:2015-07-12 06:58:23 【问题描述】:我有三个电子邮件表单,它允许用户向我的三个电子邮件之一发送消息,而无需编写自己的电子邮件。表格正在工作并且正在发送电子邮件,问题是电子邮件发件人和电子邮件消息等信息仅适用于我的“支持”表格,但不适用于其他两种表格(“业务”,“其他”)。 我不确定到底出了什么问题。
重要提示,之所以像我这样做有三个表格,是因为我做了三个按钮,分别称为“业务”“支持”“其他”,然后当您单击其中一个按钮时,会出现特定的表格。
内含表单的html脚本。
<!-- SUPPORT CONTACT FORM START-->
<div class="contactSupportButton"><input type="image" src="supportContactButtonNew.png" id="contactSupportBut" style="height: 40px; width: 100px" onClick="showSupForm()"/>
<div id="contactSupportForm">
<form action="supFormSend.php" method="post" id="contactForms">
<div id="nameLabelForm">
<label for="name">Name:</label><br>
<input type="text" id="nameInput" name="nameInput"/>
</div>
<div id="emailLabelForm">
<label for="mail">E-mail:</label><br>
<input type="email" id="mailInput" name="mailInput"/>
</div>
<div id="messageLabelForm">
<label for="msg">Support Message:</label><br>
<textarea id="messageInput" name="messageInput"></textarea>
</div>
<div class="submitEmailButton">
<button type="submit" id="submitButton">Send message</button>
</div>
</form>
</div>
</div>
<!-- SUPPORT CONTACT FORM ENDING-->
<!-- BUSINESS CONTACT FORM START-->
<div class="contactBusinessButton"><input type="image" src="businessContactButtonNew.png" id="contactBusinessBut" style="height: 40px; width: 110px" onClick="showBusForm()"/>
<div id="contactBusinessForm">
<form action="busFormSend.php" method="post" id="contactForms">
<div id="nameLabelForm">
<label for="name">Name:</label><br>
<input type="text" id="nameInput"/>
</div>
<div id="emailLabelForm">
<label for="mail">E-mail:</label><br>
<input type="email" id="mailInput" />
</div>
<div id="messageLabelForm">
<label for="msg">Business Message:</label><br>
<textarea id="messageInput"></textarea>
</div>
<div class="submitEmailButton">
<button type="submit" id="submitButton">Send message</button>
</div>
</form>
</div>
</div>
<!-- BUSINESS CONTACT FORM ENDING-->
<!-- OTHER CONTACT FORM START-->
<div class="contactOtherButton"><input type="image" src="otherContactButtonNew.png" id="contactOtherBut" style="height: 40px; width: 110px" onClick="showOtherForm()"/>
<div id="contactOtherForm">
<form action="otherFormSend.php" method="post" id="contactForms">
<div id="nameLabelForm">
<label for="name">Name:</label><br>
<input type="text" id="nameInput"/>
</div>
<div id="emailLabelForm">
<label for="mail">E-mail:</label><br>
<input type="email" id="mailInput" />
</div>
<div id="messageLabelForm">
<label for="msg">Other Message:</label><br>
<textarea id="messageInput"></textarea>
</div>
<div class="submitEmailButton">
<button type="submit" id="submitButton">Send message</button>
</div>
</form>
</div>
</div>
<!-- OTHER CONTACT FORM ENDING-->
将消息发送到我的电子邮件的 php 脚本。
支持表单(supFormSend.php):
<?php
$field_name = $_POST['nameInput'];
$field_email = $_POST['mailInput'];
$field_message = $_POST['messageInput'];
$mail_to = 'support@myemail.com';
$subject = 'Message regarding support from '.$field_name;
$body_message = 'From: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Message: '.$field_message;
$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";
$mail_status = mail($mail_to, $subject, $body_message, $headers);
if ($mail_status) ?>
<script language="javascript" type="text/javascript">
alert('Thank you for the message. We will contact you shortly.');
window.location = 'contact.html';
</script>
<?php
else ?>
<script language="javascript" type="text/javascript">
alert('Message failed. Please, send an email to support@myemail.com');
window.location = 'contact.html';
</script>
<?php
header('Location: index.html');
exit;
?>
业务表单(busFormSend.php):
<?php
$field_name = $_POST['nameInput'];
$field_email = $_POST['mailInput'];
$field_message = $_POST['messageInput'];
$mail_to = 'business@myemail.com';
$subject = 'Message regarding business from '.$field_name;
$body_message = 'From: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Message: '.$field_message;
$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";
$mail_status = mail($mail_to, $subject, $body_message, $headers);
if ($mail_status) ?>
<script language="javascript" type="text/javascript">
alert('Thank you for the message. We will contact you shortly.');
window.location = 'contact.html';
</script>
<?php
else ?>
<script language="javascript" type="text/javascript">
alert('Message failed. Please, send an email to business@myemail.com');
window.location = 'contact.html';
</script>
<?php
header('Location: index.html');
exit;
?>
其他形式(otherFormSend.php):
<?php
$field_name = $_POST['nameInput'];
$field_email = $_POST['mailInput'];
$field_message = $_POST['messageInput'];
$mail_to = 'other@myemail.com';
$subject = 'Message regarding other from '.$field_name;
$body_message = 'From: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Message: '.$field_message;
$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";
$mail_status = mail($mail_to, $subject, $body_message, $headers);
if ($mail_status) ?>
<script language="javascript" type="text/javascript">
alert('Thank you for the message. We will contact you shortly.');
window.location = 'contact.html';
</script>
<?php
else ?>
<script language="javascript" type="text/javascript">
alert('Message failed. Please, send an email to other@myemail.com');
window.location = 'contact.html';
</script>
<?php
header('Location: index.html');
exit;
?>
【问题讨论】:
您在其他表单的输入元素上缺少“名称”属性。 完美!非常感谢。 BTW @Fulgut98 为什么不创建一个表单,根据单击的按钮触发某些字段的开/关或隐藏数据?维护起来会更容易! 【参考方案1】:HTML 表单依赖 name 属性将数据发布到后端(在本例中为 PHP)。
当你在 PHP 中引用变量$_POST['nameInput']
时,它的值将取表单中 name 属性为 'nameInput' 的字段的值。例如,
<input type="text" id="nameInput" name="nameInput"/>
。
您的表单#contactSupportForm
正在工作,因为名称属性是为您在PHP 中引用的值设置的。
要使其他两个表单正常工作,请将 name 属性添加到 HTML 中的所有输入中(并确保 name 属性的值与您在 PHP 中引用的值相匹配),就像您在 contactSupportForm 中所做的那样。
【讨论】:
【参考方案2】:乔恩·斯特林 (Jon Stirling) 回答了您的问题。此外,如果表单在一页上,您应该更改所有不同 html 元素的 id 值。一个 id 在页面上应该是唯一的。它不一定会给你一个错误,但它是错误的,如果你开始使用 jquery/javascript,它可能会导致将来出现问题。
例如你有 3 次 id="nameInput"
【讨论】:
【参考方案3】:由于您将 From: 设置为来自您的访问者,您的网络服务器将发送一封带有 From: 的电子邮件,用于几乎任何地址。
这是一个问题,因为如果您的电子邮件服务器或服务检查 SPF 记录,反垃圾邮件措施将阻止邮件被传递。
最好从 noreply@example.com 发送电子邮件,让那些想要做出反应的人使用 reply-to: header ...(不是那么难)。
主要区别:现在重要的是您的域的 SPF 记录,更重要的是,始发域不会开始抱怨他们收到的并非来自非来源的邮件的退回。
【讨论】:
【参考方案4】:在所有表单上使用“名称”来识别输入字段,而不是“id”
第一种形式正确:
<input type="text" id="nameInput" name="nameInput"/>
其他形式不正确:
<input type="email" id="mailInput" />
【讨论】:
以上是关于电子邮件表单问题的主要内容,如果未能解决你的问题,请参考以下文章