使用浏览按钮将文件附加到Mandrill消息
-
21-12-2019 - |
题
我不确定这是否可能,但我试图将文件附加到带有 山药空气污染指数 从文件上传按钮(input type="file"
).说实话,我不完全确定是什么 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
}
],
我很抱歉,如果这是一个由其上下文伪装的简单问题,但即使它是,我有一种感觉,这个问题可能是一个很好的未来参考,因为我一直在尝试一个星期的有什么想法吗?
解决方案
如果你想附加一个文件,你可以看看AJAX文件上传
Mandrill API需要文件的base64编码字符串,因此如果您可以上传文件,则可以轻松地使服务器返回base64编码字符串供您在API中使用。.
有很多插件可以通过ajax上传文件,如果你使用的是像jQuery这样的JavaScript库,你可以看看 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));
我已经保持了这个简短的例子,但你应该检查文件类型等,而不仅仅是假设它是一个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...');
}
}
});
其他提示
我已经广泛地研究了这一点,似乎不可能将文件上传输入与Mandrill API一起用于附件。服务器需要用一个 file type="input"
因为浏览器已经实施了安全限制。
我已经能够通过使用 墨水文件选择器API 要在电子邮件的底部放置一个安全的下载链接到一个文件,但这看起来有点腥。这显然会更好地做到这一点本身,但是,正如我所说,这似乎是不可能的。
然而,这种妥协在某些方面 更好 比土生土长的方式:Ink API允许用户从各种服务上传,以及经典的文件上传,这提高了文件上传机制的可扩展性和易用性。
使用附件的链接仍然看起来很可疑,但我已经能够通过使用文件名(API允许您访问该文件名)来最大限度地减少该方法的垃圾邮件:
[文件名](超链接到直接下载链接)被附加到这个 电子邮件。