我正在尝试将一些附件添加到使用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',
)
我已经搜索并阅读了我能找到的每篇文章,但找不到任何具体的参考资料,说明我应该如何指定mandrill正确附加我的附件的路径。
非常感谢任何帮助。
答案 0 :(得分:27)
行。感谢Kaitlin的投入。 解决这个问题的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',
)
太容易了!再次感谢凯特琳!
答案 1 :(得分:25)
看起来您正在传递一个名为path
的参数,但Mandrill API不会将文件路径作为附件。如果您正在使用send或send-template调用,附件应该是一个具有三个键的关联数组(哈希):类型,名称和内容。
content参数应该是文件的内容作为Base64编码的字符串,因此您需要获取文件内容,Base64对它们进行编码,然后在名为{{1}的参数中传递它们而不是路径。而不是content
。
您可以在此处的Mandrill API文档中查看参数的完整详细信息,包括附件:https://mandrillapp.com/api/docs/messages.html#method=send