【问题标题】:PHP Custom Email using PHPMailer使用 PHPMailer 的 PHP 自定义电子邮件
【发布时间】:2016-08-03 00:33:48
【问题描述】:

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

为此,我创建了这个 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 服务器错误

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

【问题讨论】:

  • 您的 gmail 帐户是否配置为使用安全性较低的客户端?
  • 什么 500 错误?检查您的错误日志。
  • example.com 页面不工作 example.com 当前无法处理此请求。检查元素控制台中的 500”“加载资源失败:服务器响应状态为 500 (内部服务器错误)”
  • 真正的错误信息将在您的服务器日志中。 500 错误对公众来说是安全的。

标签: php html session phpmailer


【解决方案1】:

要摆脱 500 Internal server error:

A) 将此 sn-p 放在后面

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

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

php_value error_reporting -1
php_flag display_errors on

C) 如果 B 不工作,那么您的 apache\httpd 服务器没有启用 AllowOverride。然后你应该改变 php.ini(和 B 一样)

(永远不要在生产中做以上所有事情。只能在开发时使用)

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

【讨论】:

  • 如果有效,则表示您运行的是旧版本且不受支持的 PHP。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多