0

这与我在这里发布的另一个问题有关,但这是另一回事,所以我希望人们不要认为我在重复发布。

我在 Wordpress 中有这样的电子邮件表单。

html

    <form action="" id="contactForm">
        <input type="text" id="contactName" placeholder="Name:">
        <input type="text" id="contactEmail" placeholder="Email:">
        <select id="form-subject">
          <option>Subject</option>
          <option>Accounts</option>
          <option>Bookkeeping</option>
          <option>Start Up</option>
          <option>CIS Returns</option>
          <option>Payroll</option>
          <option>Self Assessment</option>
          <option>Tax Returns</option>
          <option>VAT Returns</option>
                        <option>Other</option>
        </select>  
        <textarea id="contactMessage" rows="8" cols="40" placeholder="Message:"></textarea>
                    <p id="submit">Submit</p>
                    <div id="status">
          <p></p>
        </div>
    </form>

jQuery

    $j('#submit').click(function(){     
        //
        var nameVal = $j('#contactForm #contactName').val();
        var emailVal = $j('#contactForm #contactEmail').val();
        var messageVal = $j('#contactForm #contactMessage').val();

        //
        $j.post('wp-content/code/contactEngine.php', { theName:nameVal, theEmail:emailVal, theMessage:messageVal }, function(data){
            $j("#status p").html(data);
            $j("#status p").show().fadeOut(3500);
            if(data.indexOf('Thank You')==0) {document.forms[0].reset();}
        });
    })

php

    <?php

      $errors = array();
      $required_fields = array('theName','theEmail','theMessage');
      foreach($required_fields as $fieldname){
         if(!isset($_POST[$fieldname]) || empty($_POST[$fieldname])){
            $errors[] = $fieldname;
         }
      }
      if(empty($errors)){
         $name_field = Trim(stripslashes($_POST['theName']));
         $name = explode(' ', $name_field);
         $firstname = ucfirst($name[0]);
         $email_field = Trim(stripslashes($_POST['theEmail']));
         $message = Trim(stripslashes($_POST['theMessage']));
         //
         $to = "info@ttmt.org.uk";
         $subject = "Email from Website";
         $body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message";
         //
         mail($to, $subject, $body);

             //wp_mail($to, $subject, $body);   

         echo "Thank You $firstname";
      }else{
         echo "Please complete all fields.";
      }

    ?>

php 位于 wp-content 文件夹中的文件夹中,因此 jquery 可以轻松访问它。

$j.post('wp-content/code/contactEngine.php', { theName:nameVal, theEmail:emailVal, theMessage:messageVal }, function(data){ 

如果表单是否完整,变量会到达 php 并回显回复。

未发送实际电子邮件 - php mail() 函数是否在 Worpdress 中工作。

我尝试了 wp_mail() 函数,但这完全停止了脚本并且我没有得到回声。

我知道有像 Contact Form 7 这样的电子邮件插件,但我认为它们不适用于这个网站。

这是一个具有自定义帖子类型的单页网站,我没有调用任何内容,我认为我需要使用联系表 7。

4

3 回答 3

1

PHP 邮件功能完全独立于 Wordpress。它是一个内置的 PHP 函数,理论上应该适用于所有平台。

我唯一想到的是您的服务器配置有问题。也许您的 hsoting 阻止了邮件功能,或者设置不正确。

查看此示例是否适用于独立文件(http://php.net/manual/en/function.mail.php):

<?php
    $to      = 'nobody@example.com';
    $subject = 'the subject';
    $message = 'hello';
    $headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

    mail($to, $subject, $message, $headers);
?> 
于 2013-03-21T11:14:55.753 回答
0

我只是试图解决一个类似的问题。可能使它工作的事情可能包括:

  1. 按照这个例子(或类似的)来构建你的代码 - 不知道它是否有任何实际效果。

  2. 尝试提供标题,包括此示例中的表单:

    $headers = array('From: From someone <some@one.com>'. "\r\n",'Content-Type: text/html; charset=UTF-8');

  3. 不允许空变量进入消息、主题或标头 - 用空字符串或类似内容初始化它们 ->$myvar='';

  4. 如果您的主题包含多字节字符或类似字符,请查看

于 2014-05-21T10:24:03.753 回答
0

如果您不包括 wordpress 文件(wp-load.php 等),它是一个“普通”PHP,除了它的 location 之外,与其他 wordpress 文件没有任何共同之处,所以问题应该是 .htaccess 中的一些配置我猜是文件或其他目录配置。您是在为 WP 或类似的东西使用虚拟主机吗?

于 2016-02-24T15:49:16.793 回答