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

Posted

技术标签:

【中文标题】使用浏览按钮将文件附加到 Mandrill 消息【英文标题】:Attach Files to Mandrill Message with Browse Button 【发布时间】:2014-05-26 08:46:59 【问题描述】:

我不确定这是否可行,但我正在尝试通过文件上传按钮 (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
        
    ],

很抱歉,如果这是一个被其上下文掩盖的简单问题,但即使是这样,我也觉得这个问题可能是一个很好的未来参考,因为我已经尝试了一周并寻找某种类型的解决方案,但我一直找不到。有什么想法吗?

【问题讨论】:

【参考方案1】:

如果要附加文件,可以查看 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...');
        
    
);

【讨论】:

【参考方案2】:

我对此进行了广泛的研究,似乎无法将文件上传输入与 Mandrill API 一起用于附件。由于浏览器设置了安全限制,服务器必须使用 file type="input" 执行任何操作。

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

然而,这种折衷方案在某些方面比原生方式更好:Ink API 允许用户从各种服务上传,以及经典的文件上传,这提高了可扩展性以及文件上传机制的易用性。

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

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

【讨论】:

以上是关于使用浏览按钮将文件附加到 Mandrill 消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在解析云代码中将文本文件附加到山魈邮件?

将多个收件人电子邮件和姓名附加到 EmailMultiAlternatives

将 Mailchimp/Mandrill 与 Ruby 结合使用

将功能附加到 MFC 按钮的问题

Mandrill 通过 REST API 作为单独的消息发送给多个人

Mandrill 入站电子邮件路由