PHP自定义电子邮件使用PHPMailer

时间:2016-04-12 11:54:47

标签: php html session phpmailer

我正在为客户设计电子邮件功能, 如果用户有一些错误,主要要求是将用户保持在同一页面上 在电子邮件中,错误应显示在同一页面上。

为此我创建了这个HTML(PHP)

<?php

session_start();

require_once '../helpers/security.php';

$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : [];
$fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : [];

?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>PHPmailer</title>
        <link rel="stylesheet" href="../css/style.css">
    </head>
    <body>
        <div class="contact">
            <?php if(!empty($errors)): ?>
                <div class="panel">
                    <ul>
                        <li><?php echo implode('</li><li>', $errors); ?></li>
                    </ul>
                </div>
            <?php endif; ?>
            <form action="contact.php" method="POST">
                <label>
                    Your Name*
                    <input type="text" name="name" autocomplete="off"<?php echo isset($fields['name']) ? 'value="'.e($fields['name']).'"' : '' ?>>
                </label>
                <label>
                    Your Email*
                    <input type="text" name="email" autocomplete="off"<?php echo isset($fields['email']) ? 'value="'.e($fields['email']).'"' : '' ?>>
                </label>
                <label>
                    Your Message*
                    <textarea name="message" rows="8"><?php echo isset($fields['message']) ? e($fields['message']) : '' ?></textarea>
                </label>
                <input type="submit" value="Send">
                <p class="muted">* means a required field</p>
            </form>
        </div>
    </body>
</html>
<?php

unset($_SESSION['errors']);
unset($_SESSION['fields']);

?>

这是我的PHP代码

<?php

session_start();

require_once '../phpmailer/PHPMailerAutoload.php';

$errors = [];

if(isset($_POST['name'], $_POST['email'], $_POST['message'])){
    $fields = [
        'name' => $_POST['name'],
        'email' => $_POST['email'],
        'message' => $_POST['message']
    ];

    foreach($fields as $field => $data){
        if(empty($data)){
            $errors[] = 'The '.$field.' field is required';
        }
    }

    if(empty($errors)){
        $m= new PHPMailer;
        $m->isSMTP();
        $m->SMTPAuth = true;

        /*$m->SMTPDebug = 1; */

        $m->Host = 'smtp.gmail.com';
        $m->Username = 'mymail@gmail.com';
        $m->Password = 'mypass';
        $m->SMTPSecure = 'ssl';
        $m->Port = 465;

        $m->isHTML();

        $m->Subject = 'Contact form submitted';
        $m->Body = 'From: '.$fields['name'].' ('.$fields['email'].')<p>'.$fields['message'].'</p>';

        $m->FromName = 'Contact';

        /*$m->AddReplyTo($fields['email'], $fields['name']);*/

        $m->AddAddress('mymail@gmail.com', 'My Name');

        if($m->send()){
            header('Location: http://facebook.com');
            die();
        } 
        else {
            $errors[]= 'Error';
        }
    }
} 
else{
    $errors[] = 'something went wrong';
}

$_SESSION['errors'] = $errors;
$_SESSION['fields'] = $fields;

header('Location: http://google.com');

?>

我添加了额外的安全码

<?php

function e($string){
    return htmlentities ($string, ENT_QUOTES, 'UTF-8', false);
}

?>

我已经尝试过这段代码,但它不起作用,它在索引页面上给出了“500”服务器错误以及contact.php页面 我已经检查过“;”和其他一般的PHP错误 我只是通过回显PHP中的变量来检查(PHP工作:P)

如果我删除了索引页面

? $_SESSION['errors'] : [];
? $_SESSION['fields'] : [];

来自

$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : [];
$fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : [];

索引页面显示表单HTML,但是当我提交表单时,我在contact.php

上收到500服务器错误

请帮我解决此代码,谢谢高级

1 个答案:

答案 0 :(得分:1)

摆脱500内部服务器错误:

A)立即放置此代码段

ini_set('display_errors', 'on');
error_reporting(-1);

B)如果A无效,请尝试在其中创建一个.htaccess文件,其中包含以下内容:

php_value error_reporting -1
php_flag display_errors on

C)如果B无效,那么您的apache \ httpd服务器没有启用AllowOverride。然后你应该改变php.ini(与B相同)

(一个人不应该在制作中完成以上所有操作。只在开发时使用它)

现在您应该能够看到错误,这可能是您的PHP版本不支持[]尝试将所有[]更改为array()