2011-03-27 42 views
1

是否可以使用動態生成的附件發送電子郵件?cakephp中的動態電子郵件附件

我試着這樣說:

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

但沒有奏效。

回答

3

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' 
); 
+0

Thx,它的工作原理!我只需要設置()一些變量,因爲render()不接受參數,但我也在我的電子郵件中使用這些變量,所以沒關係。 – Telokar 2011-03-28 10:52:35

+1

如果您不想創建「硬盤上的文件」,您還可以查看[EmailLib](http://www.dereuromark.de/2012/03/30/introducing-the-emaillib/)(擴展CakeEmail)和'$ this-> Email-> addBlobAttachment()'方法。 – mark 2014-10-27 14:41:57

1

有發送附件的另一種方法。首先將該文件存儲在服務器上,然後使用服務器路徑發送。在下面的例子中,我跳過了存儲附件文件的代碼。只有附件的代碼。

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<[email protected]>'; 
     $this->Email->to  = 'Test<[email protected]>'; 
     $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'); 
} 


}