2013-03-04 11 views
12

Ich versuche, einige Anhänge zu einer E-Mail hinzuzufügen, die mit dem Mandrill API über einen PHP-Wrapper gesendet wird. Ich habe versucht, eine Reihe von verschiedenen Dingen zu versuchen, die Datei erfolgreich anzuhängen, aber ohne Erfolg. Ich benutze Cakephp 2.x, aber ich denke nicht, dass das in diesem Fall eine besondere Bedeutung hat (vielleicht tut es ?!). Ich bin mit dem PHP-Wrapper von Mandrill gehalten bei https://bitbucket.org/mailchimp/mandrill-api-phpMandrill E-Mail-Anhänge Dateipfad

Hier ist der Code:

$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); 

} 

Dies zeigt, dass eine Bindung an die E-Mail hinzugefügt wurde und ist ein pdf, aber die tatsächliche pdf war nicht angebracht. Ich habe auch versucht, indem Sie den Pfad direkt auf die Datei hinzufügen, wie in:

"attachments" => array(
      array(
       'type' => "application/pdf", 
       'name' => WWW_ROOT.'files/downloads/renewals/document.pdf', 
      ) 

Ich habe gegoogelt und jeden Artikel lesen die ich finden kann, kann aber keine spezifische Referenz finden, wie ich den Pfad für Mandrill angeben sollte richtig befestige meinen Anhang.

Jede Hilfe wird sehr geschätzt.

+0

Warum ist dieses CakePHP dann markiert? es wäre wahrscheinlich klug, zumindest zu verknüpfen, was Sie verwenden. niemand von uns hat eine Kristallkugel;) – mark

+1

Ich benutze CakePHP 2.x als mein Framework, aber ich fand das nicht wichtig. Ich dachte, dass es für zukünftige cakephep Leute nützlich sein könnte, Mandrill zu verwenden, um diese Referenz zu finden. Ich werde meinen Beitrag bearbeiten und erwähnen, dass ich CakePhp benutze. Wenn Sie Erfahrung mit Mandrill mit CakePHP haben, würde ich den Input schätzen. – Manu

+0

Ich meine, wie können Sie eine Frage zu einer Klasse (Mandrill) stellen, die noch nie jemand gesehen hat? Ich frage mich, wie ich meine superAwesomeFooBar() -Methode meiner AdvancedSomething-Klasse reparieren kann, ohne auch den Quellcode anzugeben. Sie wollen es ausprobieren? :) – mark

Antwort

23

Es sieht so aus, als ob Sie einen Parameter mit dem Namen path übergeben, aber die Mandrill-API übernimmt nicht den Pfad einer Datei für Anlagen. Wenn Sie den Sende- oder Sendevorlagen-Aufruf verwenden, sollten Anhänge ein assoziatives Array (Hash) mit drei Schlüsseln sein: Typ, Name und Inhalt. Der Inhaltsparameter sollte der Inhalt der Datei als Base64-codierte Zeichenfolge sein. Daher sollten Sie anstelle des Pfads den Dateiinhalt abrufen, Base64 codieren und dann in einem Parameter mit dem Namen content übergeben path.

Sie können alle Details der Parameter sehen, einschließlich für Anlagen, in der Mandrill API-Dokumentation hier: https://mandrillapp.com/api/docs/messages.html#method=send

+2

Danke Kaitlin. Entschuldigung für meine Ignoranz. Ich bin nicht vertraut mit der Verwendung von Mandrill und ich habe keine Base64-kodierten irgendetwas oder für die Sache angefügten Dateien an E-Mails vor. Bis jetzt bin ich sehr beeindruckt von Mandrill und freue mich über Ihr schnelles Feedback! – Manu

+0

Ja, danke, dass du mit uns in stackoverflow gesprungen bist:) Das ist super hilfreich. – Costa

23

OK. Also danke an Kaitlin für ihren Beitrag. Der PHP-Weg, damit umzugehen ist, um die Datei zu erhalten und base64_encode es dann:

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

und dann in den Anhängen Teil des Mandrill Array übergeben Sie das:

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

So einfach! Danke nochmal Kaitlin!

+0

Hi @Manu, was ist mit der Dekodierung? Wie speichere ich das decodierte base64? – CodeGuru

+0

Ich weiß nicht, was Sie erreichen wollen, aber dieser Thread behandelt das Anhängen und Senden von Dateien mit dem Mandrill API. Wenn Sie die Datei erhalten, müssen Sie nichts an der Datei vornehmen. Es kann wie jeder E-Mail-Anhang heruntergeladen werden. – Manu

+0

Sie meinen Mandrill wird einen Link für uns bereitstellen, um es herunterzuladen? – CodeGuru