使用CakeEmail发送电子邮件

时间:2012-11-21 09:38:54

标签: cakephp-2.0

在我的CakePHP应用程序中,我有一个我自己创建的电子邮件表单,在单击电子邮件超链接时会打开。然后我如何从表单传递数据,以便可以使用CakeEmail发送?对不起,我已经尝试了很长时间并检查了http://book.cakephp.org/2.0/en/core-utility-libraries/email.html上的所有文档,仍然无法弄明白。

这是我的代码......

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 个答案:

答案 0 :(得分:2)

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

我不确定为什么你会在email_send.php中使用电子邮件代码而不是使用Controller方法。表单需要在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是否填充了相关数据。

答案 1 :(得分: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' => 'test@test.com' ,'to' => $post_array['Email']['email']))
     ->subject ($post_array['Email']['subject'])
     ->send();

 }

}

通常,您可以在

下定义名称为contact_form.ctp的电子邮件模板
/app/View/Emails/html/

并将数据传递给模板并根据您的要求格式化html。 谢谢!