使用.env和phpmailer给出错误:从空值创建默认对象

问题描述

我需要从.env文件中获取客户端凭据。我检查了凭据是否正确。

如果我直接这样输入字符串

    $mail->Password = "";

我可以发送到我的电子邮件。

但是一旦我这样做:

    $mail->Password = getenv("SMPT_PASSWORD");

或者这个:

    $mail->Password = $_ENV["SMTP_PASSWORD"];

我无法发送。

我已使用以下内容进行调试

var_dump($Password);

这就是我得到的:

注意:未定义的变量:第18行的C:\ xampp1 \ htdocs \ PHPMailer \ form.php中的密码 空值 enter image description here

该消息非常清晰,但我不知道如何解决。

如果我对此进行调试:

var_dump($dotenv->load());

我可以看到.env文件的凭据。

我也尝试过更改此内容:

$dotenv = Dotenv\Dotenv::createMutable(__DIR__);

对此:

$dotenv = Dotenv\Dotenv::createUnsafeImmutable(__DIR__);

这是整个代码:

form.php:

<?php include 'contact form.html';

require '/xampp1/htdocs/PHPMailer/PHPMailerAutoload.php';
require_once realpath(__DIR__ . "/vendor/autoload.php");

$dotenv = Dotenv\Dotenv::createMutable(__DIR__);
$dotenv->load();

var_dump($dotenv->load());

$password = $_ENV["SMTP_PASSWORD"];
$PASSWORD = getenv("SMPT_PASSWORD");

var_dump($mail->Password = $PASSWORD);


$msg = '';

if (isset($_POST['submit'])) {

    $mail = new PHPMailer();
    $mail->isSMTP();
    $mail->SMTPDebug = 2;
    $mail->Debugoutput = 'html';
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 25;
    $mail->SMTPSecure = 'tls';
    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,'verify_depth' => 3,'allow_self_signed' => true,'verify_peer_name' => false,),);

    $mail->SMTPAuth = true;
    $mail->Username = "[email protected]";
    $mail->Password = $_ENV["SMTP_PASSWORD"];

    $mail->setFrom('[email protected]');
    $mail->addAddress('[email protected]','Fake Name');
    if ($mail->addReplyTo($_POST['email'],$_POST['name'])) {
        $mail->Subject = 'PHPMailer contact form';
        $mail->isHTML(true);
        $mail->Body = '<h3>
            Email:  ' . $_POST['email'] . '<br><br>' . 'Name:  ' . $_POST['name'] . '<br><br>' . 'Message:  ' . $_POST['message'] . '<br><br>' . 'Cars: ' . $_POST['cars'] . '<h3>';

        if (!$mail->send()) {
            $mail->ErrorInfo;
            $msg = 'Sorry,something went wrong. Please try again later.';
        } else {
            $msg = 'Message sent! Thanks for contacting us.';
        }
    }
}

这是我文件的结构: enter image description here

任何帮助将不胜感激。预先谢谢你。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)