PHPMailer не отправляет почту с прикрепленным zip-файлом - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь прикрепить мой резервный zip-файл к моему gmail.около 300kb zip-файла. iam пытается использовать этот код

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'Exception.php';
require 'PHPMailer.php';
require 'SMTP.php';

$mail = new PHPMailer(true);

try {
    $mail->IsHTML(true);
    $mail->SetFrom('info@myDomain.net', 'ADMIN');
    $mail->Subject   = 'mysite - Backup Files - ' . date('d-M-Y');
    $mail->Body      = 'This is your backup files date: ' . date('d-M-Y');
    $mail->AddAddress( 'myMail@gmail.com' );
    $mail->addAttachment('secret-backup-03-Apr-2019-2105361.zip');

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>

мой zip-архив создается с таким php-кодом:

<?php
function backup()
 {
  $name = "";
  $name = "./backup/backup-".date('d-M-Y').'-'.date('His').".zip";
  shell_exec("zip -q -e -9 -P 12345678 -r " . $name . " /home/user/public_html/* -x /home/user/public_html/CMD/backup/**\*");
  $secretname = "";
  $secretname = "./backup/secret-backup-".date('d-M-Y').'-'.date('His').".zip";
  shell_exec("zip -q -e -9 -P 12345678 -r " . $secretname . " " . $name);
  if (file_exists($secretname)) {
        unlink($name);
    }
 }

backup();
?>

, но почта не приходит в мой gmail, я изменилфайл от secret-backup-03-Apr-2019-2105361.zip до testfile.rtf с точно таким же кодом, по которому пришло письмо с приложением !!любая помощь ??!

РЕДАКТИРОВАТЬ: в соответствии с A4L ответ Я пытался отправить на mymail@outlook.com с тем же кодом, и почта прибыла успешно.

Теперь проблема с Gmail.Любая помощь ??

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

Обязательно используйте SSL для отправки электронной почты и подписи сертификата для вашего домена. From: должен иметь ваш домен, который соответствует вашему IP-адресу, с которого вы отправляете, а также имеет действительную запись SPF. Google нашел ваш E-Mail как спам. Если его нет в папке со спамом, Google просто заблокировал его. Проверьте ваш почтовый журнал (где-то в / var / log * mail), на нем должна быть ссылка на страницу поддержки Google с инструкциями о том, как доставить вашу почту.

1 голос
/ 04 апреля 2019

Отладка по одной вещи за раз.Учитывая, что ваше сообщение действительно приходит, вам не нужно беспокоиться о процессе отправки.Если вы генерируете вложение и отправляете его, и оно терпит неудачу, вы не знаете, является ли это поколение или отправка неудовлетворительным, поэтому дважды проверьте , что ваше поколение работает первым, само по себе.

Если вы абсолютно уверены, что ваша резервная копия для сгенерирована правильно (я отмечаю, что ваша функция резервного копирования не возвращает значение, поэтому нет способа проверить, не сработала ли она), проверьте, работает ли операция вложения.addAttachment() возвращает логическое значение false в случае сбоя вложения, поэтому убедитесь, что:

if (!$mail->addAttachment('secret-backup-03-Apr-2019-2105361.zip')) {
    throw new Exception('Attachment failed');
}

Я бы также рекомендовал отправлять через SMTP, а не mail() (который вы используете в данный момент), так как SMTPбыстрее, безопаснее и намного проще в отладке:

$mail->isSMTP();
$mail->Host = 'localhost';
$mail->SMTPDebug = 2;

Ваша функция резервного копирования выглядит потенциально небезопасной: убедитесь, что вы применили escapeshellarg() ко всем сгенерированным аргументам, передаваемым в оболочку.

...