5

我试图为每封电子邮件设置一个唯一参数列表,SMTP api 的官方参考非常简要地描述了这个功能,here

我正在使用的 SendGrid PHP 库的 API 文档也没有多大帮助:

 /** 
   * setUniqueArguments
   * Set a list of unique arguments, to be used for tracking purposes
   * @param array $key_value_pairs - list of unique arguments
   */
  public function setUniqueArguments(array $key_value_pairs)
  {
    $this->header_list['unique_args'] = $key_value_pairs;
    return $this;
  }

  /**
   * addUniqueArgument
   * Set a key/value pair of unique arguments, to be used for tracking purposes
   * @param string $key   - key
   * @param string $value - value
   */
  public function addUniqueArgument($key, $value)
  {
    $this->header_list['unique_args'][$key] = $value;
    return $this;
  }

所以事实上,我的实现基于明显的逻辑结论,并决定为标题的唯一参数部分创建多维 json,与替换值数组和接收者数组一一对应,但是不幸的是,这不起作用,并导致无效的 XSMTP API 标头错误被退回到我的电子邮件。

如果有人以前使用过这个功能,并且可以简要地指导我如何正确使用它(也许在每个 addTo 之后调用 addUniqueArgument?),这对我来说是一个很大的帮助。

4

1 回答 1

5

我看到您首先提到了独特的论点,但随后又提到了完全不相关的替换。唯一参数适用于整个 API 调用,例如那些可能在您的系统中包含批处理 ID 的参数,以便您可以更轻松地将电子邮件事件与您的数据相匹配。然而,替换基本上是电子邮件中的字符串替换,以便为其收件人个性化每封电子邮件,并且这些替换适用于电子邮件的每个收件人,而不是 API 调用。

Sendgrid 唯一参数

如果您使用他们的 API 库,则不必弄乱 JSON 请求标头,只需将该库用作任何其他 PHP 对象即可。例如,如果您必须设置三个变量 , var1var2var3可以是:

$Sendgrid -> setUniqueArguments(array(
    'var1' => 'value1',
    'var2' => 'value2',
    'var3' => 'value3'
));

或这个:

$Sendgrid -> addUniqueArgument('var1', 'value1');
$Sendgrid -> addUniqueArgument('var2', 'value2');
$Sendgrid -> addUniqueArgument('var3', 'value3');

不同之处在于第一个选项setUniqueArguments完全替换了您之前添加的任何其他变量,但第二个选项 ,addUniqueArgument向现有变量添加了一个变量。

Sendgrid 替换

假设您正在使用他们的 API 库,并且您有 2 个收件人,bob@example.com 和 alice@example com,您需要在电子邮件中提及他们的姓名。在这种情况下,您在电子邮件正文中使用占位符字符串,基本上是任何不会正常出现的字符串。在我们的例子中,我们假设它可能是:

Hello <<Name>>

<<Name>>收件人姓名的占位符在哪里。在这种情况下,您可以这样构建 API 调用(我将省略与电子邮件内容等相关的部分):

$Sendgrid -> addTo('bob@example.com');
$Sendgrid -> addTo('alice@example.com');
$Sendgrid -> addSubstitution('<<Name>>', array('Bob', 'Alice'));

调用中的值addSubstituion必须与收件人列表的顺序相同。

于 2013-05-19T21:36:51.377 回答