Динамические вложения электронной почты в cakephp - PullRequest
1 голос
/ 27 марта 2011

Можно ли отправить электронное письмо с динамически сгенерированным вложением?

Я пробовал это так:

$this->Email->attachments = array(
    'reservation.ics' => array(
        'controller' => 'reservations', 
        'action' => 'ical',
        'ext' => 'ics',
        $this->data['Reservation']['id']
    )
);

Но это не сработало.

Ответы [ 2 ]

3 голосов
/ 28 марта 2011

attachments принимает только пути к локальным файлам на сервере, а не URL-адреса.Вам необходимо отобразить вложение во временный файл, а затем прикрепить его.

В вашем контроллере это может выглядеть примерно так:

$this->autoRender = false;
$content = $this->render();

file_put_contents(
    TMP . 'reservation' . $id . '.ics',
    $content
);

$this->Email->attachments = array(
    'reservation.ics' => TMP . 'reservation' . $id . '.ics'
);
1 голос
/ 25 июля 2012

Есть еще один способ отправки вложения. сначала сохраните этот файл на сервере, а затем используйте путь к серверу для отправки. В приведенном ниже примере я пропускаю код для сохранения файла вложения. Код только для прикрепления.

Class EmailController extends AppController { 


var $name="Email"; 
 var $components = array ('Email');
 var $uses = NULL;
 function beforeFilter() {
        parent::beforeFilter(); 
 $this->Auth->allow(array(*));
 } 
 function EmailSend(){
 $Path = WWW_ROOT."img";
 $fileName = 'test.jpg';
 $this->Email->from    = 'Amit Jha<amit@mail.com>';
       $this->Email->to      = 'Test<test@test.com>';
       $this->Email->subject = 'Test Email Send With Attacment';
       $this->Email->attachments = array($Path.$fileName);
      $this->Email->template = 'simple_message';
       $this->Email->sendAs = 'html';
       if($this->Email->send()){
 $this->session->setFlash("Email Send Successfully");
 $this->redirect('somecontroller/someaction');
 }


 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...