15

我正在尝试向使用 mandrill api 通过 php 包装器发送的电子邮件添加一些附件。我尝试了许多不同的方法来尝试成功附加文件,但无济于事。我正在使用 cakephp 2.x,但我认为这在这种情况下没有任何特殊意义(也许它确实如此?!)。我正在使用 mandrill 在https://bitbucket.org/mailchimp/mandrill-api-php维护的 php 包装器

这是代码:

$mandrill = new Mandrill(Configure::read('Site.mandrill_key'));
    $params = array(
        'html' => '
            <p>Hi '.$user['User']['name'].',</p>
            <p>tIt is that time of the year again.<br />
            <a href="http://my-site.com/members/renewal">Please login to the website members area and upload your renewal requirements</a>.</p>
            <p>Kind regards.</p>',
        "text" => null,
        "from_email" => Configure::read('Site.email'),
        "from_name" => Configure::read('Site.title'),
        "subject" => "Renewal Pending",
        "to" => array(array('email' => $user['User']['email'])),
        "track_opens" => true,
        "track_clicks" => true,
        "auto_text" => true,
        "attachments" => array(
            array(
                'path' => WWW_ROOT.'files/downloads/renewals',
                'type' => "application/pdf",
                'name' => 'document.pdf',
            )
        )
    );

    $mandrill->messages->send($params, true);

}

这表明附件已添加到电子邮件中,并且是 pdf,但尚未附加实际的 pdf。我还尝试将路径直接添加到文件中,如下所示:

"attachments" => array(
            array(
                'type' => "application/pdf",
                'name' => WWW_ROOT.'files/downloads/renewals/document.pdf',
            )

我已经用谷歌搜索并阅读了我能找到的每一篇文章,但找不到任何关于我应该如何指定山魈正确附加附件的路径的具体参考资料。

任何帮助将不胜感激。

4

2 回答 2

31

好的。感谢凯特琳的意见。处理此问题的 PHP 方法是获取文件,然后对其进行 base64_encode:

$attachment = file_get_contents(WWW_ROOT.'files/downloads/file.pdf');
$attachment_encoded = base64_encode($attachment); 

然后在 mandrill 数组的附件部分中传递:

"attachments" => array(
        array(
            'content' => $attachment_encoded,
            'type' => "application/pdf",
            'name' => 'file.pdf',
        )

太简单!再次感谢凯特琳!

于 2013-03-06T11:16:49.563 回答
28

看起来您正在传递一个名为 的参数path,但 Mandrill API 不采用附件文件的路径。如果您使用 send 或 send-template 调用,附件应该是具有三个键的关联数组(散列):类型、名称和内容。

content 参数应该是作为 Base64 编码字符串的文件内容,因此您需要获取文件内容,而不是路径,对它们进行 Base64 编码,然后将它们传递给名为content而不是path.

您可以在此处的 Mandrill API 文档中查看参数的完整详细信息,包括附件:https ://mandrillapp.com/api/docs/messages.html#method=send

于 2013-03-05T14:47:59.090 回答