【问题标题】:how to send HTML5 canvas image with email如何通过电子邮件发送 HTML5 画布图像
【发布时间】:2012-09-29 09:19:33
【问题描述】:

首先,我尝试使用 Pear 中的 Mail_mime 来执行此操作,但我无法从我的共享主机提供程序和 cpanel 加载该类。

接下来我按照this post 的指示进行操作 .它将图像写入“临时”文件夹,但写入零字节。 显然问题是,我错过了什么。 我在某处读到了关于在编码字符串中转换 + 符号,但我不确定?

主要问题是如何通过电子邮件发送画布图像,我对此一无所知。我关注了一些帖子,我认为我需要在服务器端创建一个临时图像文件,以便能够使用内置邮件功能将其附加到电子邮件中。因为实际写入了 0 个字节,所以首先解决该问题似乎是合乎逻辑的,邮件问题会自行解决。 从下面的 cmets 来看,似乎不需要先创建图像,但在找到可行的解决方案之前,我必须进行更多调查。

另外,如果有人有其他解决方案或 php 类来发送邮件正文中的图像 而不是附件

我用 ajax 发送这个

var canvas = document.getElementById('doodle');
function serialize(canvas) {
    return canvas.toDataURL();
}

这是服务器端

case 'doodle':
    $image = $_POST['doodle'];
    $data ="doedeliedoe";

    $email ="from@msn.com";
    $headers="From:".$email."\r\n";
    $headers .= "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    list($settings, $encoded_string) = explode(',', $image);
    list($img_type, $encoding_method) = explode(';', substr($settings, 5));

    if($encoding_method == 'base64'){

        $file=fopen("/home/user/public_html/user/temp/newLego.png",'w+');

       fwrite($file,base64_decode($encoded_string)) ;
       fclose($file);
    }
    $my_file = "newLego.png";
    $my_path = "/home/user/public_html/user/temp/";
    $my_subject = "My Design";
    $my_message = "Designed by ".$email;
   $this-> mail_attachment($my_file, $my_path, "mymail@gmail.com", $email, $email, $email,  $my_subject, $my_message);  



function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $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 different content types 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)) {
        //echo "mail send ... OK"; // or use booleans here
    } else {
       // echo "mail send ... ERROR!";
    }
}   

谢谢,理查德

【问题讨论】:

  • 图片已经是base64编码了,为什么要解码成文件只是为了读取它并稍后编码?
  • 我不知道,我只是关注了别人他的帖子,你可能是对的,但它仍然让我知道为什么写了 0 个字节..

标签: php email canvas


【解决方案1】:

您首先应该更好地让自己对所面临的问题感到满意。是不是:

  1. 将画布转换为图像“文件”-或-
  2. 将图像“文件”附加到外发邮件中

如果不执行 1.,您将无法在您的场景中执行 2.,但是 2. 可以独立于 1.. 来解决。

我建议你要么问一个,要么问另一个。将两者整合起来实际上非常简单:

  • 如果您的邮件库只接受附件文件,则需要创建一个临时文件。您可以使用 SplTempFileObject 在 PHP 中轻松创建临时文件。
  • 如果您的邮件库接受二进制字符串作为附件,则只需传递二进制字符串即可。
  • 如果您需要调试从画布位图数据创建文件是否有效,您应该保存到文件并测试该文件是否为图像(这很容易手动完成,但是这个 也可以自动化)

很抱歉,如果这个答案更像是一个评论,只是我在实际提供代码方面没有多大用处,因为问题是如此分段。

【讨论】:

  • 我完全不明白你在说什么,我一直在搜索这里的帖子,显然你想了解更多关于这个主题的信息。什么邮件库,除了标准邮件..我不知道?就像我说的我试过梨。你说我需要一个或另一个..不知道为什么......我想我已经阅读了所有关于邮寄画布图像的帖子,但没有出现..如果这对你来说似乎很明显..那么请赐教我还有一些..因为我找不到更多有用的帖子..
  • 您不必立即提供代码,但将不胜感激..我已经用了一天了..但这并不是真正的问题,主要问题是我有当然是帖子的主题..我做错的任何事情都是让其他人审查
  • 一个支持文件系统和内存(字符串)附件的邮件库是Phpmailer,如果你不使用任何包管理器,它是相当容易集成的。否则另一个非常好的是 Swiftmailer。
  • 尝试先找出您的主要问题。它是从画布中生成文件还是制作附件。这与知识没有太大关系,只是如何将一个整体问题分解成更小的问题。小问题更容易解决,如果你解决了所有小问题,大问题也解决了。就是这样。
  • 我调查了一下,我已经下载了 phpMailer,但我想先试试这段代码,因为它看起来很简单,我还认为你需要控制 phpmailer 的服务器..无论如何我继续阅读..
猜你喜欢
  • 2011-09-03
  • 2014-10-18
  • 2016-07-23
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 2018-08-28
  • 2018-04-08
相关资源
最近更新 更多