2009-07-29 27 views
7

He convertido el contenido de un elemento canvas en datos (esquema URI) utilizando toDataURL() ($contact_image_data) y deseo enviarlo por correo electrónico como archivo adjunto. Esta es actualmente la forma en que he PHPMailer establecido:PHPMailer, AddStringAttachment y Data URI Scheme

$contact_image_data="data:image/png;base64,iVBORw0KGgo[...]"; 
$filename="test.png"; 
$encoding = "base64"; 
$type = "image/png"; 
$mail->AddStringAttachment($contact_image_data, $filename, $encoding, $type); 

Me pregunto si esto es realmente posible, y si es así, ¿qué pasos me falta.

Puedo enviar un correo electrónico, adjuntar un archivo llamado "test.png" que contiene el contenido de $contact_image_data, pero en realidad no crea una imagen.

Cualquier ayuda sería mucho apreciado.

Samuel.

Respuesta

2

Sí, debería ser posible. ¿Está llamando aDataURL() con el tipo MIME 'image/png' para que sepa cómo generarlo?

Intente romper su secuencia de comandos en dos componentes - asegúrese de que realmente tiene un PNG luego intente enviarlo por correo.

Por ejemplo, se prueba.png abiertas en el ordenador cuando se escribe? ..

<?php 
$contact_image_data="data:image/png;base64,iVBORw0KGgo[...]"; 
$fp = fopen('test.png', 'w'); 
fwrite($fp, $contact_image_data); 
fclose($fp); 
?> 

Espero que ayude un poco!

+0

Gracias, Eso fue muy útil, fue sólo después de jugar con 'fwrite' de haber encontrado este http: //canvaspaint.org/blog/2007/01/saving-images/#comments que me dieron mi respuesta. ¡Salud! –

+0

Versión archivada del enlace mencionado anteriormente comentario: https://web.archive.org/web/20110305022152/http://canvaspaint.org/blog/2007/01/saving-images/ – danShumway

13

Resulta que necesitaba para despojar a la sección data:image/png;base64, y base64_decode() los datos:

$contact_image_data="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA"; 
$data = substr($contact_image_data, strpos($contact_image_data, ",")); 
$filename="test.png"; 
$encoding = "base64"; 
$type = "image/png"; 
$mail->AddStringAttachment(base64_decode($data), $filename, $encoding, $type);   
+0

Gracias, esto realmente me ayudó mucho . funciona perfecto! – Julez