2013-03-04 12 views
12

Próbuję dodać załączniki do wiadomości e-mail wysyłanej przy użyciu apletu Mandrill za pomocą opakowania php. Próbowałem wielu różnych rzeczy, aby spróbować dołączyć plik, ale bezskutecznie. Używam cakephp 2.x, ale nie sądzę, że ma jakieś szczególne znaczenie w tym przypadku (może to robi ?!). Używam opakowanie php utrzymywany przez mandrill na https://bitbucket.org/mailchimp/mandrill-api-phpŚcieżka pliku załączników wiadomości e-mail z Mandrill

Oto kod:

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

} 

To pokazuje, że załącznik został dodany do wiadomości e-mail i jest pdf ale rzeczywista pdf nie został przywiązany. Próbowałem też przez dodanie ścieżki bezpośrednio do pliku, jak w:

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

Mam google i przeczytać każdy artykuł można znaleźć, ale nie mogę znaleźć żadnego konkretnego odniesienia, w jaki sposób należy określić ścieżkę do mandrill poprawnie załóż mój załącznik.

Każda pomoc zostanie bardzo doceniona.

+0

dlaczego jest to oznaczone jako cakephp? rozsądnie byłoby przynajmniej połączyć to, czego używasz. nikt z nas nie ma kryształowej kuli;) – mark

+1

Używam cakephp 2.x jako mojego frameworku, ale nie sądziłem, że to było ważne. Pomyślałem, że może się przydać przyszłym ludziom, którzy próbują użyć mandrill, aby znaleźć to odniesienie. Zmienię mój post i wspomnę, że używam cakephp. Jeśli masz doświadczenie z używaniem mandrill z cakephp, doceniłbym dane wejściowe. – Manu

+0

Mam na myśli, jak możesz zadać pytanie o klasę (Mandrill), której nikt dotąd nie widział? to tak jak ja pytam, jak mogę naprawić moją metodę superAwesomeFooBar() mojej klasy AdvancedSomething, nie wspominając również o położeniu kodu źródłowego. Chcesz dać mu szansę? :) – mark

Odpowiedz

23

Wygląda na to, że podajesz parametr o nazwie path, ale interfejs API Mandrill nie przyjmuje ścieżki pliku dla załączników. Jeśli korzystasz z funkcji wysyłania lub wysyłania szablonu, załączniki powinny być asocjacyjną tablicą (hash) z trzema kluczami: typ, nazwa i treść.

Parametr treści powinien być zawartością pliku w postaci łańcucha zakodowanego w Base64, więc zamiast ścieżki należy pobrać zawartość pliku, zakodować je w Base64, a następnie przekazać je w parametrze o nazwie content zamiast path.

Można zobaczyć pełen opis parametrów, w tym załączników, w API docs Mandrill tutaj: https://mandrillapp.com/api/docs/messages.html#method=send

+2

Dzięki Kaitlin. Przepraszam za moją niewiedzę. Nie jestem zaznajomiony z używaniem Mandrill i nie mam wcześniej zakodowanych nic na podstawie base64 lub w tym przypadku załączonych plików do e-maili. Do tej pory jestem pod wrażeniem Mandrill i doceniam twoją szybką informację zwrotną! – Manu

+0

Tak, dziękuję za skok do stackoverflow z nami:) To jest bardzo pomocne. – Costa

23

OK. Więc dzięki Kaitlin za jej wkład. Sposób PHP radzić sobie z tym jest, aby plik, a następnie base64_encode go:

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

a następnie w załącznikach części tablicy Mandrill Ci przekazać:

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

tak proste! Jeszcze raz dziękuję Kaitlin!

+0

Witam @Manu, a co z dekodowaniem? Jak zapisać dekodowane base64? – CodeGuru

+0

Nie wiem, co próbujesz osiągnąć, ale ten wątek dotyczy sposobu dołączania i wysyłania plików za pomocą interfejsu API Mandrill. Po otrzymaniu pliku nie musisz nic robić w pliku. Można go pobrać jak każdy załącznik e-mail. – Manu

+0

Masz na myśli Mandrill dostarczy link do nas, aby go pobrać? – CodeGuru

Powiązane problemy