PHPmailer - не удается отправить, если переменная $ file1 для вложения не имеет значения - PullRequest
0 голосов
/ 12 июня 2018

У меня есть HTML-форма, которая передает индексы в другую форму, которая создает необходимые переменные, которые затем вставляются в PHPMailer.Одним из вариантов является поиск файла, который затем прикрепляется к электронному письму.Проблема, с которой я сталкиваюсь, заключается в том, что если нет файла для вложения (тогда переменная $ file1 не имеет значения), PHPMailer возвращает результат, что сообщение не может быть отправлено, как показано ниже - указывая на каталог, где хранятся файлы,Сообщение не может быть отправлено.Ошибка почтовой программы: не удалось получить доступ к файлу: C: / wamp64 / www / CIA / PODS /

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {
//Server settings
//$mail->SMTPDebug = 2;                                 // Enable verbose debug output
$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'mail.smtp2go.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'xxx@xx-xxxxxx.co.za';              // SMTP username
$mail->Password = 'xxxxxxxx';                         // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 2525;                                    // TCP port to connect to
//Recipients
$mail->AllowEmpty = true;
$mail->setFrom('admin@ic-express.co.za', 'ICExpress Waybill Updates');
$mail->addAddress('xxxx@xx.co.za'); 
$mail->addAddress($email);  
$mail->addReplyTo('xxxx@xx.co.za');
$mail->addCC($addemail);
$mail->addCC($addemail2);

echo $file1;
$path=$_SERVER['DOCUMENT_ROOT'].'/CIA/PODS/'.$file1;
$name=$file1;
$mail->AddAttachment($path,$name,$encoding ='base64',$type = 'application/octet-stream');
$mail->AllowEmpty = true;
$mail->isHTML(true);                      // Set email format to HTML
$mail->Subject = $subject ;
$mail->Body    = <<<END

1 Ответ

0 голосов
/ 12 июня 2018

Вы можете просто добавить вложение, если оно доступно.В случае, если вложение отсутствует, не пытайтесь добавить вложение:

$path = $_SERVER['DOCUMENT_ROOT'].'/CIA/PODS/'.$file1;

if (is_dir($path) === false && file_exists($path)) {
    $name = $file1;
    $mail->AddAttachment($path, $name, $encoding = 'base64', $type = 'application/octet-stream');
}

Как уже упоминалось в комментариях IncredibleHat, вы также можете использовать условие is_file($path) для проверки пути к файлу, например: Сам PHPMailer :

if (is_file($path)) {
    $mail->AddAttachment($path, '', $encoding = 'base64', $type = 'application/octet-stream');
}

Вам также не нужно указывать name, если вы хотите использовать то же, что указано в path.PHPMailer использует basename пути , если параметр name является пустой строкой.

...