【问题标题】:Mandrill email attachments file pathMandrill 电子邮件附件文件路径
【发布时间】:2013-02-19 05:24:38
【问题描述】:

我正在尝试向使用 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',
            )

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

任何帮助将不胜感激。

【问题讨论】:

  • 为什么这个标签是 cakephp 呢?至少链接你正在使用的东西可能是明智的。我们谁都没有水晶球;)
  • 我使用 cakephp 2.x 作为我的框架,但我认为这并不重要。我认为它可能对未来尝试使用 mandrill 查找此参考的 cakephp 人有用。我将编辑我的帖子并提到我正在使用 cakephp。如果您有使用 mandrill 和 cakephp 的经验,我将不胜感激。
  • 我的意思是你怎么能问一个关于到目前为止没人见过的类(山魈)的问题?就像我问我如何修复我的 AdvancedSomething 类的 superAwesomeFooBar() 方法而不提及源代码的位置。你想试一试吗? :)
  • 哦,好吧,我认为包装类非常通用。我其实是希望能从山魈的人那里得到答案。我用 php 包装器的链接再次编辑了问题:bitbucket.org/mailchimp/mandrill-api-php

标签: php email cakephp email-attachments mandrill


【解决方案1】:

好的。感谢凯特琳的意见。 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',
        )

这么简单!再次感谢凯特琳!

【讨论】:

  • 嗨@Manu,解码呢?如何保存解码后的 base64?
  • 我不知道你想要达到什么目的,但这个线程是关于如何使用 mandrill api 附加和发送文件的。当您收到文件时,您无需对文件执行任何操作。它可以像任何电子邮件附件一样下载。
  • 你的意思是 Mandrill 会提供一个链接供我们下载?
  • 没有。您可以像任何附件一样在电子邮件中获得附件。 Mandrill 提供的是运输设施而不是存储设施。
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢凯特琳。对不起我的无知。我不熟悉使用 Mandrill,而且我之前没有对任何内容进行 base64 编码,也没有将文件附加到电子邮件中。到目前为止,我对 Mandrill 印象深刻,感谢您的快速反馈!
  • 是的,感谢您与我们一起进入 stackoverflow :) 这非常有帮助。
猜你喜欢
  • 2020-11-07
  • 2013-08-14
  • 1970-01-01
  • 2012-01-15
  • 2017-07-15
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 2015-07-11
相关资源
最近更新 更多