-1

我正在使用 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");

更新:我试图在附加文件之前显示文件的大小,它实际上显示了文件大小。任何人都可以帮助我吗?

4

4 回答 4

0

进一步测试的一些建议:

1 - 尝试附加一个简单的 *.txt 文件,该文件位于与正在执行的脚本相同的目录中。这将测试附件方面的事情,并可以证明脚本是否不喜欢附加任何文件,或者只是 *.sql 一个。

2 - 如果#1 工作正常,将 *.txt 文件移动到 *.sql 文件当前所在的同一文件夹中,然后再次测试。然后这应该证明脚本是否能够通过您正在使用的文件路径访问文件。

3 - 尝试将 *.sql 文件的内容回显到脚本生成的 Web 浏览器输出中,或者回显到电子邮件消息的正文中。这也应该证明脚本是否能够读取有问题的文件。

我可能对这些建议不太满意,但如果我要尝试解决这个问题,它们将是我开始的地方。

于 2010-05-06T13:36:26.977 回答
0

您可以在尝试附加文件之前尝试测试文件的存在。此外,不知道 a\将如何在 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";
}
于 2010-05-04T13:03:01.863 回答
-1

这可能会对您有所帮助。我所做的是首先压缩 .sql 文件以确保包含所有内容并使电子邮件更小(如果您有 10MB 或更大的数据库,这很有用)我使用 .sh 脚本来执行此操作,我将其命名为“sqlbackup.sh”:

旁注:我的 .sql 文件存储在网络服务器上的文件夹“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 文件。

如果您想在电子邮件中添加消息,请访问此链接并将代码相应地添加到 'ob_start(); 之后的区域中;?>'

希望这可以帮助。

于 2013-04-07T02:25:22.617 回答
-1

我建议你改用 swiftmailer.org

于 2010-05-04T13:03:43.427 回答