php mail() 函数在 Wordpress 中是不是有效?
Posted
技术标签:
【中文标题】php mail() 函数在 Wordpress 中是不是有效?【英文标题】:Does the php mail() function work in Wordpress?php mail() 函数在 Wordpress 中是否有效? 【发布时间】:2013-03-10 20:42:26 【问题描述】:这与我在此处发布的另一个问题有关,但它是 不同的事情,所以我希望人们不要认为我重复发布。
我在 Wordpress 中有这样的电子邮件表单。
<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。
【问题讨论】:
【参考方案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);
?>
【讨论】:
感谢 ZorleQ。我实际上在 MAMP 本地工作。当它在 Wordpress 之外时,相同的脚本在 MAMP 中有效。 这是否意味着它在与 WordPress 集成时在本地(在 MAMP 中)失败,还是意味着它在与 WordPress 集成时在托管站点上失败?这里有两个变量;确保你已经区分了他们的影响。 使用 Wordpress 在本地(在 MAMP 中)失败。我还没有尝试过托管。 如果您的脚本在 wordpress 外部工作但在内部失败,则 WP 必须更改某些配置。尝试在执行邮件功能之前使用ini_set()
设置您的sendmail_from
和mail.log
。详情请参阅php.net/manual/en/mail.configuration.php 和php.net/manual/en/function.ini-set.php。
ZorleQ,我看不到如何使用 sendmail_from 和 mail.log。 sendmail_from,它来自 Wordpress?如果我尝试使用 mail.log() 邮件是红色的并且脚本崩溃。【参考方案2】:
我只是试图解决一个类似的问题。可能使它工作的事情可能包括:
按照this 示例(或类似示例)构建您的代码 - 不知道它是否有任何实际效果。
尝试提供标题,包括此示例中的表单:
$headers = array('From: From someone <some@one.com>'. "\r\n",'Content-Type: text/html; charset=UTF-8');
不允许空变量进入消息、主题或标题 - 使用空字符串或类似内容初始化它们 -> $myvar='';
如果您的主题包含多字节字符或类似字符,请查看this。
【讨论】:
还有 - 我解决了。它使用 mail() 或 wp_mail() 工作。 wp_mail() 似乎需要数组样式的标题。【参考方案3】:如果您不包括 wordpress 文件(wp-load.php 等),它是一个“普通”PHP,与其他 wordpress 文件没有任何共同之处,除了它的位置,所以问题应该是 .htaccess 文件中的一些配置或我猜的其他目录配置。您是在为 WP 使用虚拟主机还是类似的东西?
【讨论】:
以上是关于php mail() 函数在 Wordpress 中是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章
wordpress | WP Mail SMTP使用QQ邮箱发布失败的解决办法
WordPress ”无法发送电子邮件,可能原因:您的主机禁用了mail()函数“的解决办法