0

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

这是我的代码...

电子邮件.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');
?>

任何帮助表示赞赏!

4

2 回答 2

2

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

我不确定您为什么要使用电子邮件代码email_send.php而不是使用控制器方法。表单需要email_sendPersonsController 中存在的方法,因为表单操作设置为/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']);
    }
?>

当然,当所有这些工作正常时,您应该设置适当的验证并检查是否$this->request->data填充了相关数据。

于 2012-11-21T10:14:02.143 回答
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。谢谢!

于 2012-11-21T12:13:59.797 回答