PHPMailer不发送带有附件zip文件的邮件

时间:2019-04-03 21:42:52

标签: php gmail zip phpmailer zipfile

我正在尝试将备份zip文件附加到我的gmail。 约300kb的zip文件 我试图使用此代码

<?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 answer的说法,我尝试使用相同的代码发送到mymail@outlook.com,邮件成功到达。

现在是Gmail问题。 有帮助吗?

2 个答案:

答案 0 :(得分:1)

确保使用SSL发送电子邮件并为您的域签名证书。发件人:应具有您的域,该域名将解析为您要从中发送的IP,并且还具有有效的SPF记录。 Google发现您的电子邮件为垃圾邮件。如果它不在您的垃圾邮件文件夹中,则Google只是阻止了它。检查您的邮件日志(在/ var / log * mail中的某个地方),它应该具有指向Google支持页面的链接,其中包含有关如何使您的邮件被骗的说明。

答案 1 :(得分:1)

一次调试一件事。鉴于您的消息实际上已经到达,因此您不必担心发送过程。 如果您生成附件并将其发送失败,那么您将不知道是附件的生成还是发送的请求不满意,因此请仔细检查,您的附件首先可以单独工作。

如果您完全确定正确生成了for的备份(我注意到您的备份函数没有返回值,那么就无法检查其是否失败),请检查附件操作是否正常。如果附件失败,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()应用于传递给shell的所有生成的参数。