山魈 API 错误
Posted
技术标签:
【中文标题】山魈 API 错误【英文标题】:Mandrill API Error 【发布时间】:2016-12-30 03:56:40 【问题描述】:我第一次使用 Mandrill API 发送电子邮件,
但是我收到了这个错误。
发生 mandrill 错误:Mandrill_ValidationError - 您必须指定键值 致命错误:在 mandrill-api-php/src/Mandrill.php:153 中未捕获的异常“Mandrill_ValidationError”和消息“您必须指定一个键值”堆栈跟踪:#0 mandrill-api-php/src/Mandrill.php(132 ): Mandrill->castError(Array) #1 mandrill-api-php/src/Mandrill/Messages.php(80): Mandrill->call('messages/send', Array) #2 mandrill.php(88): Mandrill_Messages->send(Array, false) #3 main 在 Mandrill.php 第 153 行抛出
这是我的代码
<?php
require_once 'mandrill-api-php/src/Mandrill.php';
$servername = "localhost";
$username = "root";
$password = "";
$table = '';
$conn = mysql_connect($servername, $username, $password);
if (!$conn)
die("Connection failed: " . mysqli_connect_error());
$selected = mysql_select_db("DB Name")
or die("Could not select database");
$query=mysql_query(Query);
$table .= "<table width='auto' height='auto' border='1' bordercolor='#003399' style='color:#FF0000;table-layout:fixed' cellpadding=0 cellspacing=0>
<tr>
<th>User ID</th>
<th>Full Name</th>
<th>Username</th>
<th>Email ID</th>
</tr>";
while($row = mysql_fetch_array($query))
$table .= "<tr>";
$table .= "<td>" . $row['id'] . "</td>";
$table .= "<td>" . $row['fullname'] . "</td>";
$table .= "<td>" . $row['username'] . "</td>";
$table .= "<td>" . $row['useremail'] . "</td>";
$table .= "</tr>";
$table .= "</table><br>";
try
$mandrill = new Mandrill(API Key);
$message = array(
'html' => $table,
'subject' => 'Notification Email',
'from_email' => 'Example@example.com',
'from_name' => 'Test',
'to' => array(
array(
'email' => 'Example@example.com',
'name' => 'Test',
'type' => 'to'
)
),
'important' => false,
'track_opens' => null,
'track_clicks' => null,
'auto_text' => null,
'auto_html' => null,
'inline_css' => null,
'url_strip_qs' => null,
// A mandrill error occurred: Mandrill_Unknown_Subaccount - No subaccount exists with the id 'customer-123'
throw $e;
?>
'preserve_recipients' => null,
'view_content_link' => null,
'tracking_domain' => null,
'signing_domain' => null,
'return_path_domain' => null,
);
$async = false;
$result = $mandrill->messages->send($message, $async);
print_r($result);
catch(Mandrill_Error $e)
echo 'A mandrill error occurred: ' . get_class($e) . ' - ' . $e->getMessage();
throw $e;
?>
【问题讨论】:
这甚至不是有效的 PHP... 可能重复:***.com/questions/17700002/mandrill-validationerror 【参考方案1】:<pre>/*
Before coding, you have to make configurations in Mandrill.
Step 1: Enter Mandrill and register your domain.
Step 2: Configure DNS: DKIM and SPF (This is a good tutorial: https://www.youtube.com/watch?v=uEjP_smeLjU) at https://mandrillapp.com/settings/sending-domains
Step 3: Get a KEY API (https://mandrillapp.com/settings)
Step 4: Code with PHP
Step 5: Good luck! :)
*/
/*LIBS*/
include 'lib/mandrill-api-php/src/Mandrill.php';
$mandrill = new Mandrill('YOUR API KEY HERE');
/*ADMIN AND USER EMAIL*/
$admin_email = 'your_email@your_domain.com';
$client_email = 'the_email_of_the_client@mail.com';
/*attach PDF*/
$attachment = file_get_contents('the_route_to_your_pdf');
$attachment_encoded = base64_encode($attachment);
try
$user_message = array(
'subject' => 'Your Subject here',
'from_email' => $admin_email,
'from_name' => 'your_domain_for_example',
'html' => '<p>Aquí va la plantilla HMTL</p>',
'to' => array(array('email' => $client_email, 'name' => 'Recipient 1')),
'merge_vars' => array(array(
'rcpt' => 'recipient1@domain.com',
'vars' =>
array(
array(
'name' => 'FIRSTNAME',
'content' => 'Recipient 1 first name'),
array(
'name' => 'LASTNAME',
'content' => 'Last name')
))),
'attachments' => array(
array(
'content' => $attachment_encoded,
'type' => "application/pdf",
'name' => 'the_name_of_the_attach.pdf',
))
);
$res_user_mandrill = $mandrill->messages->send($user_message, $async=false, $ip_pool=null, $send_at=null);
catch(Mandrill_Error $e)
</pre>
【讨论】:
以上是关于山魈 API 错误的主要内容,如果未能解决你的问题,请参考以下文章