2012-11-21 29 views
0

在我的CakePHP应用程序中,我有一封电子邮件表单,当我点击一个电子邮件超链接时,我会自己打开。那么如何从表单传递数据以便可以使用CakeEmail发送数据?对不起,我已经尝试了这么多年,并通过http://book.cakephp.org/2.0/en/core-utility-libraries/email.html所有文档检查,仍然无法弄清楚。用CakeEmail发送电子邮件

这里是我的代码...

email.ctp

<?php $this->Html->addCrumb('New Email', '#'); ?> 

<div id="email_page" class="span12"> 
    <div class="row"> 

    <?php 
     echo $this->Form->create('Email', array('controller'=>'person', 'action'=>'email_send')); 
     echo $this->Form->input('email', array('class'=>'email_form','label'=>'To: ','value'=>$email['Person']['primEmail'])); 
     echo $this->Form->input('subject', array('class'=>'email_form','label'=>'Subject: ')); 
     echo $this->Form->input('message', array('class'=>'email_form email_body', 'type'=>'textarea','label'=>'Message: ')); 
     echo $this->Form->end('Send', array('class'=>'pull-right')); 
    ?> 

    </div> 
</div> 

email_send.php

<?php 
    $email = new CakeEmail('default'); 
    $email->to('email'); 
    $email->subject('subject'); 
    $email->send('message'); 
?> 

任何帮助表示赞赏!

回答

2

表格数据将在控制器中可用的$this->request->data(可写)或$this->data(可读)。由于您的表格被称为电子邮件,表格提交后所有数据将在$this->request->data['Email']下提供。

我不确定为什么你的电子邮件代码是email_send.php而不是使用控制器方法。该表单预期在PersonsController中存在email_send方法,因为表单操作设置为/persons/email_send。所以我会将email_send()中的电子邮件代码放入PersonsController.php

所以:

<?php 
    public function email_send() { 
     $email = new CakeEmail('default'); 
     $email->to($this->request->data['Email']['email']); 
     $email->subject($this->request->data['Email']['subject']); 
     $email->send($this->request->data['Email']['message']); 
    } 
?> 

当然,当这一切工作,你应该建立正确的validation并检查是否$this->request->data填充了相关数据。

2

更好的优化代码将是

public function email() 
{ 
    //add this 
    if ($this->request->is('post')) { 
    $post_array = $this->request->data; 

    $email = new CakeEmail(); 
    $email->viewVars(array('message' => $post_array['Email']['message'])) 
    ->template('contactForm') 
    ->emailFormat('html') 
    ->config(array('from' => '[email protected]' ,'to' => $post_array['Email']['email'])) 
    ->subject ($post_array['Email']['subject']) 
    ->send(); 

} 

} 

这是一般你可以在

/app/View/Emails/html/ 

定义与contact_form.ctp的名字电子邮件模板并将数据传递到templete和格式根据您的要求的HTML。 谢谢!