web-dev-qa-db-ja.com

マンドリルの電子メールの添付ファイルのファイルパス

マンドリルAPIを使用してPHPラッパーを介して送信される電子メールにいくつかの添付ファイルを追加しようとしています。ファイルを正常に添付するためにさまざまなことを試みましたが、役に立ちませんでした。私はcakephp2.xを使用していますが、このインスタンスでは特に重要ではないと思います(多分そうですか?!)。私はmandrillによって維持されているphpラッパーを使用しています 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',
            )

私はグーグルで見つけたすべての記事を読みましたが、添付ファイルを正しく添付するためにマンドリルのパスを指定する方法に関する特定の参照を見つけることができません。

どんな助けでも大歓迎です。

15
Manu

pathというパラメーターを渡しているように見えますが、MandrillAPIは添付ファイルのファイルのパスを取得しません。 sendまたはsend-template呼び出しを使用している場合、添付ファイルは、タイプ、名前、およびコンテンツの3つのキーを持つ連想配列(ハッシュ)である必要があります。

Contentパラメータは、Base64でエンコードされた文字列としてのファイルの内容である必要があるため、パスの代わりに、ファイルの内容を取得し、Base64でエンコードしてから、代わりにcontentというパラメータで渡します。 pathの。

添付ファイルを含むパラメーターの詳細については、Mandrill APIのドキュメントをご覧ください: https://mandrillapp.com/api/docs/messages.html#method=send

25
Kaitlin

OK。それで、彼女の入力に対してKaitlinに感謝します。 PHPこれに対処する方法は、ファイルを取得してからbase64_encodeすることです。

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

次に、マンドリル配列の添付ファイル部分で、:を渡します。

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

とても簡単!ケイトリン、ありがとう!

27
Manu