使用“浏览”按钮将文件附加到Mandrill消息

时间:2014-04-12 02:33:18

标签: javascript html file-upload input mandrill

我不确定这是否可行,但我正在尝试使用文件上传按钮(input type="file")中的Mandrill API将文件附加到外发电子邮件中。说实话,我不完全确定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
        }
    ],

我很抱歉,这是一个简单的问题,伪装成它的背景,但即使是这样,我也觉得这个问题可能是一个很好的未来参考,因为我已经尝试了一个星期并寻找某种类型的解决方案,但我找不到一个。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

如果您想附加文件,可以查看AJAX文件上传

Mandrill API需要文件的base64编码字符串,因此如果您可以上传文件,您可以轻松地使服务器返回base64编码的字符串供您在API中使用..

有很多插件会通过ajax上传文件,如果你使用像jQuery这样的JavaScript库,你可以查看jQuery File Upload

如果你正在使用 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));

我保留了这个例子的简短,但你应该检查文件类型等,而不仅仅是假设它是一个OK文件

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

答案 1 :(得分:0)

我已经对此进行了广泛的研究,并且似乎无法使用Mandrill API将文件上传输入用于附件。由于浏览器已实施安全限制,服务器需要对file type="input"执行任何操作。

我已经能够通过使用Ink File Picker API将电子邮件底部的安全下载链接放到文件中来解决这个问题,但这看起来有点可疑。显然,本地做这件事会更好,但正如我所说,这似乎是不可能的。

然而,这种妥协在某种程度上更好比本机方式:Ink API允许用户从各种服务上传,以及经典的文件上传,这提高了可扩展性以及文件上传机制的易用性。

使用附件链接仍然看起来很可疑,但我已经能够通过使用文件名(API允许您访问)来最小化方法的垃圾邮件:

  

[文件名](超链接到直接下载链接)附加到此   电子邮件。