我正在使用phpmailer类发送电子邮件,我正在将文件附加到邮件中。 电子邮件发送成功,但附件是一个sql文件是空的,不应该是这种情况。我已尝试使用图像文件,但似乎我附加的每个文件都是空的。 有人可以帮我解决这个问题吗?
$mail = new PHPMailer();
$body = "Reminder";
$mail->IsSMTP();
$mail->Host = "mail.yourdomain.com";
$mail->SMTPDebug = 1;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->Username = "abc@gmail.com";
$mail->Password = "abc";
$mail->SetFrom('abc@gmail.com',
'blbla');
$mail->AddReplyTo("name@yourdomain.com","First Last");
$mail->Subject = "Your order has been successfully placed"
$mail->MsgHTML($body);
$mail->AddAddress("xyz@live.com","xyz");
$mail->AddAttachment("D:\b2\shop3.sql","shop3.sql");
更新:我试图在附加文件之前显示文件的大小,它实际上显示了文件大小。有人可以帮帮我吗?
答案 0 :(得分:0)
您可以尝试在尝试附加文件之前测试文件是否存在。另外,我不知道\
如何在PHP中的字符串中起作用,所以最好通过C标准来逃避它:
$attach_filename = "D:\\b2\\shop3.sql";
if (is_file($attach_filename)) {
$mail->AddAttachment($attach_filename,"shop3.sql");
} else {
print "error: attachment $attach_filename doesn't exist";
}
答案 1 :(得分:0)
有关进一步测试的几点建议:
1 - 尝试并附加一个简单的* .txt文件,该文件位于与正在执行的脚本相同的目录中。这将测试附件方面的事情,并可能证明脚本是否不喜欢附加任何文件,或只是* .sql文件。
2 - 如果#1正常工作,请将* .txt文件移动到* .sql当前所在的文件夹中,然后再次测试。然后,这应该证明脚本是否能够通过您正在使用的文件路径访问文件。
3 - 尝试将* .sql文件的内容回显到脚本生成的Web浏览器输出中,或者回显到电子邮件正文中。这也应该证明脚本是否能够读取有问题的文件。
我可能会因为这些建议而离开基地,但是如果我试图对这个建议进行故障排除,我们就会开始。
答案 2 :(得分:-1)
我建议您尝试使用swiftmailer.org
答案 3 :(得分:-1)
这可能会帮助您。 我所做的是首先压缩.sql文件以确保包含所有内容并使电子邮件更小(如果您有10MB或更多的数据库,则非常有用) 我使用.sh脚本来执行此操作,我将其命名为“sqlbackup.sh”:
注意:我的.sql文件存储在Web服务器上的“db_backup / sqldata”文件夹下,是该文件夹中唯一的.sql文件。如果它们尚不存在,请创建两个文件夹。
#!/bin/sh
cd /home/<username>/db_backup/sqldata/
tar -zcvf sqldata.tar *.sql
cd /home/<username>/db_backup/
perl emailsql.pl
接下来我创建了一个php邮件文件,将该压缩文件发送到我的电子邮箱,我将其命名为“mail.php”
旁注:我使用no-reply@domain.co.za地址作为来自和回复地址,就像它对我自己一样。相应地编辑。
<?php
$to = '<enter email to send to>';
$subject = 'SQL Backup' . date('r', time());
$random_hash = md5(date('r', time()));
$headers = "From: <from address>\r\nReply-To: <reply to address>";
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
$attachment= chunk_split(base64_encode(file_get_contents('sqldata/sqldata.tar')));
ob_start();
?>
--PHP-alt-<?php echo $random_hash; ?>--
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: application/x-tar; name="sqldata.tar"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--
<?php
$message = ob_get_clean();
$mail_sent = @mail( $to, $subject, $message, $headers );
?>
然后我所做的就是创建一个cron作业,首先运行'sqlbackup.sh'文件来创建zip,然后根据文件的大小创建一个cron作业来运行'mail.php'文件。我在zip配置后一小时运行mail.php文件。
如果您要向电子邮件添加消息,请访问THIS LINK并将相应的代码添加到'ob_start();之后的区域中?&GT;'
希望这有帮助。