简体   繁体   中英

I am getting error while trying to send email verification

I am trying to send a confirmation email on signup from my flutter app using PHP as my backend. My PHP backend is hosted on HostGator.

So this is my PHP script responsible for sending the mail.

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";

function create_token($id, $db, $email, $name, $smtp_host, $mail_username, 
$mail_password, $mail_port,$mail_from, $company_name,$web_url, $email_expire_time)
{

    $token = bin2hex(random_bytes(16));
    $created_time=strtotime(date("Y-m-d h:i:sa"));
    $expire_time =strtotime("+$email_expire_time day");

    $mail = new PHPMailer(true);

                         
        //SMTP host name                          
        $mail->Host = 'https://webhostexample.app';
        //Set this to true if SMTP host requires authentication to send email
        $mail->SMTPAuth = true;                          
        // username and password     
        $mail->Username = 'notify@webhostexample.app';                 
        $mail->Password = '************';                           
        $mail->SMTPSecure = "tls";                           
        //Set TCP port to connect to
        $mail->Port = 465;                                   

        $mail->setFrom($mail_from , $company_name);
 
        $mail->addAddress($email, $name);
        $mail->isHTML(true);

        $mail->Subject = "Email Confirmation";

        $message = file_get_contents("confirm-mail.php");
        $variables = array(
            "{{company_name}}" => $company_name,
            "{{confirm_link}}" => $web_url."email-verification.php?token=" .$token,
            "{{expire_date}}" => $email_expire_time,
        );
        foreach($variables as $key=>$value ){
            $message = str_replace($key, $value, $message);
        }


        $mail->msgHTML($message);

        try {
            $mail->send();
            $stmt = $db->prepare("INSERT INTO email_verification (s_n, uid, token, created_time, expire_time) VALUES (?, ? , ? , ? , ?)");
            $stmt->execute([NULL, $id, $token, $created_time, $expire_time]);    
         
        } catch (Exception $e) {
            echo json_encode([
                'status' => "failed",
                'message' => "Mailer Error: " . $mail->ErrorInfo,
                'exception'=> $e

            ]);         

        }
}
?>

But I get the error below in my flutter app console when the script above runs.

I/flutter ( 6653): FormatException: Unexpected character (at character 98)
I/flutter ( 6653): ...iate mail function.","exception":{}}{"status":"success","message":"Check...
I/flutter ( 6653):                                        ^
I/flutter ( 6653): type 'Null' is not a subtype of type 'bool'

What could be the cause?

The problem is that you uncommented some comments, and these are just strings dangling in PHP Space. The comments I added here, and check the rest of your code for the same thing.

        // SMTP host name                         
        $mail->Host = 'https://webhostexample.app';
        //Set this to true if SMTP host requires authentication to send email
        $mail->SMTPAuth = true;                          
        // username and password     
        $mail->Username = 'notify@webhostexample.app';                 
        $mail->Password = '************';             

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM