我尝试为每封电子邮件设置一个唯一参数列表,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?),对我来说这可能是一个很好的帮助。
答案 0 :(得分:5)
我看到你首先提到了独特的论点,然后你提到了一个完全无关的替代品。唯一参数适用于整个API调用,例如,系统中可能包含批处理ID,以便您可以更轻松地将电子邮件事件与数据进行匹配。但是,替换基本上是电子邮件中的字符串替换,以便为其收件人个性化每封电子邮件,并且这些电子邮件适用于电子邮件的每个收件人而不是API调用。
Sendgrid唯一参数
如果您正在使用其API库,则不必使用JSON请求标头,只需将该库用作任何其他PHP对象即可。例如,如果您必须设置三个变量var1
,var2
,var3
,则可以是:
$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
来电中的值必须与收件人列表的顺序相同。