HTML联系表单+ php不发送电子邮件

时间:2015-05-22 09:01:42

标签: php html

我只是尝试使用html表单和php发送电子邮件,但无法将电子邮件发送到文本框中提供的相应邮件ID作为输入。

我搜索并获得了这个示例代码,任何人都可以建议我在哪里犯了错误。

HTML

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>Contact Form</title>
        <script  src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
        <link rel="stylesheet" type="text/css" href="./styles.css" />

        <script type="text/javascript">                                         
        /* <![CDATA[ */
            $(document).ready(function(){ // sends the data filled in the contact form to the php file and shows a message
                $("#contact-form").submit(function(){
                    var str = $(this).serialize();
                    $.ajax({
                       type: "POST",
                       url: "send.php",
                       data: str,
                       success: function(msg)
                       {
                            $("#formstatus").ajaxComplete(function(event, request, settings){
                                if(msg == 'OK'){ // Message Sent? Show the 'Thank You' message and hide the form
                                    result = '<div class="formstatusok">Your message has been sent. Thank you!</div>';
                                    $("#fields").hide();
                                }
                                else{
                                    result = msg;
                                }
                                $(this).html(result);
                            });
                        }

                     });
                    return false;
                });
            });
        /* ]]> */   
        </script>  
    </head>

    <body>
        <div id="wrap">
            <h1>Drop me a Message!</h1>
            <div id='form_wrap'>
                <form id="contact-form" action="javascript:alert('success!');">

            <p id="formstatus"></p>
                    <p>Hello Joe,</p>
                    <label for="email">Your Message : </label>
                    <textarea  name="message" value="Your Message" id="message" ></textarea>
                    <p>Best,</p>    
                    <label for="name">Name: </label>
                    <input type="text" name="name" value="" id="name" />
                    <label for="email">Email: </label>
                    <input type="text" name="email" value="" id="email" />
                    <input type="submit" name ="submit" value="OK I want to send it now, thanks!" />
                </form>
            </div>
        </div>
    </body>
    </html>

send.php

    <?php
        define("WEBMASTER_EMAIL", 'myid@company.com');

        error_reporting (E_ALL ^ E_NOTICE);

        function ValidateEmail($email)
        {
            $regex = '/([a-z0-9_.-]+)'. # name
            '@'. # at
            '([a-z0-9.-]+){2,255}'. # domain & possibly subdomains
            '.'. # period
            '([a-z]+){2,10}/i'; # domain extension 

            if($email == '') 
                return false;
            else
                $eregi = preg_replace($regex, '', $email);
            return empty($eregi) ? true : false;
        }

    //////////////////////////////////////////////////////

        $post = (!empty($_POST)) ? true : false;

        if($post)
        {
            $name    = stripslashes($_POST['name']);
            $email   = trim($_POST['email']);
            $subject = stripslashes($_POST['subject']);
            $message = stripslashes($_POST['message']);

            $error = '';

            // Check name
            if(!$name || $name == "Name*")
                $error .= 'Please enter your name.<br />';

            // Check email
            if(!$email || $email == "Email*")
                $error .= 'Please enter an e-mail address.<br />';

            if($email && !ValidateEmail($email))
                $error .= 'Please enter a valid e-mail address.<br />';

            // Check message
            if(!$message)
                $error .= "Please enter your message. <br />";

            if(!$error)
            {
                $mail = mail(WEBMASTER_EMAIL, $subject, $message,
                     "From: ".$name." <".$email.">\r\n"
                    ."Reply-To: ".$email."\r\n"
                    ."X-Mailer: PHP/" . phpversion());

                if($mail)
                    echo 'OK';
            }
            else
                echo '<div class="formstatuserror">'.$error.'</div>';
        }

    ?>

有什么想法吗?

4 个答案:

答案 0 :(得分:0)

尝试在php.ini中配置它

SMTP = smtp.exmaple.com -> smtp host
smtp_port = 25 -> port usually 25
username = usename@user.com
password = password
sendmail_from = sourceofmail@example.com

答案 1 :(得分:0)

首先,由于垃圾邮件引起的问题,许多服务器限制邮件传出,除非它由Gmail,雅虎等权威机构进行身份验证。

其次,您应该查看您的php版本,看看您是否使用了正确的格式,而不是复制粘贴示例代码。

最后,如果您是从本地计算机执行此操作,则您的ISP可能已实施了一些发送电子邮件的规定。

答案 2 :(得分:0)

如果你得到&#34;好的&#34;显示来自ajax和邮件发送消息的消息,但仍然没有收到电子邮件,那么你需要检查你的php.ini的smtp服务器设置。

打开php.ini文件并查找以下设置:

SMTP = smtp.gmail.com 
smtp_port = 25
username = youremail@gmail.com
password = PASSWORD
sendmail_from = webmaster@yourdomain.com

如果您不确定从哪里获取,请使用gmail的smtp服务器设置发送电子邮件进行测试。
看看这个:https://www.digitalocean.com/community/tutorials/how-to-use-google-s-smtp-server

答案 3 :(得分:0)

我在我的服务器上尝试了你的代码,我注意到的第一件事:“ReferenceError:$未定义”

因此链接的jquery不起作用,不会执行ajax请求。

将其更改为googleapis上的更新版本(googlecode将于2016年1月25日关闭)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

(假设您的php.ini配置为发送邮件:请参阅其他答案)