Question

Je ne suis pas sûr que cela soit possible, mais j'essaie de joindre un fichier à un e-mail sortant avec le API Mandrill à partir du bouton de téléchargement de fichier (input type="file").Pour être honnête, je ne sais pas vraiment quoi document.getElementById('idOfFileInput').value revient effectivement.Je sais que ce n'est pas le moment de poser une question comme celle-là à un novice, mais j'ai cherché partout et je ne la trouve pas (je sais que l'un d'entre vous sera sournois et me dirigera vers un article dans les cinq minutes).Cela mis à part, j'ai reçu un fichier .txt à joindre au message. C:\fakepath\test.txt, que je sais être le chemin du fichier que le navigateur indique pour des raisons de sécurité.Il est peut-être préférable de le demander dans le code :

Bouton:

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

JS :

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

Je suis désolé s'il s'agit d'une simple question déguisée par son contexte, mais même si c'est le cas, j'ai le sentiment que cette question pourrait être une bonne référence future car j'essaie des choses depuis une semaine et je cherche une sorte de solution, mais je n'ai pas réussi à en trouver.Des idées?

Était-ce utile?

La solution

Si vous souhaitez joindre un fichier, vous pouvez consulter le téléchargement de fichier AJAX.

L'API Mandrill nécessite une chaîne codée en base64 du fichier, donc si vous pouvez télécharger le fichier, vous pouvez facilement faire en sorte que le serveur renvoie une chaîne codée en base64 que vous pourrez utiliser dans l'API.

Il existe de nombreux plugins qui téléchargent des fichiers via ajax et si vous utilisez une bibliothèque JavaScript comme jQuery, vous pouvez consulter Téléchargement de fichiers jQuery

Si vous utilisez PHP par exemple:

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

J'ai gardé cela court pour l'exemple, mais vous devriez vérifier les types de fichiers, etc., pas seulement en supposant qu'il s'agit d'un fichier OK.

et le 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...');
        }
    }
});

Autres conseils

J'ai examiné cela en profondeur et il semble qu'il soit impossible d'utiliser l'entrée de téléchargement de fichiers avec l'API Mandrill pour les pièces jointes.Un serveur est tenu de faire quoi que ce soit avec un file type="input" en raison des restrictions de sécurité mises en place par les navigateurs.

J'ai pu contourner ce problème en utilisant le API du sélecteur de fichiers d'encre pour placer un lien de téléchargement sécurisé au bas de l'e-mail vers un fichier, mais cela semble un peu louche.Il vaudrait évidemment mieux le faire nativement, mais, comme je l'ai dit, cela semble impossible.

Ce compromis est cependant, à certains égards, mieux que la manière native :l'API Ink permet aux utilisateurs de télécharger à partir d'une variété de services, en plus du téléchargement de fichiers classique, ce qui améliore à la fois l'extensibilité et la facilité d'utilisation du mécanisme de téléchargement de fichiers.

L'utilisation d'un lien pour les pièces jointes semble toujours suspecte, mais j'ai pu minimiser le spam de la méthode en utilisant le nom du fichier (auquel l'API vous donne accès) :

Nom de fichier] (lien hyperlien vers le lien de téléchargement direct) a été joint à cet e-mail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top