2013-03-04 3 views
12

PHP 랩퍼를 통해 맨드릴 API를 사용하여 보내는 전자 메일에 첨부 파일을 추가하려고합니다. 나는 성공적으로 파일을 첨부하려고 시도하지만 여러 가지를 시도했지만 아무 소용이 없습니다. cakephp 2.x를 사용하고 있지만이 인스턴스에서 어떤 특별한 의미가 있다고 생각하지 않습니다 (어쩌면 ?!).Mandrill 전자 메일 첨부 파일 경로

$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가 없었다 : I는 https://bitbucket.org/mailchimp/mandrill-api-php 여기

에 드릴에 의해 유지되는 PHP 래퍼를 사용하고 것은 코드 붙여진. 내가 검색 좀

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

내가 찾을 수있는 모든 문서를 읽을 수는 있지만 내가 올바르게에 드릴의 경로를 지정해야합니다 방법에 대한 특정 참조를 찾을 수 없습니다 : 또한 같이 파일에 직접 경로를 추가하여 시도 내 첨부 파일을 첨부하십시오.

도움이 될 것입니다.

+0

왜 태그가 붙은 cakephp입니까? 아마 적어도 당신이 사용하고있는 것을 연결하는 것이 현명 할 것입니다. 우리 중 누구도 수정 구슬을 가지고 있습니다;) – mark

+1

cakephp 2.x를 프레임 워크로 사용하고 있지만 중요하지 않다고 생각했습니다. 미래의 cakephp 사람들이 mandrill을 사용하여이 참조를 찾으려고 할 때 유용 할 거라고 생각했습니다. 내 게시물을 편집하고 cakephp를 사용하고 있다고 언급 할 것입니다. cakephp로 mandrill을 사용 해본 경험이 있다면 그 의견을 고맙게 생각합니다. – Manu

+0

아무도 지금까지 본 적이없는 수업 (Mandrill)에 대해 어떻게 질문 할 수 있습니까? 그것도 소스 코드의 위치를 ​​언급하지 않고도 내 AdvancedSomething 클래스의 내 superAwesomeFooBar() 메서드를 수정할 수있는 방법을 묻습니다. 당신은 한 번 시도하고 싶습니까? :) – mark

답변

23

path이라는 매개 변수를 전달하는 것처럼 보이지만 Mandrill API는 첨부 파일의 경로를 사용하지 않습니다. send 또는 send-template 호출을 사용하는 경우 첨부 파일은 유형, 이름 및 내용의 세 가지 키가있는 연관 배열 (해시)이어야합니다.

콘텐츠 매개 변수는 파일 내용을 Base64로 인코딩 된 문자열로 사용해야하므로 path 대신 파일 내용을 가져 와서 Base64로 인코딩 한 다음 content 대신 매개 변수로 전달해야합니다. path.

당신은 여기에 드릴의 API 문서에 첨부 파일을 포함하는 매개 변수의 자세한 내용을 볼 수 https://mandrillapp.com/api/docs/messages.html#method=send

+2

Thanks Kaitlin. 나의 무지를 유감스럽게 생각합니다. 나는 Mandrill을 사용하는 것에 익숙하지 않고, base64 인코딩을하지 않았으며, 그 전에 이메일에 첨부 된 파일에 대해서도 언급하지 않았다. 지금까지 나는 Mandrill에 깊은 인상을 받았으며 빠른 피드백에 감사드립니다! – Manu

+0

그래, 우리와 함께 stackoverflow로 점프 주셔서 감사합니다 :) 이것은 매우 도움이됩니다. – Costa

23

확인을 클릭합니다. 그래서 그녀의 의견에 Kaitlin에게 감사드립니다. 이 처리하는 PHP의 방법은 파일을 얻을 수 있습니다 및 다음을 base64_encode :

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

그래서 쉽게 :

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

하고 다음 드릴 배열의 첨부 부분에 당신이 통과! Kaitlin에게 다시 한 번 감사드립니다!

+0

안녕하세요 @Manu, 어떻게 해독 해? 디코딩 된 base64는 어떻게 저장합니까? – CodeGuru

+0

나는 당신이 성취하고자하는 것을 모르지만,이 스레드는 mandrill api를 사용하여 파일을 첨부하고 보내는 방법에 관한 것입니다. 파일을 받으면 파일에 대해 아무 것도 할 필요가 없습니다. 이메일 첨부 파일처럼 다운로드 할 수 있습니다. – Manu

+0

당신은 Mandrill이 그것을 다운로드 할 수있는 링크를 제공 할 것입니다. – CodeGuru