PHPMailer 不发送带有附加 zip 文件的邮件
PHPMailer don't send mail with attached zip file
我正在尝试将我的备份 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 我尝试使用相同的代码发送到 mymail@outlook.com,邮件成功到达。
现在是 Gmail 问题。
有帮助吗??
确保使用 SSL 发送您的电子邮件并为您的域签名证书。发件人:应该有您的域,解析为您发送的 IP,并且还有有效的 SPF 记录。 Google 发现您的电子邮件是垃圾邮件。如果它不在您的垃圾邮件文件夹中,google 就会阻止它。检查您的邮件日志(在 /var/log*mail 中的某处),它应该有一个 link 到 google 支持页面,其中包含有关如何发送邮件的说明。
一次调试一件事。鉴于您的消息实际上已经到达,这不是您需要担心的发送过程。
如果您生成附件并发送它但它失败了,您不知道是生成还是发送不满意,所以仔细检查您的生成首先工作,它自己。
如果您完全确定您的备份已正确生成(我注意到您的备份函数没有 return 值,因此无法检查它是否失败),请检查附件操作有效。 addAttachment()
returns 布尔值 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.
的所有生成参数
我正在尝试将我的备份 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
现在是 Gmail 问题。 有帮助吗??
确保使用 SSL 发送您的电子邮件并为您的域签名证书。发件人:应该有您的域,解析为您发送的 IP,并且还有有效的 SPF 记录。 Google 发现您的电子邮件是垃圾邮件。如果它不在您的垃圾邮件文件夹中,google 就会阻止它。检查您的邮件日志(在 /var/log*mail 中的某处),它应该有一个 link 到 google 支持页面,其中包含有关如何发送邮件的说明。
一次调试一件事。鉴于您的消息实际上已经到达,这不是您需要担心的发送过程。 如果您生成附件并发送它但它失败了,您不知道是生成还是发送不满意,所以仔细检查您的生成首先工作,它自己。
如果您完全确定您的备份已正确生成(我注意到您的备份函数没有 return 值,因此无法检查它是否失败),请检查附件操作有效。 addAttachment()
returns 布尔值 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.