phpmailer发送邮件

时间:2010-05-04 12:57:22

标签: php attachment sendmail phpmailer

我正在使用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 个答案:

答案 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;'

希望这有帮助。