2

我的 php 文件获得了传递的图像/png 数据,需要将其附加到电子邮件并发送所述电子邮件。

这是来自测试文件的工作代码:

<?php
include("include.php");
$subject = "Laptop Collection " . date("Y");
//create a boundary string
$random_hash = md5(date('r', time()));
//define the headers we want passed
$headers[] = "From: Do Not Reply <email@example.com>";
//add boundary string and mime type specification
$headers[] = "Content-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
ob_start();
$image = "data:image/png;base64,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";
$imgPng = imageCreateFromPng($image);
imageAlphaBlending($imgPng, true);
imageSaveAlpha($imgPng, true);
header("Content-type: image/png");
imagePng($imgPng); 
$i = ob_get_contents();
$attachment = chunk_split(base64_encode($i));
// clear the buffer, but don't destroy it
ob_clean();
// Define Body
ob_start(); //Turn on output buffering
?>
--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

This is the information for laptop problems.  Your signature is attached to this e-mail.

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2>
<p>This is something with <b>HTML</b> formatting.</p>
<img src="cid:signature.png" />
--PHP-alt-<?php echo $random_hash; ?>--

--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: application/zip; name="signature.png" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--

<?php
//copy current buffer contents into $message variable and delete current output buffer
$message = ob_get_clean();

$mail = new \helpdesk\core\mail("email@example.com", $subject, $message);
$mail->setHeaders($headers);
$mail->send();
unset($mail);
?>

这是我的 hd(帮助台)对象中正在调用的函数的代码。它是从 test.php 复制和粘贴的。我什至在两者上都将图像数据设置为相同的字符串,它在 test.php 中运行良好,但由于发送所有多部分 php 内容的纯文本而失败。

public static function createWorkflowData($signatureData, $signatureImage, $reviewData){
        //print_r($signatureData);
       // print_r($signatureImage);
        //print_r($reviewData);
        //exit;
        $stages = $_SESSION['student']->workflow->getAllStages();
        $updateAssignment = array();
        $assignmentID = "";
        $workflowID = null;
        $mysqli = \helpdesk\db\DB::connect();
        $stmt = $mysqli->prepare("INSERT INTO `check_workflow_data`
        (`workflowID`, `key`, `section`, `questionDate`, `answer`, `checkIn`, `WO`, `internalWO`)
        VALUES  (?,?,?,?,?,?,?,?)");
        foreach( $stages as $stage){
            // Skip main stages
            if($stage->getSection() == "main")
                continue;
            // Create Workflow in DB if it is the 1st one
            if($stage->getAssignmentGroup() != $assignmentID){
                $assignmentID = $stage->getAssignmentGroup();
                $workflowID =  \helpdesk\db\hd::createWorkflow($assignmentID, $signatureData);
            }
            //Create Any WO's
            if($stage->getPreparedWO() != null){
                $stage->setWOID( \helpdesk\db\hd::createWO( $stage->getPreparedWO() ) );
            }
            if($stage->getPreparedInternalWO() != null){
                $stage->setInternalWOID( \helpdesk\db\hd::createInternalWO( $stage->getPreparedInternalWO() ) );
            }
            $key = $stage->getKey();
            $section = $stage->getSection();
            $questionDate = (($stage->getAnswerTime())?$stage->getAnswerTime():time());
            $answer = (($stage->getAnswer())?$stage->getAnswer():"Not Answered");
            $checkIn = (($stage->getAnswerCheckIn()=="true")?1:0);
            $WO = $stage->getWOID();
            $internalWO = $stage->getInternalWOID();
            $stmt->bind_param("issisiss",$workflowID, $key, $section, $questionDate,$answer,$checkIn,$WO,$internalWO);
            $stmt->execute();
            if($stmt->error != ""){
                printf("Error: %s.\n", $stmt->error);
            }

            if(($CheckIn = $stage->getAnswerCheckIn()) != null){
                if($CheckIn == "true"){
                    //echo "Will update ".$assignmentID." by setting ".$stage->getSection()." to 1";
                    $updateAssignment[$assignmentID][$stage->getSection()] = 1;
                }else if($CheckIn == "false"){
                    $updateAssignment[$assignmentID][$stage->getSection()] = 0;
                }
            }
            //Prepare this item for this assignment for turn in
        }
        foreach($updateAssignment as $assignmentID => $assignmentUpdate){
            \helpdesk\db\hd::updateAssignment($assignmentID, $assignmentUpdate);
        }
        $stmt->close();
        $subject = "Laptop Collection " . date("Y");
        //create a boundary string
        $random_hash = md5(date('r', time()));
        //define the headers we want passed
        $headers[] = "From: Do Not Reply <email@example.com>";
        //add boundary string and mime type specification
        $headers[] = "Content-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
        ob_start();
        $image = $signatureImage;
        $imgPng = imageCreateFromPng($image);
        imageAlphaBlending($imgPng, true);
        imageSaveAlpha($imgPng, true);
        header("Content-type: image/png");
        imagePng($imgPng); 
        $i = ob_get_contents();
        $attachment = chunk_split(base64_encode($i));
        // clear the buffer, but don't destroy it
        ob_clean();
        // Define Body
        ob_start(); //Turn on output buffering
        ?>
        --PHP-mixed-<?php echo $random_hash; ?> 
        Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"

        --PHP-alt-<?php echo $random_hash; ?> 
        Content-Type: text/plain; charset="iso-8859-1"
        Content-Transfer-Encoding: 7bit

        This is the information for laptop problems.  Your signature is attached to this e-mail.

        --PHP-alt-<?php echo $random_hash; ?> 
        Content-Type: text/html; charset="iso-8859-1"
        Content-Transfer-Encoding: 7bit

        <h2>Hello World!</h2>
        <p>This is something with <b>HTML</b> formatting.</p>
        <img src="cid:signature.png" />
        --PHP-alt-<?php echo $random_hash; ?>--

        --PHP-mixed-<?php echo $random_hash; ?> 
        Content-Type: application/zip; name="signature.png" 
        Content-Transfer-Encoding: base64 
        Content-Disposition: attachment 

        <?php echo $attachment; ?>
        --PHP-mixed-<?php echo $random_hash; ?>--

        <?php
        //copy current buffer contents into $message variable and delete current output buffer
        $message = ob_get_clean();

        $mail = new \helpdesk\core\mail("email@example.com", $subject, $message);
        $mail->setHeaders($headers);
        $mail->send();
        unset($mail);
    }

有人可以告诉我我在这里做错了什么吗?

4

1 回答 1

1

检查图像数据中是否有任何添加的字符、空格或制表符。

于 2013-04-15T14:32:45.413 回答