2015-01-26 5 views
4

Я пытаюсь отправить по электронной почте с mailguns PHP API:Отправка электронной почты с помощью mailgun PHP API

define('MAILGUN_KEY', 'key-ExamPle3xAMPle'); 
define('MAILGUN_DOMAIN', 'example.com'); 

$mailgun = new Mailgun\Mailgun(MAILGUN_KEY); 

$mailgun->sendMessage(MAILGUN_DOMAIN, [ 
       'from'  => '[email protected]', 
       'to'  => $email, 
       'subject' => 'Sign Stop mailing list confirmation.', 
       'html'  => " 
        Hello{$name},</br></br> 
        This is a test." 
      ]); 

Я даже пытался использовать массив() вместо [].

Я получаю следующее сообщение об ошибке в моем PHP журнале ошибок:

MissingRequiredParameters

Это означает, что я передаю функцию поста является неполным или неверным. после проверки функции post в RestClient я вижу, что для функции требуется 2 массива, а не 1, поэтому я попытался добавить второй массив с вложениями сообщений, и он просто получил больше ошибок, на этот раз с guzzle (зависимость для mailgun)

[26-Jan-2015 14:32:50 UTC] PHP Fatal error: Uncaught exception 'Mailgun\Connection\Exceptions\MissingRequiredParameters' with message 'The parameters passed to the API were invalid. Check your inputs!' in C:\Users\Zachary\Documents\NetBeansProjects\SS_MailingList\vendor\mailgun\mailgun-php\src\Mailgun\Connection\RestClient.php:187 
    Stack trace: 
    #0 C:\Users\Zachary\Documents\NetBeansProjects\SS_MailingList\vendor\mailgun\mailgun-php\src\Mailgun\Connection\RestClient.php(116): Mailgun\Connection\RestClient->responseHandler(Object(Guzzle\Http\Message\Response)) 
    #1 C:\Users\Zachary\Documents\NetBeansProjects\SS_MailingList\vendor\mailgun\mailgun-php\src\Mailgun\Mailgun.php(106): Mailgun\Connection\RestClient->post('signstoptt.com/...', Array, Array) 
    #2 C:\Users\Zachary\Documents\NetBeansProjects\SS_MailingList\vendor\mailgun\mailgun-php\src\Mailgun\Mailgun.php(53): Mailgun\Mailgun->post('signstoptt.com/...', Array, Array) 
    #3 C:\Users\Zachary\Documents\NetBeansProjects\SS_MailingList\subscribe.php(26): Mailgun\Mailgun->sendMessage('signstoptt.com', Array) 
    #4 in C:\Users\Zachary\Documents\NetBeansProjects\SS_MailingList\vendor\mailgun\mailgun-php\src\Mailgun\Connection\RestClient.php on line 187 

У кого-нибудь еще была эта проблема. Я запускаю сайт на настройке сервера Glassfish netbeans. Я также использовал композитор для установки mailgun и его зависимостей.

EDIT: дополнительная информация.

init.php

<?php 

    require_once 'vendor/autoload.php'; 

    define('MAILGUN_KEY', 'key-854743a7e'); 
    define('MAILGUN_PUBKEY', 'pubkey-b00e47d7'); 

    define('MAILGUN_DOMAIN', 'example.com'); 
    define('MAILGUN_LIST', '[email protected]'); 
    define('MAILGUN_SECRET','xjhbJH7'); 

    $mailgun = new Mailgun\Mailgun(MAILGUN_KEY); 

    $mailgunValidate = new Mailgun\Mailgun(MAILGUN_PUBKEY); 

    $mailgunOptIn = $mailgun->OptInHandler(); 

subscribe.php

<?php 

require_once 'init.php'; 

if(isset($_POST['name'], $_POST['email'])) 
{ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 

    $validate = $mailgunValidate->get('address/validate', [ 
      'address' => $email 
     ])->http_response_body; 

    if($validate->is_valid) 
     { 
      $hash = $mailgunOptIn->generateHash(MAILGUN_LIST, MAILGUN_SECRET, $email); 

      $result = $mailgun->sendMessage(MAILGUN_DOMAIN, [ 
       'from'  => '[email protected]', 
       'to'  => $email, 
       'subject' => 'example mailing list confirmation.', 
       'html'  => " 
        Hello{$name},</br></br> 
        You submitted a request to join our mailing list, to confirm this subscription please click on the link provided below.</br></br> 
        http://localhost:8000/confirm.php?hash={$hash}" 
      ]); 


      $mailgun->post('lists/' . MAILGUN_LIST . '/members', [ 
       'name'   => $name, 
       'address'  => $email, 
       'subscribed' => 'no' 
      ]); 

      header('Location: ./'); 

     } 
} 

?> 

<!doctype html> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <title>Subscribe | Mailing list</title> 
    </head> 
    <body> 
     <div class="container"> 
      <form action="subscribe.php" method="post"> 
       <div class="field"> 
        <label> 
         Name 
         <input type="text" name="name" autocomplete="off"> 
        </label> 
       </div> 
       <div class="field"> 
        <label> 
         Email 
         <input type="text" name="email" autocomplete="off"> 
        </label> 
       </div> 
       <input type="submit" value="Subscribe" class="button"> 
      </form> 
     </div> 
    </body> 
</html> 
+0

Вы действительно уверены, что '$ email' содержит действительный адрес электронной почты? –

+0

Я уверен. Я буду жестко программировать его, чтобы убедиться сейчас. Изменить: я вручную помещаю электронное письмо и то же самое. Для записи информация поступает из формы и проверяется с помощью mailgun api, и это работает. Просто делать что-то еще, похоже, не так. – matiszac

+0

Ну, из-за того, что я смог обработать ошибку, которую вы видите, это потому, что Mailgun возвращает код ответа 400, а это значит, что они не получили входные данные, которые они ожидали для запроса. Я уверен, что это не ошибка в «RestClient». Тем не менее, кто-то, у кого больше опыта работы с Mailgun, чем я, должен будет помочь дальше, я боюсь. –

ответ

-1

Вы забыли text ключ, который используется при html не доступен почтовым клиентом.

Ваш код будет выглядеть

define('MAILGUN_KEY', 'key-ExamPle3xAMPle'); 
define('MAILGUN_DOMAIN', 'example.com'); 

$mailgun = new Mailgun\Mailgun(MAILGUN_KEY); 

$mailgun->sendMessage(MAILGUN_DOMAIN, [ 
       'from'  => '[email protected]', 
       'to'  => $email, 
       'subject' => 'Sign Stop mailing list confirmation.', 
       'text'  => 'Hello ' . $name . ', this is a test.', 
       'html'  => ' 
        Hello ' . $name . ',</br></br> 
        This is a test.' 
      ]); 

Кстати, Я рекомендую всегда использовать одинарные кавычки или двойные кавычки для удобства чтения.

+0

У меня есть текстовое поле. Это не решает проблему – dspacejs

+0

@mightyspaj У вас есть последняя версия Mailgun API (1.8)? это должно дать лучшее описание ошибки. (Если вы получили «Параметры, переданные API, были недопустимыми. Проверьте свои входы!») – Pepijn