通过 API 在 MailGun 中订阅一批电子邮件地址

Subscribing a batch of email addresses in MailGun via API

在发送一批新的电子邮件地址以订阅我的邮寄列表时,出现致命错误。

我从 https://documentation.mailgun.com/en/latest/api-mailinglists.html#examples 的 Mailgun API 文档中 "Add multiple mailing list members (limit 1,000 per call)" 下的示例中借用了代码 我的数组看起来像示例。

我的阵列:

array:2 [▼
  "members" => array:1 [▼
    0 => "[{"name":"Someone","address":"sub1@example.com","vars":"{\"subscriber_id\":33}"},{"name":"Ellem","address":"sub2@example.com","vars":"{\"subscriber_id\":34}"},{"name":"Enno","address":"sub3@example.com","vars":"{\"subscriber_id\":35}"},{"name":"Nick","address":"sub4@example.com","vars":"{\"subscriber_id\":36}"},{"name":"Carl","address":"sub5@example.com","vars":"{\"subscriber_id\":37}"},{"name":"Tammy","address":"sub6@example.com","vars":"{\"subscriber_id\":38}"},{"name":"Janis","address":"sub7@example.com","vars":"{\"subscriber_id\":39}"}]"
  ]
  "upsert" => true
]

以及我正在拨打的电话:

$mgClient = new Mailgun($MAILGUN_SECRET);
$result = $mgClient->post("lists/$listAddress/members.json", $myarray);

我收到以下错误:

First argument to Stream::create() must be a string, resource or StreamInterface. {"userId":1,"email":"sub1@example.com","exception":"[object] (InvalidArgumentException(code: 0): First argument to Stream::create() must be a string, resource or StreamInterface. at /home/SECRET.cloudwaysapps.com/SECRET/public_html/vendor/nyholm/psr7/src/Stream.php:87)

这是堆栈跟踪中似乎相关的部分:

/home/SECRET.cloudwaysapps.com/SECRET/public_html/vendor/nyholm/psr7/src/Factory/HttplugFactory.php(29): Nyholm\Psr7\Stream::create(true)

#1 /home/SECRET.cloudwaysapps.com/SECRET/public_html/vendor/php-http/multipart-stream-builder/src/MultipartStreamBuilder.php(61): Nyholm\Psr7\Factory\HttplugFactory->createStream(true)

#2 /home/SECRET.cloudwaysapps.com/SECRET/public_html/vendor/mailgun/mailgun-php/src/Mailgun/Connection/RestClient.php(98): Http\Message\MultipartStream\MultipartStreamBuilder->addResource('upsert', true, Array)

#3 /home/SECRET.cloudwaysapps.com/SECRET/public_html/vendor/mailgun/mailgun-php/src/Mailgun/Connection/RestClient.php(179): Mailgun\Connection\RestClient->send('POST', 'lists/devtest@n...', Array, Array)

#4 /home/SECRET.cloudwaysapps.com/SECRET/public_html/vendor/mailgun/mailgun-php/src/Mailgun/Mailgun.php(208): Mailgun\Connection\RestClient->post('lists/devtest@n...', Array, Array)

#5 /home/SECRET.cloudwaysapps.com/SECRET/public_html/app/Http/Controllers/SubscribersController.php(591): Mailgun\Mailgun->post('lists/devtest@n...', Array)

#6 [internal function]: App\Http\Controllers\SubscribersController->processUpload(Object(Illuminate\Http\Request))

对于我哪里出错的任何指导,我将不胜感激。我应该创建并附加 members.json 文件吗?

我无法使用 post 方法让它工作。另一个人在使用不同的 post 命令时遇到了麻烦,建议使用助手,很难找到相关文档。但我拼凑了这个解决方案:

首先,我为新成员创建了一个数组:

$sarray = [];
$sarray["name"] = $name;
$sarray["address"] = $email;
$sarray["vars"] = array('subscriber_id'=>$id);

并将它们捆绑成一个成员数组数组,$combinedarray

然后我调用了createMultiple方法:

    $mgClient = Mailgun::create($MAILGUN_API_KEY);
    $result = $mgClient->mailingList()->member()->createMultiple($listaddress,$combinedarray,'no');

$result 是一个 UpdateResponse 对象,它有一个 public getMessage 方法,所以 $message = $result->getMessage();

得到了我需要的东西。现在看来很简单,我已经把它归结了,但是找到这些信息是一个挑战! (我认为 Mailgun 正在更新 API 和文档,所以这个解决方案可能很快就会在文档中更容易找到。)