PHP SMTP Office 365 - Отправить вложение - PullRequest
1 голос
/ 25 апреля 2019

Я отправляю письмо PHPMailer с использованием аутентификации Office 365.

Это работает нормально.Однако я изо всех сил пытаюсь получить скрипт для отправки вложения.

Вот мой код

require_once('phpMailer/PHPMailerAutoload.php');
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.office365.com';
$mail->Port       = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth   = true;
$mail->Username = 'xxx@xx.com';
$mail->Password = 'XXXXX';
$mail->SetFrom('XXX@XXX.com', 'FromEmail');
$mail->addAddress('XXX@XXX.com', 'ToEmail');
$mail->addAttachment("GeneratedPDFFiles/Invoices/Invoice $last_id.pdf");     
$mail->SMTPDebug  = 3;
$mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; $mail->Debugoutput = 'echo';
$mail->IsHTML(true);

Когда я удаляю строку вложения, электронное письмо отправляется нормально, однако со строкой там нетписьмо отправлено?

Файл присутствует в каталоге, так что это не проблема.

1 Ответ

0 голосов
/ 25 апреля 2019

Несколько вещей здесь не так.

Прежде всего, я вижу, что вы используете старую версию PHPMailer, поэтому обновитесь, желательно с помощью composer.

Вы создаете экземпляр, подобныйthis:

$mail = new PHPMailer(true);

Это true означает, что PHPMailer будет генерировать исключения, но у вас нет блока try / catch, обернутого вокруг вызовов вашего метода PHPMailer, поэтому, когда произойдет исключение, ваш код умрет.Либо добавьте блоки try / catch, где это необходимо, либо удалите этот параметр true для обработки ошибок с помощью возвращаемых значений.

Я ожидаю, что он умирает здесь:

$mail->addAttachment("GeneratedPDFFiles/Invoices/Invoice $last_id.pdf");     

Когда вы говорите "Theфайл присутствует в каталоге, так что это не проблема ", вы предполагаете, что это правда - нет; проверка .Этот метод вызовет исключение (если вы не удалили этот параметр true в конструкторе), если файл не существует или если у сценария нет разрешения на его чтение.

Вы использовалиотносительный путь, но ваш рабочий каталог может оказаться не там, где вы думаете.Безопаснее использовать абсолютный путь, например, добавляя местоположение текущего скрипта (который может отличаться от .).Какова бы ни была причина, рекомендуется также проверить возвращаемое значение:

$file = __DIR__ . "/GeneratedPDFFiles/Invoices/Invoice $last_id.pdf";
if (!$mail->addAttachment($file)) {
    die('Could not open file ' . $file);
}
...