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

Javascript 使用浏览按钮将文件附加到Mandrill消息,javascript,html,file-upload,input,mandrill,Javascript,Html,File Upload,Input,Mandrill,我不确定这是否可行,但我正在尝试使用“文件上载”按钮(input type=“file”)将文件附加到传出电子邮件。老实说,我不完全确定document.getElementById('idOfFileInput')。value实际返回的是什么。我知道这里不适合问这样的新手问题,但我到处都找了,找不到(我知道你们中有人会很狡猾,在五分钟内给我指一些文章)。尽管如此,我还是得到了一个.txt文件,附带了消息C:\fakepath\test.txt,我知道这是浏览器为安全提供的文件路径。也许最好用代

我不确定这是否可行,但我正在尝试使用“文件上载”按钮(
input type=“file”
)将文件附加到传出电子邮件。老实说,我不完全确定document.getElementById('idOfFileInput')。value实际返回的是什么。我知道这里不适合问这样的新手问题,但我到处都找了,找不到(我知道你们中有人会很狡猾,在五分钟内给我指一些文章)。尽管如此,我还是得到了一个.txt文件,附带了消息
C:\fakepath\test.txt
,我知道这是浏览器为安全提供的文件路径。也许最好用代码问:

按钮:


我很抱歉,如果这是一个简单的问题,被它的背景掩盖了,但即使是这样,我觉得这个问题可能是一个很好的未来参考,因为我已经尝试了一个星期的事情,寻找某种类型的解决方案,但我还没有找到一个。有什么想法吗?

我已经详细研究了这个问题,似乎不可能将文件上传输入与Mandrill API一起用于附件。由于浏览器设置的安全限制,服务器需要对
file type=“input”
执行任何操作

我已经能够通过使用在电子邮件底部放置一个安全的下载链接来绕过这个问题,但这看起来有点可疑。很明显,在本地做会更好,但正如我所说,这似乎是不可能的

然而,这种折衷方式在某些方面比本机方式要好:Ink API允许用户从各种服务以及经典的文件上载进行上载,这提高了文件上载机制的可扩展性和易用性

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

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


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

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

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

例如,如果您使用的是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...');
        }
    }
});
$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));
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...');
        }
    }
});