附上用TCPDF生成的pdf,用邮件PHP函数发送邮件

时间:2013-03-26 09:07:46

标签: php attachment tcpdf email-attachments

我想使用邮件Php函数发送使用TCPDF生成的pdf。

如果我发送这样的简单邮件:mail('xxx@ne.es','我的主题',$ message);

pdf生成得很好,但是当我想在标题中附加pdf时不起作用。

这是我的代码:

$pdfdoc=$pdf->Output('file.pdf', 'S');

 $separator = md5(time());

        $eol = PHP_EOL;
// Send
        $filename = "_Desiredfilename.pdf";

        // encode data (puts attachment in proper format)

        $attachment = chunk_split(base64_encode($pdfdoc));

        ///////////HEADERS INFORMATION////////////
        // main header (multipart mandatory) message
        $headers  = "From: Sender_Name<sender@domain.com>".$eol;
        $headers .= "Bcc: email@domain.com".$eol;
        $headers .= "MIME-Version: 1.0".$eol;
        $headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol;
        $headers .= "Content-Transfer-Encoding: 7bit".$eol;
        $headers .= "This is a MIME encoded message.".$eol.$eol;

        // message
        $headers .= "--".$separator.$eol;
        $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
        $headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
        $headers .= $message.$eol.$eol;

        // attachment
        $headers .= "--".$separator.$eol;
        $headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol;
        $headers .= "Content-Transfer-Encoding: base64".$eol;
        $headers .= "Content-Disposition: attachment".$eol.$eol;
        $headers .= $attachment.$eol.$eol;
        $headers .= "--".$separator."--";


        //Email message
        mail('xxx@gmail.com', 'prova', 'hola', $headers);

什么时候出现问题?

由于

此致

1 个答案:

答案 0 :(得分:1)

我希望这对你也有用。我已经检查过了,效果很好。请尝试一下。之前请检查“php.ini”邮件并检查pdf文件是否已创建。

$pdfdoc=$pdf->Output('file.pdf', 'F');

        // Send
        $files = "file.pdf";



        ///////////HEADERS INFORMATION////////////
        // boundary
        $semi_rand = md5(time());
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

        // headers for attachment
        $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";

         // multipart boundary
        $message = "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
        "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";

        // preparing attachments
        $message .= "--{$mime_boundary}\n";
            $fp     = @fopen($files,"rb");
            $data   = @fread($fp,filesize($files));
                    @fclose($fp);
            $data = chunk_split(base64_encode($data));
            $message .= "Content-Type: application/octet-stream; name=\"".basename($files)."\"\n" .
            "Content-Description: ".basename($files)."\n" .
            "Content-Disposition: attachment;\n" . " filename=\"".basename($files)."\"; size=".filesize($files).";\n" .
            "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
        $message .= "--{$mime_boundary}--";


        //Email message
        mail('xxx@gmail.com', 'prova', 'hola', $headers);

或在您的代码中包含此功能,使用此功能发送多附件文件。 这个效果很好。请试试这个。

/* 
     * Function Name: sentMail
     * Scope        : Sent Mail Function with CC , BCC and Attachment files..
     * Input        : Recipient Name            => $recipientName   // (Required)
     *                Recipient MailId(Many)    => $recipientMailId // (Required & Array Format)
     *                Subject Content           => $subjectContent  // (Required)
     *                Message Content           => $messageContent  // (Required)
     *                Sender MailId             => $senderMailId    // (Required)
     *                Sender Name(Many)         => $senderName      // (Required)
     *                Recipient CC MailId       => $recipientCCMailId   //(Optional & Array Format)
     *                Recipient BCC MailId      => $recipientBCCMailId  //(Optional & Array Format)
     *                Attachment Files          => $attachmentFiles     //(Optional & Array Format)
     * Output       : Sent mail to the Recipient.
     */
    public function sentMail($recipientName,$recipientMailId,$subjectContent,$messageContent,$senderName,$senderMailId,$recipientCCMailId,$recipientBCCMailId,$attachmentFiles)
    {
        try 
        {
            /*Get the Mulitple Recipient CC MailId*/
            if(isset($recipientCCMailId)){
                if(count($recipientCCMailId)>1){
                    $recipientCCMailId = implode(',',$recipientCCMailId);
                }
                else{
                    $recipientCCMailId = $recipientCCMailId[0];
                }
            }

            /*Get the Mulitple Recipient BCC MailId*/
            if(isset($recipientBCCMailId)){
                if(count($recipientBCCMailId)>1){
                    $recipientBCCMailId = implode(',',$recipientBCCMailId);
                }
                else{
                    $recipientBCCMailId = $recipientBCCMailId[0];
                }
            }

            /*** Mail Contents Starts ***/
                $subj = $subjectContent;
                $msg ="";

                /*Get the Mulitple Recipient BCC MailId*/
                if(count($recipientMailId)>1){
                    $recipientMailId = implode(',',$recipientMailId);
                    $msg .="Dear, <b>All</b>\r <br>";
                }
                else{
                    $recipientMailId = $recipientMailId[0];
                    $msg .="Dear, <b>".ucwords($user_name)."</b> \r <br>";
                }
                $msg .=$messageContent."\r <br><br>";
                $msg .="Thank you"."\r\n\n <br>";
                $msg .=$senderName."\r\n\n <br><br>";

                $headers ="";

                /** Get the Mulitple Attachment files and Attachment Process Starts **/
                if(isset($attachmentFiles)){
                    $headers .= "From: ".$senderMailId."\r\n";
                    $headers .= "Cc: ".$recipientCCMailId."\r\n";
                    $headers .= "Bcc: ".$recipientBCCMailId."\r\n";
                    // boundary
                    $semi_rand = md5(time());
                    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

                    // headers for attachment
                    $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
                     // multipart boundary
                    $msg .= "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
                    "Content-Transfer-Encoding: 7bit\n\n" . $msg . "\n\n";

                    // preparing attachments
                    for($i=0;$i<count($attachmentFiles);$i++)
                    {
                        if(is_file($attachmentFiles[$i]))
                        { 
                            $msg .= "--{$mime_boundary}\n";
                            $fp     = @fopen($attachmentFiles[$i],"rb");
                            $data   = @fread($fp,filesize($attachmentFiles[$i]));
                                      @fclose($fp);
                            $data   = chunk_split(base64_encode($data));
                            $msg .= "Content-Type: application/octet-stream; name=\"".basename($attachmentFiles[$i])."\"\n" .
                            "Content-Description: ".basename($attachmentFiles[$i])."\n" .
                            "Content-Disposition: attachment;\n" . " filename=\"".basename($attachmentFiles[$i])."\"; size=".filesize($attachmentFiles[$i]).";\n" .
                            "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                        }
                     }
                    $msg .= "--{$mime_boundary}--";
                }
                /** Attachment Process Ends **/
                else{
                    $headers .= "MIME-Version: 1.0" . "\r\n";
                    $headers .= "Content-type:text/html;charset=utf-8" . "\r\n";
                    //$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
                    $headers .= "From: ".$senderMailId."\r\n";
                    $headers .= "Cc: ".$recipientCCMailId."\r\n";
                    $headers .= "Bcc: ".$recipientBCCMailId."\r\n";
                }
            /*** Mail Contents Ends ***/    
            $sent_mail=mail($recipientMailId,$subj,$msg,$headers); 
            if($sent_mail)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        catch (Exception $e)
        {
            getConnection('close');
            echo "Caught Exception:",$e->getMessage();
        } 
    }

并且您通过此参数在函数的DTD中以指定的格式编辑了这个。

sentMail($recipientName,$recipientMailId,$subjectContent,$messageContent,$senderName,$senderMailId,$recipientCCMailId,$recipientBCCMailId,$attachmentFiles);

这里,

$recipientName = "sam";
$recipientMailId = array("xxx@gmail.com");
$subjectContent = "this is sample pdf attachment over email";
$messageContent = "this is sample pdf attachment over email";
$senderMailId   = "sender@gmail.com"
$senderName     = "sender";
$recipientCCMailId = array("xxx@gmail.com");
$recipientBCCMailId = array("xxx@gmail.com");
$attachmentFiles = array("filename.pdf");

sentMail($recipientName,$recipientMailId,$subjectContent,$messageContent,$senderName,$senderMailId,$recipientCCMailId,$recipientBCCMailId,$attachmentFiles);