使用PHPMailer的PHP自定义电子邮件


PHP Custom Email using 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);
}
?>

我试过这个代码,但它不起作用——它在索引页面和contact.php页面上给了我"500"服务器错误我已经检查了";"和其他常见的PHP错误我只是通过回显PHP中的变量进行了检查(PHP工作:P)

在索引页上,如果我删除

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

来自

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

索引页面显示表单HTML,但当我提交表单时,我在contact.php 上收到500服务器错误

请帮我解决这个代码,感谢高级

要消除500内部服务器错误:

A)将此片段放在

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

B)如果A不工作,请尝试在web根目录中创建一个.htaccess文件,其中包含以下内容:

php_value error_reporting -1
php_flag display_errors on

C)如果B不工作,那么您的apache''httpd服务器没有启用AllowOverride。然后,您应该更改php.ini(与B相同)

(在生产中永远不应该完成以上所有操作。只在开发时使用)

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