Pregunta

No estoy seguro de si esto es posible, pero estoy tratando de adjuntar un archivo a un correo con la El mandril de la API desde el archivo botón de carga (input type="file").Para ser honesto, no estoy totalmente seguro de lo que document.getElementById('idOfFileInput').value en realidad devuelve.Sé que este no es el lugar para pedir un principiante pregunta como esa, pero he buscado por todas partes y no lo encuentro (sé que uno de ustedes va a ser astuto y me apunte a algún artículo, dentro de los cinco minutos).Aparte de eso, sin embargo, he conseguido una .txt archivo para adjuntar con el mensaje C:\fakepath\test.txt, que yo sepa a ser la ruta de los archivos que el navegador ofrece para la seguridad.Tal vez es mejor frecuentes en el código:

Botón:

Attachment(s):&nbsp;&nbsp;<input type="file" id="file">

JS:

"attachments": [
        {
            "type": "text/*",
            "name": "file_attachment",
            "content": document.getElementById('file').value
        }
    ],

Lo siento si esto es una simple pregunta encubierta por su contexto, pero incluso si es así, tengo la sensación de que esta pregunta podría ser una buena referencia en el futuro porque he estado tratando de cosas para una semana y buscando algún tipo de solución, pero no he sido capaz de encontrar uno.Alguna idea?

¿Fue útil?

Solución

Si desea adjuntar un archivo, puede ver el archivo AJAX Subir

La API del mandril requiere una cadena codificada de base 64, por lo tanto, si puede cargar el archivo, puede hacer que el servidor sea fácil de devolución de una cadena codificada base64 para que lo use en la API ..

Hay muchos complementos que cargarán archivos sobre AJAX y, si está utilizando una biblioteca de JavaScript como JQery, puede ver jquery file cargar

Si está utilizando php , por ejemplo:

$result = array();
$result['status'] = 'error';
if(isset($_FILES["mandrill_attachment"]))
{
    $base64 = base64_encode(file_get_contents($_FILES["mandrill_attachment"]["tmp_name"]));
    $result['base64'] = $base64;
    $result['status'] = 'ok';
}

die(json_encode($result));

He mantenido ese corto para el ejemplo, pero debe revisar los tipos de archivos, etc., no solo asumir que es un archivo OK

y el js

var mandrill_attachment = false;

$(".attachment").uploadFile({
    url: "upload.php",
    dragDrop:false,
    multiple:false,
    autoSubmit:true,
    fileName: "mandrill_attachment",    
    returnType:"json",
    onSuccess:function(files,data,xhr)
    {
        if( data.status == 'ok' )
        {
            mandrill_attachment = data.base64;
        } else {
            alert('something went wrong...');
        }
    }
});

Otros consejos

He mirado en esta ampliamente, y parece que es imposible el uso de cargar el archivo de entrada con el Mandril del API para que los archivos adjuntos.Un servidor está obligado a hacer cualquier cosa con un file type="input" debido a las restricciones de seguridad que se han puesto en su lugar por los navegadores.

He sido capaz de conseguir todo esto mediante el uso de la Tinta Selector de Archivos de la API para colocar un enlace de descarga seguro en la parte inferior del mensaje de correo electrónico a un archivo, pero esto parece un poco sospechoso.Ella, obviamente, sería mejor hacerlo de forma nativa, pero, como he dicho, que parece ser imposible.

Este compromiso, sin embargo, es en algunos aspectos mejor que el nativo manera:la Tinta de la API permite a los usuarios subir a partir de una variedad de servicios, junto con el clásico de la subida de los archivos, lo que mejora la extensibilidad y la facilidad de uso de la carga de archivo mecanismo.

Usando un enlace para que los archivos adjuntos todavía parece sospechoso, pero he sido capaz de minimizar la spamminess de el método mediante el nombre de archivo (de la cual la API ofrece acceso):

[nombre de archivo] (con hipervínculo al enlace de descarga directa) se adjunta a esta correo electrónico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top