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

Я пытаюсь отправить письмо с mailguns 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."]);

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

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

MissingRequiredParameters

Это означает, что то, что я передаю функции post, является неполным или неверным. осмотрев функцию post в RestClient, я вижу, что функция требует 2 массива, а не 1, поэтому я попытался добавить второй массив с вложениями сообщений, и он просто получил больше ошибок, на этот раз с жадностью (зависимость для 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. Я также использовал composer для установки mailgun и его зависимостей.

РЕДАКТИРОВАТЬ: Добавлено больше информации.

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>

4

Решение

Вы забыли 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.'
]);

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

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]