为什么phpmailer不发送附件?

时间:2013-03-20 08:09:11

标签: phpmailer php

我使用php邮件发送带附件的邮件,但我不知道为什么附件没有发送 其他msg在正文发送正确,没有错误显示PLZ为此

提供最佳解决方案
$to = 'ok123@gmail.com';
$msg = "This a body of a mail";
require_once("functions/class.phpmailer.php");
$mailer = new PHPMailer();

$mailer->From = "noreply@gmail.com";
$mailer->Subject = "attachment file";
$mailer->AddAddress($to);
$mailer->ContentType = 'text/html';
$mailer->CharSet = "UTF-8";
$mailer->Body = $msg;
$mailer->IsHTML(true);
$mailer->AddAttachment("images/20130319182911.zip","20130319182911.zip");
$mailer->Send();
echo "Message Sent OK<p></p>\n";

2 个答案:

答案 0 :(得分:2)

这是我最喜欢的邮件附件类。如果你喜欢的话,请使用它。

class AttachmentEmail {
    private $from = 'yours@email.com';
    private $from_name = 'Your Name';
    private $reply_to = 'yours@email.com';
    private $to = '';
    private $subject = '';
    private $message = '';
    private $attachment = '';
    private $attachment_filename = '';

    public function __construct($to, $subject, $message, $attachment = '', $attachment_filename = '') {
        $this -> to = $to;
        $this -> subject = $subject;
        $this -> message = $message;
        $this -> attachment = $attachment;
        $this -> attachment_filename = $attachment_filename;
    }

    public function mail() {
        if (!empty($this -> attachment)) {
            $filename = empty($this -> attachment_filename) ? basename($this -> attachment) : $this -> attachment_filename ;
            $path = dirname($this -> attachment);
            $mailto = $this -> to;
            $from_mail = $this -> from;
            $from_name = $this -> from_name;
            $replyto = $this -> reply_to;
            $subject = $this -> subject;
            $message = $this -> message;

            $file = $path.'/'.$filename;
            $file_size = filesize($file);
            $handle = fopen($file, "r");
            $content = fread($handle, $file_size);
            fclose($handle);
            $content = chunk_split(base64_encode($content));
            $uid = md5(uniqid(time()));
            $name = basename($file);
            $header = "From: ".$from_name." <".$from_mail.">\r\n";
            $header .= "Reply-To: ".$replyto."\r\n";
            $header .= "MIME-Version: 1.0\r\n";
            $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
            $header .= "This is a multi-part message in MIME format.\r\n";
            $header .= "--".$uid."\r\n";
            $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
            $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
            $header .= $message."\r\n\r\n";
            $header .= "--".$uid."\r\n";
            $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use diff. tyoes here
            $header .= "Content-Transfer-Encoding: base64\r\n";
            $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
            $header .= $content."\r\n\r\n";
            $header .= "--".$uid."--";

            if (mail($mailto, $subject, "", $header)) {
                return true;
            } else {
                return false;
            }
        } else {
            $header = "From: ".($this -> from_name)." <".($this -> from).">\r\n";
            $header .= "Reply-To: ".($this -> reply_to)."\r\n";

            if (mail($this -> to, $this -> subject, $this -> message, $header)) {
                return true;
            } else {
                return false;
            }

        }
    }
    }

并像

一样使用它
$sendit = new AttachmentEmail('test@example.com', 'Testing attachment!', 'Hi', '/home/test/test.jpg');
$sendit -> mail();

答案 1 :(得分:0)

Gmail会在检测到特定文件(如EXE)时删除.zip附件。将zip附件添加为20130319182911.piz,它应该到达。 这不是phpmailer问题,而是Gmail政策。