2013-03-04 17 views
12

Sto cercando di aggiungere alcuni allegati a un messaggio di posta elettronica che viene inviato utilizzando il mandrill api tramite un wrapper php. Ho provato un certo numero di cose diverse per provare a collegare correttamente il file ma senza successo. Sto usando cakephp 2.x ma non penso che abbia un significato particolare in questa istanza (forse lo fa ?!). Sto usando l'involucro php mantenuto da mandrillo a https://bitbucket.org/mailchimp/mandrill-api-phpPercorso file allegati e-mail mandrill

Ecco il codice:

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

} 

Questo dimostra che un allegato è stato aggiunto l'e-mail ed è un pdf, ma il pdf reale non è stata allegato. Ho provato anche con l'aggiunta del percorso direttamente sul file come in:

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

Googled e leggere ogni articolo che posso trovare, ma non riesco a trovare alcun riferimento specifico su come avrei dovuto specificare il percorso per il mandrillo correttamente allega il mio allegato.

Qualsiasi aiuto sarà molto apprezzato.

+0

perché questo taggato è quindi taggato? probabilmente sarebbe saggio collegare almeno quello che stai usando. nessuno di noi ha una sfera di cristallo;) – mark

+1

Sto usando cakephp 2.x come framework ma non pensavo che fosse importante. Ho pensato che potrebbe essere utile per le future persone di CakePHP che tentano di usare il mandrillo per trovare questo riferimento. Modificherò il mio post e dirò che sto usando cakephp. Se hai esperienza nell'uso del mandrillo con cakephp, apprezzerei l'input. – Manu

+0

Voglio dire come puoi fare una domanda su una classe (Mandrill) che nessuno ha mai visto finora? è come me che chiedo come posso sistemare il mio metodo superAwesomeFooBar() della mia classe AdvancedSomething senza menzionare anche la posizione del codice sorgente. Volete dargli una possibilità? :) – mark

risposta

23

Sembra che tu stia passando un parametro chiamato path, ma l'API Mandrill non accetta il percorso di un file per gli allegati. Se si utilizza la chiamata di invio o modello di invio, gli allegati devono essere un array associativo (hash) con tre chiavi: tipo, nome e contenuto.

Il parametro del contenuto deve essere il contenuto del file come una stringa codificata Base64, quindi anziché il percorso, si vorrà ottenere il contenuto del file, Base64 li codificherà e poi passarli in un parametro chiamato content invece di path.

si possono vedere tutti i dettagli dei parametri, tra cui per gli allegati, nella documentazione API mandrillo qui: https://mandrillapp.com/api/docs/messages.html#method=send

+2

Grazie Kaitlin. Mi dispiace per la mia ignoranza. Non ho familiarità con l'utilizzo di Mandrill e non ho codificato Base64 o qualsiasi altro file allegato alle e-mail prima. Finora sono rimasto molto impressionato da Mandrill e ho apprezzato il tuo rapido feedback! – Manu

+0

Sì, grazie per il salto nello stackoverflow con noi:) Questo è super utile. – Costa

23

OK. Quindi grazie a Kaitlin per il suo contributo. Il modo PHP per affrontare questo è quello di ottenere il file e quindi base64_encode esso:

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

e poi nella parte allegati della matrice mandrillo si passa il:

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

Così facile! Grazie ancora Kaitlin!

+0

Ciao @Manu, che ne dici di decodificarlo? Come posso salvare la base64 decodificata? – CodeGuru

+0

Non so cosa si sta cercando di ottenere, ma questo thread riguarda come allegare e inviare file usando l'API di mandrill. Quando si riceve il file non è necessario fare nulla per il file. È disponibile per il download come qualsiasi allegato di posta elettronica. – Manu

+0

Vuoi dire che Mandrill ci fornirà un link per scaricarlo? – CodeGuru

Problemi correlati