电子邮件表单问题

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' 的字段的值。例如, &lt;input type="text" id="nameInput" name="nameInput"/&gt;

您的表单#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" />

【讨论】:

以上是关于电子邮件表单问题的主要内容,如果未能解决你的问题,请参考以下文章

提交表单后发送电子邮件的 Google 表单应用脚本

HTML 电子邮件 - 电子邮件中的表单形式的按钮

电子邮件中的 Mandrill App 内联 html 表单

如何在提交表单之前验证电子邮件字段不为空

每次刷新页面时,PHP 电子邮件表单都会发送电子邮件

电子邮件表单根据附件发送多封邮件