我不确定这是否可行,但我正在尝试使用文件上传按钮(input type="file"
)中的Mandrill API将文件附加到外发电子邮件中。说实话,我不完全确定document.getElementById('idOfFileInput').value
实际返回的是什么。我知道这不是一个问这样的新手问题的地方,但我到处寻找,我找不到它(我知道你们其中一个人会狡猾,并在五分钟内指出我的一些文章)。不过,除此之外,我已经有一个.txt文件附加了消息C:\fakepath\test.txt
,我知道这是浏览器为安全起见的文件路径。也许在代码中问得更好:
按钮:
Attachment(s): <input type="file" id="file">
JS:
"attachments": [
{
"type": "text/*",
"name": "file_attachment",
"content": document.getElementById('file').value
}
],
我很抱歉,这是一个简单的问题,伪装成它的背景,但即使是这样,我也觉得这个问题可能是一个很好的未来参考,因为我已经尝试了一个星期并寻找某种类型的解决方案,但我找不到一个。有什么想法吗?
答案 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允许您访问)来最小化方法的垃圾邮件:
[文件名](超链接到直接下载链接)附加到此 电子邮件。