Я пытаюсь добавить некоторые вложения в электронное письмо, которое отправляется с помощью apr mandrill api через php-обертку. Я попробовал несколько разных вещей, чтобы попытаться успешно прикрепить файл, но безрезультатно. Я использую cakephp 2.x, но я не думаю, что это имеет какое-то особое значение в этом случае (возможно, это делает ?!). Я использую php-обертку, поддерживаемую mandrill, по адресу https://bitbucket.org/mailchimp/mandrill-api-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', )
Я googled и прочитал каждую статью, которую я могу найти, но не могу найти никакой конкретной ссылки относительно того, как я должен указать путь для mandrill, чтобы правильно прикрепить мое приложение.
Любая помощь будет оценена.
Похоже, вы передаете параметр с именем path
, но API Mandrill не принимает путь к файлу для вложений. Если вы используете вызов send или send-template, вложения должны быть ассоциативным массивом (хэш) с тремя ключами: типом, именем и контентом.
Параметр content должен быть содержимым файла в виде кодированной в Base64 строки, поэтому вместо пути вы хотите получить содержимое файла, Base64 закодировать их, а затем передать их в параметре content
а не в качестве path
.
Подробные сведения о параметрах, в том числе для вложений, вы можете увидеть в документах API Mandrill здесь: https://mandrillapp.com/api/docs/messages.html#method=send
ОК. Так спасибо Кейтлин за ее вклад. 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', )
Так легко! Еще раз спасибо Кейтлин!