15

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

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

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

4

2 に答える 2

31

わかった。それで、彼女の入力に対してケイトリンに感謝します。これに対処する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',
        )

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

于 2013-03-06T11:16:49.563 に答える
28

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

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

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

于 2013-03-05T14:47:59.090 に答える