使用php发送电子邮件

时间:2014-10-02 08:40:58

标签: php html email hci

给出一个标准的html表单,如下面的那个;

<form method="post" action=<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>>
                            <div class="row half">
                                <div class="6u"><input type="text" placeholder="Name" name="name" /></div>
                                <div class="6u"><input type="text" placeholder="Email" name="email" /></div>
                            </div>
                            <div class="row half">
                                <div class="12u"><textarea name="message" placeholder="Message" name="message"></textarea></div>
                            </div>
                            <div class="row">
                                <div class="12u">
                                    <ul class="actions">
                                        <li><input type="submit" class="button" value="Send Message" name="submit" /></li>
                                        <li><input type="reset" class="button alt" value="Clear Form" name="clear"/></li>
                                    </ul>
                                </div>
                            </div>
                        </form>

以下php

if(isset($_POST['submit'])){
    $to = "enquiries@appcloudkent.com"; // this is your Email address
    $from = $_POST['email']; // this is the sender's Email address
    $name = $_POST['name'];
    $subject = "Website Enquiry";
    $message = $name . " wrote the following:" . "\n\n" . $_POST['message'];
    $headers = "From:" . $from;
    $headers2 = "From:" . $to;

    if(isValidString($from) && isValidString($name) && isValidString($message)){
        mail($to,$subject,$message,$headers);
    }
}

可以发送电子邮件,但是,这种方法会导致一些问题。由于我的表单位于页面底部,因此单击发送时页面将重定向回来,焦点将返回页面顶部。

提供足够的用户反馈以让用户知道电子邮件已发送的正确方法是什么,是否可以导航回页面并自动滚动到底部 - 允许我将发送按钮更改为绿色或其他内容?

如果做不到,有没有更好的方法来做到这一点?

由于

3 个答案:

答案 0 :(得分:4)

在表单前添加锚点链接。 <a id="anchorName"></a>

将表单发布到锚点。

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>#anchorName">

答案 1 :(得分:0)

您可以使用XMLHttpRequest提交表单,并取消按提交的默认操作。 jQuery的.post()和event.preventDefault()方法特别擅长。

答案 2 :(得分:0)

表单操作应该指向页面本身(就像在您的示例中一样),因此您可以显示验证中的错误消息(就像您没有一样)。

如果表单不在页面顶部,您可以添加锚点:

<h2><a name="theForm">The form</a></h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>#theForm">

如果表格处理得当(=发送邮件),最好重定向到另一个页面,显示成功消息。所以按F5不再提交表格(并发送另一封邮件)。

if (mail($to,$subject,$message,$headers)) {
    // redirect to page showing success message and exit script
} else {
    // redirect to page showing error message and exit script
}

我通常会再次重定向到同一页面,但附上一个参数($_SERVER["PHP_SELF"].'?mail_success=1'),然后在模板中我决定是否显示成功消息,错误消息或表单:

if (isset($_REQUEST['mail_success'])) {
    // show success message
} elseif (isset($_REQUEST['mail_error'])) {
    // show error message, technical issues, try again bla bla
} else {
    // show the form (including validation errors if necessary)
}
相关问题