Подтвердить что ты не робот

Путь к файлам электронной почты Mandrill

Я пытаюсь добавить некоторые вложения в электронное письмо, которое отправляется с использованием 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="#" onclick="location.href='http://my-site.com/members/renewal'; return false;">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, чтобы правильно прикрепить мое приложение.

Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

Похоже, вы передаете параметр с именем path, но API Mandrill не принимает путь к файлу для вложений. Если вы используете вызов send или send-template, вложения должны быть ассоциативным массивом (хэшем) с тремя ключами: type, name и content.

Параметр содержимого должен быть содержимым файла в виде кодированной в Base64 строки, поэтому вместо пути вы хотите получить содержимое файла, Base64 закодировать их, а затем передать их в параметре content вместо path.

Подробные сведения о параметрах, в том числе для вложений, вы можете увидеть в документах API Mandrill здесь: https://mandrillapp.com/api/docs/messages.html#method=send

Ответ 2

OK. Так спасибо Кейтлин за ее вклад. 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',
        )

Так просто! Еще раз спасибо Кейтлин!