Прикрепите файлы к сообщению Mandrill с помощью кнопки «Обзор»

Я не уверен, возможно ли это вообще, но я пытаюсь прикрепить файл к исходящему письму с отсылкой Mandrill API с помощью кнопки загрузки файла (input type="file"). Честно говоря, я не совсем уверен, что на самом деле возвращает document.getElementById('idOfFileInput').value. Я знаю, что это не место, чтобы задавать такой вопрос новичку, но я искал везде, и я не могу его найти (я знаю, что один из вас будет лукавить и укажет мне на какую-нибудь статью в течение пяти минут). Кроме того, я получил файл .txt для прикрепления с сообщением C:\fakepath\test.txt, которое, как я знаю, является путем к файлу, который браузер предоставляет для безопасности. Может быть, лучше спросить в коде:

Кнопка:

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

JS:

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

Извините, если это простой вопрос, замаскированный контекстом, но даже если это так, у меня есть ощущение, что этот вопрос может быть хорошим справочником в будущем, потому что я пробовал что-то в течение недели и искал какой-то тип решение, но я не смог его найти. Любые идеи?


person AstroCB    schedule 12.04.2014    source источник


Ответы (2)


Если вы хотите прикрепить файл, вы можете посмотреть загрузку файла AJAX.

Для API Mandrill требуется строка файла в кодировке base64, поэтому, если вы можете загрузить файл, вы можете легко заставить сервер возвращать строку в кодировке base64 для использования в API.

Существует множество плагинов, которые загружают файлы через ajax, и если вы используете библиотеку JavaScript, такую ​​как jQuery, вы можете посмотреть Загрузка файла jQuery

Например, если вы используете PHP:

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

Я сократил это для примера, но вы должны проверить типы файлов и т. Д., А не просто предполагать, что это файл в порядке.

и 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...');
        }
    }
});
person CᴴᵁᴮᴮʸNᴵᴺᴶᴬ    schedule 19.06.2014

Я тщательно изучил это, и оказалось, что невозможно использовать ввод загрузки файлов с API Mandrill для вложений. Сервер должен делать что-либо с file type="input" из-за ограничений безопасности, установленных браузерами.

Мне удалось обойти это с помощью API Ink File Picker, чтобы разместить безопасную ссылку для скачивания внизу. электронной почты в файл, но это выглядит немного подозрительно. Очевидно, было бы лучше сделать это нативно, но, как я уже сказал, это представляется невозможным.

Этот компромисс, однако, в некоторых отношениях лучше, чем нативный способ: Ink API позволяет пользователям загружать файлы из различных служб наряду с классической загрузкой файлов, что повышает как расширяемость, так и простоту. использования механизма загрузки файлов.

Использование ссылки для вложений по-прежнему выглядит подозрительно, но мне удалось свести к минимуму спамность этого метода, используя имя файла (к которому API предоставляет вам доступ):

[имя файла] (гиперссылка на прямую ссылку для скачивания) было прикреплено к этому письму.

person AstroCB    schedule 19.06.2014