предупреждение в base64_encode в классе phpmailer - PullRequest
0 голосов
/ 30 ноября 2018

Я использую phpmailer для отправки почты с вложением, которая отправляет почту с пустым вложением и показывает следующее предупреждение

Предупреждение: base64_encode () ожидает, что параметр 1 будет строкой, объект задан в D: \ xampp\ htdocs \ contactform \ class \ class.phpmailer.php в строке 1958

Я получаю файл из базы данных, который хранится как BLOB-файл

<?php
require 'config.php';        
require 'class/class.phpmailer.php';
$message = '';
$errors ='';
$firstName = $lastName = $emailId = $mobileNumber = $add = '';  

function clean_text($string)
{
    $string = trim($string);
    $string = stripslashes($string);
    $string = htmlspecialchars($string);
    return $string;
}


$firstName = $conn->real_escape_string($_POST['fname']);
$lastName = $conn->real_escape_string($_POST['lname']);
$emailId = $conn->real_escape_string($_POST['email']);
$mobileNumber = $conn->real_escape_string($_POST['mobile']);
$add = $conn->real_escape_string($_POST['address']);
$fileName = $conn->real_escape_string($_FILES['myfile']['name']);
$tmp_name = $_FILES['myfile']['tmp_name']; 
$name = $_FILES['myfile']['name'];   
$size = $_FILES['myfile']['size']; 


if(isset($_POST["submit"]))
{
    if((isset($_POST['fname'])&& $_POST['fname'] !='' ))
    {   
        $sql = "INSERT INTO form (fname, lname, email,mobile,address,file,filename,created) VALUES('".$firstName."','".$lastName."','".$emailId."', '".$mobileNumber."','".$add."','".$fileName."','".$name."',now())";
        if(!$result = $conn->query($sql)){
        die('There was an error running the query [' . $conn->error . ']');
    }
    else
    {
        echo "Registered successfully\n ";
    }
}

else
{
    echo "Please fill Name and Email";
}
    $query="select file from form where email='$emailId'"; 
    $result=$conn->query($query) or die('There was an error1 running the query [' . $conn->error . ']'); 
    $result1="resume.pdf";
    $encoding='base64'; 
    $type=" application/pdf";
    $message ="hi";
    $mail = new PHPMailer;
    $mail->IsSMTP();                                
    $mail->Host = 'smtp.gmail.com';     
    $mail->Port = '587';                            
    $mail->SMTPAuth = true;                         
    $mail->Username = '****';                   
    $mail->Password = '****';                       
    $mail->SMTPSecure = 'tls';                          
    $mail->From = $_POST["email"];                  
    $mail->FromName = $_POST["fname"];              
    $mail->AddAddress('***');       
    $mail->WordWrap = 50;                           
    $mail->IsHTML(true);                            
    $mail->AddStringAttachment($result,$result1,$encoding,$type).
    $mail->Subject = 'Applicant Profile';               
    $mail->Body = $message;                         
    if($mail->Send())                               
    {
        $message = '<div class="alert alert-success">Application Successfully Submitted</div>';
    }
    else
    {
        $message = '<div class="alert alert-danger">There is an Error</div>';
        echo $mail->ErrorInfo;
    }
}
print_r($message); 
?>

1 Ответ

0 голосов
/ 30 ноября 2018

Вы получаете эту ошибку, потому что $result содержит объект набора результатов MySQLi (mysqli_result), а не строку.Вам нужно извлечь значение поля, прежде чем использовать его.Кроме того, PHPMailer будет определять для вас кодировку и тип содержимого по имени файла, которое вы предоставляете (в $result1), поэтому вам не нужно устанавливать их самостоятельно, например:

$row = $result->fetch_row();
$mail->addStringAttachment($row[0], $result1);

Отдельная проблемав том, что вы используете очень старую версию PHPMailer, в которой есть дыры в безопасности и много ошибок, и вы основали свой код на устаревшем примере, поэтому получите самую последнюю .

...