PHP电子邮件附件 - 画布图像BLANK

时间:2012-09-27 16:08:37

标签: php ajax email canvas

更新:我收到的图片是一张空白图片,是我画布的大小。它不是画布上的图像。我能够将新的画布PNG插入到DOM中,所以我知道图像数据很好。

进一步:我可以在将图像数据发送到PHP表单之前复制它,将该代码粘贴到另一个页面上的标记中,因为它的src和正确的图像显示!所以关闭这里!!

我的用户在HTML5画布上创建了一个图像。我需要将图像作为电子邮件附件发送给用户。我可以使用jquery AJAX捕获图像并将其发布到PHP页面。

是的,我已经阅读了十几个其他相关帖子,这就是我如何达到这一点。不 - 他们都没有回答我的问题 - 这部分总是被忽略。不 - 我不想使用PHPMailer(可怕的文档)或任何其他类。这可以使用PHP mail()。我很亲密。

这是我的网络应用程序中的javascript:

var data = "to=" + to + "&subject=" + subject;          
var canvas2 = document.getElementById("canvas");
var strDataURI = canvas2.toDataURL(); 
data = data + "&attachment="  + strDataURI;

$.ajax({
    type: "POST",
    url: "mail2.php",
    data: data,
    success: function(){

        $("#loading").fadeOut(100).hide();
        $('#message-sent').fadeIn(500).show();               
   }
});

发布此数据:

 "to=erik@mydomain.com&subject=test&attachment=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3gAAAHBCAYAAAA7NBnaAAA..."

到这个PHP页面(更新,更简单):

<?PHP    
$to =   $_REQUEST['to'];
$subject =  'PHP Mail Attachment Test';
$bound_text =   "jimmyP123";
$bound =    "--".$bound_text."\r\n";
$bound_last =   "--".$bound_text."--\r\n";


$attachment = $_REQUEST['attachment'];
$attachment =  substr($attachment,strpos($attachment,",")+1);
$attachment = chunk_split($attachment);



$headers =  "From: admin@server.com\r\n";
$headers .=     "MIME-Version: 1.0\r\n"
."Content-Type: multipart/mixed; boundary=\"$bound_text\"";

$message .=     "If you can see this MIME than your client doesn't accept MIME types!\r\n"
.$bound;

$message .=     "Content-Type: text/html; charset=\"iso-8859-1\"\r\n"
."Content-Transfer-Encoding: 7bit\r\n\r\n"
."hey my <b>good</b> friend here is a picture of regal beagle\r\n"
.$bound;

//$file =   file_get_contents("http://www.litfuel.net/php/regal_004.jpg");

$message .=     "Content-Type: image/png; name=\"index.png\"\r\n"
."Content-Transfer-Encoding: base64\r\n"
."Content-disposition: attachment; file=\"index.png\"\r\n"
."\r\n"
.$attachment
//.chunk_split(base64_encode($file))
.$bound_last;

if(mail($to, $subject, $message, $headers))
{
     echo 'MAIL SENT';
} else {
     echo 'MAIL FAILED';
}

?>

1 个答案:

答案 0 :(得分:0)

我注意到你正在使用heredoc。这可能会导致这个问题。

电子邮件中的行结尾必须是\r\n(CRLF),所以我建议改为使用字符串连接重写它,然后它应该有效。

此外,请确保在chunk_split()上应用$attachment以保持行长