【问题标题】:PHP Form not sending an emailPHP表单不发送电子邮件
【发布时间】:2014-05-29 04:04:50
【问题描述】:

我有一个由 html/css/jquery/ajax 构建的预制表单。暂时在我的联系页面上几乎是复制和粘贴。

这是我在contact.php页面上的html标签之前调用的。

<?php

session_name("fancyform");
session_start();


$_SESSION['n1'] = rand(1,20);
$_SESSION['n2'] = rand(1,20);
$_SESSION['expect'] = $_SESSION['n1']+$_SESSION['n2'];


$str='';
if($_SESSION['errStr'])
{
    $str='<div class="error">'.$_SESSION['errStr'].'</div>';
    unset($_SESSION['errStr']);
}

$success='';
if($_SESSION['sent'])
{
    $success='<h1>Success! We will be in contact!</h1>';

    $css='<style type="text/css">#contact-form{display:none;}</style>';

    unset($_SESSION['sent']);
}
?>

http://jsfiddle.net/6B2G7/

这是一个用于 css/html/jquery 的 jsFiddle。页面加载正常,您可以填写字段并单击提交。它成功提交,但我没有收到电子邮件。拼写检查了必要的项目,但无济于事,没有电子邮件。

非常感谢任何帮助。对不起,如果我遗漏了任何东西——这里是新的。尝试使用萤火虫查看是否有错误,但我没有得到任何错误。

==编辑==

这是我的 submit.php,现在我想知道这需要放在哪里?我认为它实际上并没有在我的网站上的任何地方调用它,这可以解释为什么没有发送电子邮件。现在我有点困惑——使用 PHP 的第一天。我如何让它提交到代码中给出的电子邮件地址?

<?php

/* config start */

$emailAddress = 'coreymaret@hotmail.com';

/* config end */


require "phpmailer/class.phpmailer.php";

session_name("fancyform");
session_start();


foreach($_POST as $k=>$v)
{
    if(ini_get('magic_quotes_gpc'))
    $_POST[$k]=stripslashes($_POST[$k]);

    $_POST[$k]=htmlspecialchars(strip_tags($_POST[$k]));
}


$err = array();

if(!checkLen('name'))
    $err[]='The name field is too short or empty!';

if(!checkLen('email'))
    $err[]='The email field is too short or empty!';
else if(!checkEmail($_POST['email']))
    $err[]='Your email is not valid!';

if(!checkLen('subject'))
    $err[]='You have not selected a subject!';

if(!checkLen('message'))
    $err[]='The message field is too short or empty!';

if((int)$_POST['captcha'] != $_SESSION['expect'])
    $err[]='The captcha code is wrong!';


if(count($err))
{
    if($_POST['ajax'])
    {
        echo '-1';
    }

    else if($_SERVER['HTTP_REFERER'])
    {
        $_SESSION['errStr'] = implode('<br />',$err);
        $_SESSION['post']=$_POST;

        header('Location: '.$_SERVER['HTTP_REFERER']);
    }

    exit;
}


$msg=
'Name:  '.$_POST['name'].'<br />
Email:  '.$_POST['email'].'<br />
IP: '.$_SERVER['REMOTE_ADDR'].'<br /><br />

Message:<br /><br />

'.nl2br($_POST['message']).'

';


$mail = new PHPMailer();
$mail->IsMail();

$mail->AddReplyTo($_POST['email'], $_POST['name']);
$mail->AddAddress($emailAddress);
$mail->SetFrom($_POST['email'], $_POST['name']);
$mail->Subject = "A new ".mb_strtolower($_POST['subject'])." from ".$_POST['name']." | contact form feedback";

$mail->MsgHTML($msg);

$mail->Send();


unset($_SESSION['post']);

if($_POST['ajax'])
{
    echo '1';
}
else
{
    $_SESSION['sent']=1;

    if($_SERVER['HTTP_REFERER'])
        header('Location: '.$_SERVER['HTTP_REFERER']);

    exit;
}

function checkLen($str,$len=2)
{
    return isset($_POST[$str]) && mb_strlen(strip_tags($_POST[$str]),"utf-8") > $len;
}

function checkEmail($str)
{
    return preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $str);
}

?>

【问题讨论】:

  • 随机数生成器脚本也一切正常。
  • 应该发送电子邮件的部分到底在哪里?我在您的代码中没有看到它。
  • 你的 php.ini 文件看起来怎么样?
  • Saturnix,我编辑了原始问题并包含了 submit.php 代码。
  • 约翰,也感谢您的帮助。我的目录中没有 php.ini 文件。我对 PHP 有点陌生。那到底是什么?

标签: php jquery html css forms


【解决方案1】:

您可能还想考虑使用Mandrill API 来处理电子邮件。设置起来非常简单:

var m = new mandrill.Mandrill('your_api_key');

function sendTheMail(){
    m.messages.send({
        "message": {
            "from_email": document.getElementById('from_email').value,
            "from_name": document.getElementById('from_name').value,
            "to":[{"email": "your_email", "name": "your_name"}],
            "subject": "optional_value",
            "text": document.getElementById('message').value
        }
    });
}

然后您可以像这样设置您的联系页面:

<p>Your Name: <input type="text" id="from_name"></p>
<p>Your Email: <input type="email" id="from_email"></p>
Message<br><br><textarea rows=15 cols=50 id="message"></textarea><br>
<button onclick="sendTheMail();">Send</button>

【讨论】:

    【解决方案2】:

    你能在浏览器上运行 submit.php 吗?或者检查您电子邮件的垃圾邮件并尝试使用其他电子邮件地址..

    http://tutorialzine.com/2009/09/fancy-contact-form/

    【讨论】:

    • 奇数。它一定只是陷入垃圾邮件中。我想知道为什么它不起作用..一切都写得正确。只需尝试另一个电子邮件地址即可解决此问题。乌梅尔,谢谢。我是怎么忽略的..
    • 有时会发生。我们必须逐块调试:)
    • 一些电子邮件提供商会简单地忽略来自不受信任来源的电子邮件。如果您的 SMTP 服务器配置不正确,并且您的“发件人”地址不是来自该 SMTP,它很可能会被阻止。几个月前我用雅虎测试过。如果没有 SMTP 配置,我的电子邮件甚至无法进入垃圾邮件文件夹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 2016-03-11
    • 2018-01-26
    相关资源
    最近更新 更多