2013-03-04 17 views
12

Bir php sarıcı aracılığıyla mandrill api kullanarak gönderilen bir e-postaya bazı ekler eklemeye çalışıyorum. Dosyayı başarılı bir şekilde eklemeyi denemek için bir çok farklı şey denedim ama boşuna. Ben cakephp 2.x kullanıyorum ama bu durumda herhangi bir özel önemi olduğunu sanmıyorum (belki yapar ?!).Mandrill e-posta ekleri dosya yolu

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

} 

Bu bir ek e-posta eklendiğini gösterir ve pdf ama gerçek pdf olmamıştır: Ben https://bitbucket.org/mailchimp/mandrill-api-php İşte

de mandrill tarafından tutulan php sarmalayıcı kullanıyorum kodudur ekli. Ben googled var

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

ve bulabilirim her yazı okudum ama doğru için mandrill yolunu belirtmelidir dair herhangi spesifik bir başvuru bulamıyor: Ben de olduğu gibi dosyanın üzerine doğrudan yolunu ekleyerek çalıştı ekimi ekle.

Herhangi bir yardım büyük takdir edilecektir.

+0

bu neden cakephp olarak etiketlendi? En azından kullandığınız şeyi bağlamak akıllıca olacaktır. Kimsenin bir kristal topu yoktur;) – mark

+1

Çerçevem ​​olarak cakephp 2.x kullanıyorum ama bunun önemli olduğunu düşünmedim. Bu referansı bulmak için mandrill kullanmaya çalışan gelecekteki cakephp insanlar için yararlı olabileceğini düşündüm. Mesajımı düzenleyip cakephp kullanıyorum. Eğer cakephp ile mandrill kullanma tecrübeniz varsa girişi takdir ediyorum. – Manu

+0

Kimsenin şimdiye kadar hiç görmediği bir sınıf (Mandrill) hakkında nasıl bir soru sorabilirsin? onun benim kaynak kodunun yerini de belirtmeden benim AdvancedSomething sınıfımın superAwesomeFooBar() yöntemimi nasıl düzeltebileceğimi sormam gibi .. Bir çekim vermek ister misin? :) – mark

cevap

23

path adlı bir parametreyi iletiyorsunuz gibi görünüyor, ancak Mandrill API ekleri için bir dosya yolunu almıyor. Gönderme veya gönderme şablonu çağrısı kullanıyorsanız, ekler üç anahtarla ilişkilendirilmiş bir dizi (karma) olmalıdır: tür, ad ve içerik.

İçerik parametresi, dosyanın içeriği, Base64 kodlu bir dize olarak olmalıdır, bu nedenle yol yerine, dosya içeriğini almak istediğinizde Base64 kodlayın ve sonra bunları content olarak adlandırılan bir parametreye iletin. path.

Burada Mandrill API docs, ekleri için de dahil olmak üzere, parametrelerin tüm detayları görebilirsiniz: https://mandrillapp.com/api/docs/messages.html#method=send

+2

Teşekkürler Kaitlin. Cehaletim için üzgünüm. Mandrill'i kullanmaya alışkın değilim ve bir şeyleri kodlanmış base64 veya daha önce e-postalara eklemiş olduğunuz dosyalar için kullanmıyorum. Şimdiye kadar Mandrill'den çok etkilendim ve hızlı geri dönüşünüzü takdir ediyorum! – Manu

+0

Evet, bizimle stackoverflow'a atladığınız için teşekkürler:) Bu süper yararlıdır. – Costa

23

Tamam. Bu yüzden onun girişi için Kaitlin'e teşekkürler. bu başa PHP yolu dosyasını elde etmektir ve sonra base64_encode:

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

Çok kolay:

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

ve sonra mandrill dizinin ekleri kısmen geçmek! Teşekkürler tekrar Kaitlin!

+0

Merhaba @Manu, kod çözmeyi ne dersiniz? Kodu çözülmüş base64'ü nasıl kaydederim? – CodeGuru

+0

Neyi başarmaya çalıştığınızı bilmiyorum, ancak bu konu mandrill api kullanarak dosya ekleme ve gönderme hakkındadır. Dosyayı aldığınızda, dosyaya bir şey yapmanıza gerek yoktur. Herhangi bir e-posta eki gibi indirilebilir. – Manu

+0

Yani, Mandrill'i indirmemiz için bize bir link vereceğiz? – CodeGuru