Domanda

Non sono sicuro che questo sia anche possibile, ma sto cercando di allegare un file a un'e-mail in uscita con il mandrill API dal pulsante Carica file (input type="file"). Per essere onesti, non sono del tutto sicuro di cosa ritorna in realtà document.getElementById('idOfFileInput').value. So che questo non è il posto giusto per porre una domanda principiante del genere, ma ho guardato dappertutto e non riesco a trovarlo (conosco uno di voi sarà Sly e indicarmi ad un articolo entro cinque minuti). A parte questo, però, ho ottenuto un file .txt da allegare con il messaggio C:\fakepath\test.txt, che conosco il percorso del file che il browser dà sicurezza. Forse è meglio chiesto nel codice:

Pulsante

:

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

JS:

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

Mi dispiace se questa è una semplice domanda camuffata dal suo contesto, ma anche se lo è, ho la sensazione che questa domanda possa essere un buon riferimento futuro perché ho provato le cose per una settimana e cercando Qualche tipo di soluzione, ma non sono stato in grado di trovarne uno. Qualche idea?

È stato utile?

Soluzione

Se volevi allegare un file, puoi guardare il file Ajax Carica

L'API Mandrill richiede una stringa codificata BASE64 del file, quindi se è possibile caricare il file è possibile effettuare facilmente il server restituire una stringa codificata BASE64 per l'utilizzo nell'API ..

Ci sono molti plugin che caricano i file su Ajax e se si utilizza una libreria JavaScript come JQuery puoi guardare a jquery file caricamento

Se stai usando PHP ad esempio:

$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));
.

L'ho mantenuto breve per l'esempio, ma dovresti controllare i tipi di file ecc., Non solo assumere che sia un file OK

e il 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...');
        }
    }
});
.

Altri suggerimenti

Ho guardato in modo estensivo, e sembra che sia impossibile utilizzare il file di caricamento del file con l'API Mandrill per gli allegati. È necessario un server per fare qualsiasi cosa con un file type="input" a causa delle restrizioni di sicurezza che sono state messe in posizione dei browser.

Sono stato in grado di aggirare questo usando il API del selettore di file di inchiostro per posizionare un link di download sicuro In fondo all'e-mail a un file, ma questo sembra un po 'di pesce. Sarebbe ovviamente meglio farlo in modo nativo, ma, come ho detto, che sembra essere impossibile.

Questo compromesso, tuttavia, è in qualche modo meglio rispetto al modo nativo: l'API inchiostro consente agli utenti di caricare da una varietà di servizi, insieme al caricamento del file classico, il che migliora sia l'estensibilità e la facilità d'uso del meccanismo di caricamento del file.

L'utilizzo di un collegamento per gli allegati sembra ancora sospetto, ma sono stato in grado di ridurre al minimo la spamminess del metodo utilizzando il nome del file (che l'API ti consente di accedere a):

.

[Nome file] (collegamenti ipertestuali per direttare il link di download) è stato allegato a questo Email.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top