Больше проблем с компонентом электронной почты CakePHP - PullRequest
0 голосов
/ 07 января 2010

Я недавно опубликовал вопрос о компоненте электронной почты CakePHP и с помощью некоторых ответов и комментариев смог решить мою проблему ...

Дело в том, что решение моей проблемы с электронной почтой выявило еще одну проблему!

Итак, вот моя проблема:

У меня есть контракт, с которым связан клиент. Когда я создаю контракт, я выбираю клиента. Я хочу отправить клиенту электронное письмо со ссылкой на договор при сохранении договора в базе данных. Однако, когда я сохраняю договор, письмо не отправляется! Я знаю, что электронная почта работает. Если я на самом деле жестко закодировал все переменные, все работает. Но когда я пытаюсь динамически получить информацию о клиенте из базы данных, она не работает.

Я видел решение, которое включало getByLastId (), но я не думаю, что это будет работать в этом случае, потому что мне не нужен последний добавленный пользователь ... Мне нужен пользователь, который подключен к этот контракт.

Надеюсь, я объясню это хорошо.

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

Вот код в моем contract_controller.php для моей функции отправки электронной почты:

    function _sendContractEmail($id) {
     $this->Email->smtpOptions = array(
  'port'=>'587',
  'timeout'=>'30',
  'host'=>'smtp.email.com',
  'username'=>'username',
  'password'=>'password'
     );
     $User = $this->Contract->User->read(null,$id);
     $this->Email->delivery = 'smtp';
     $this->Email->to = $User['User']['email'];
     $this->Email->subject = 'New Contract from Company';
     $this->Email->replyTo = 'noreply@example.com';
     $this->Email->from = 'noreply@example.com';
     $this->Email->template = 'default';
     $this->Email->sendAs = 'html';
     $this->set('User', $User);
     $this->Email->send('Test');
     $this->set('smtp-errors', $this->Email->smtpError);
 }

А вот код в моем contract_controller.php для функции add ():

    function add() {
  if (!empty($this->data)) {
   $this->Contract->create();
   if ($this->Contract->save($this->data)) {
    $this->Session->setFlash(__('The Contract has been saved', true));
    $this->_sendContractEmail($this->Contract->User->id);
   } else {
    $this->Session->setFlash(__('The Contract could not be saved. Please, try again.', true));
   }
  }

Любая помощь будет принята с благодарностью!

Спасибо

Иеремия

Ответы [ 2 ]

0 голосов
/ 08 января 2010

Я собирался опубликовать это как комментарий, потому что я не уверен, будет ли это работать, но у меня пока недостаточно репутации, чтобы комментировать: p

Вы пробовали это?

var $uses = array('User');
$user = $this->User->read(null,$id);

или

$user = $this->User->findById($id)
0 голосов
/ 08 января 2010

Используйте findBy<fieldName>(string $value) ($ this-> Contact-> User-> findById ($ id))

http://book.cakephp.org/view/451/findBy

Этот метод может возвращать несколько значений, поэтому используйте pr ($ User), чтобы увидеть формат массива. Вы сможете найти информацию о пользователе в $ User [0] ['User'] ['email'].

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