【问题标题】:Subscribing a batch of email addresses in MailGun via API通过 API 在 MailGun 中订阅一批电子邮件地址
【发布时间】:2019-12-01 16:04:16
【问题描述】:

当发送一批新的电子邮件地址订阅我的邮件列表时,我收到了一个致命错误。

我从 Mailgun 的 API 文档https://documentation.mailgun.com/en/latest/api-mailinglists.html#examples 的“添加多个邮件列表成员(每次调用限制 1,000 个)”下的示例中借用了代码 我的数组看起来像示例。

我的数组:

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);

我收到以下错误:

Stream::create() 的第一个参数必须是字符串、资源或 StreamInterface。 {"userId":1,"email":"sub1@example.com","exception":"[object] (InvalidArgumentException(code: 0): Stream::create() 的第一个参数必须是字符串,资源或 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', 真的,数组)

#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...', 数组,数组)

#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, 数组)

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

#6[内部函数]: App\Http\Controllers\SubscribersController->processUpload(Object(Illuminate\Http\Request))

如果我在哪里出错,我将不胜感激。我应该创建并附加 members.json 文件吗?

【问题讨论】:

  • 能否请您添加您为发送这些电子邮件而编写的所有代码?
  • 我的发送代码效果很好。我在通过 Mailgun 发送时没有遇到问题。问题在于将成员批量添加到邮件列表(我正在上传 CSV)。

标签: php mailgun


【解决方案1】:

我无法使用 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 对象,它有一个公共的 getMessage 方法,所以 $message = $result->getMessage();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多