2013-08-05 2 views
1

Я запускаю приложение облака (используя CakePHP) на Rackspace, и я хочу отправлять электронные письма с использованием cakephp. Я использовал это: https://github.com/kochb/cakephp-mailgun но он возвращает мне ошибкуОтправить письмо через MailGun в CakePHP

"Could not send email. 

Error: An Internal Error Has Occurred." 

. Путь я пытаюсь отправить по электронной почте является следующим кодом:

$Email = new CakeEmail(); 


      $from = $this->request->data['Mail']['from']; 
      $to = ($this->request->data['Mail']['to']); 
      $subject = $this->request->data['Mail']['subject']; 
      $message = $this->request->data['Mail']['message']; 

       $Email->sender($from, 'TestName'); 
       $Email->from($from) 
        ->bcc($to) 
        ->replyTo($from) 
        ->subject($subject) 
        ->send($message); 



        $this->Session->setFlash('On the way to recipient'); 
        $this->redirect(array('action' => 'index')); 

Я отредактированный файл Config/email.php вставив в API учетных MailGun и т.д.

Что, возможно, происходит? Можете ли вы узнать, почему это происходит?

Заранее благодарен!

+1

Вы можете попробовать определения "из", "в", "субъект", и т.д. вручную? Я буквально скопировал ваш пример, но установил эти параметры, и сообщение отправлено без проблем. Вот [Gist] (https://gist.github.com/travelton/6160051). –

ответ

1

(у меня был тот же ошибки, которые были)

BasicTransport не имеют право «предварительной обработки», ни соответствующей обработки ответа.

Я скопировал функциональность от CurlTransport, и теперь она работает для меня.

В частности, нам необходимо:

$post = array(); 
    $post_preprocess = array_merge(
     $email->getHeaders(array('from', 'sender', 'replyTo', 'readReceipt', 'returnPath', 'to', 'cc', 'bcc', 'subject')), 
     array(
      'text' => $email->message(CakeEmail::MESSAGE_TEXT), 
      'html' => $email->message(CakeEmail::MESSAGE_HTML) 
     ) 
    ); 
    foreach ($post_preprocess as $k => $v) { 
     if (! empty($v)) { 
      $post[strtolower($k)] = $v; 
     } 
    } 

, а затем:

$response = $http->post($url, $post, $request); 
    if ($response === false) { 
     throw new SocketException("Mailgun BasicTransport error, no response", 500); 
    } 

    $http_status = $response->code; 
    if ($http_status != 200) { 
     throw new SocketException("Mailgun request failed. Status: $http_status, Response: {$response->body}", 500); 
    }