PHPmailer - Добавить PDF-файл, так как вложение не работает - PullRequest
0 голосов
/ 03 декабря 2018

Моя цель:

Используйте AddStringAttachment() для отправки автоматически сгенерированной строки base64 в виде файла .pdf на другой адрес электронной почты.

Среда программирования:

Я работаю над WordPress с помощью ajax-вызова, передающего на сервер строку base64.Размер строки обычно составляет около 30 КБ, ее можно гарантировать не более 50 КБ.У меня MAX_EXECUTION_TIME 120 с.

То, через что я работал:

Мне удалось:

  • Отправка текста в виде простого текста
  • Отправка небольшого .txt файла

Не удалось:

Мой код:

function sendPdf() {

    $mail = new PHPMailer(true);

    //Server settings
    $mail->SMTPDebug = 2;                                 // Enable verbose debug output
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'smtp.hostinger.com';                   // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'janice@popper.ga';                 // SMTP username
    $mail->Password = 'secret';                         // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to

    //Recipient
    $mail->SetFrom('janice@popper.ga');
    $mail->AddAddress( 'xxxxxxxx@gmail.com' );

    $pdf_base64 = $_POST[pdfString];

    //Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject= ' New Application Form ';
    $mail->Body= ' New Application Form From WordPress site ';

    //Attachment
    //$mail->AddStringAttachment($pdf_base64, $_POST[clientName].'_Application.pdf', 'base64', 'application/pdf');
    //$mail->AddAttachment(dirname(__FILE__)."/Qian_Zhong_Application.pdf", 'Qian_Zhong_Application.pdf');

    $error = '';

    if(!$mail->send()){
       $error = 'Mail error: '.$mail->ErrorInfo; 
       echo $error;     
    }else{
        echo 'Message has been sent.';
    }

    exit; // This is required to end AJAX requests properly.

}

1 Ответ

0 голосов
/ 03 декабря 2018

Данные, которые вы передаете в addStringAttachment, должны быть необработанными двоичными данными, никоим образом не закодированными, так как PHPMailer позаботится об этом за вас.Он также установит кодировку и MIME-тип из указанного вами имени файла, поэтому вам не нужно устанавливать их вручную.

Использование отладчика позволит вам наблюдать за сценарием во время его работы, чтобы вы моглиточно увидеть, с чем у него проблемы.Любая ошибка 500s приведет к тому, что ошибки будут регистрироваться в журналах вашего веб-сервера, и, как правило, содержат больше информации.

Я бы также рекомендовал не использовать $_POST[clientName] без такой фильтрации или проверки - вы никогда не должны доверять вводу пользователявот так.

...