SendGrid与个别电子邮件的唯一参数

时间:2013-05-19 21:19:01

标签: php sendgrid

我尝试为每封电子邮件设置一个唯一参数列表,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?),对我来说这可能是一个很好的帮助。

1 个答案:

答案 0 :(得分: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来电中的值必须与收件人列表的顺序相同。