SendGrid를 사용하여 맞춤 이메일을 보내려고합니다. 몸 전체는 각 메일에서 불과 3-4 일 - 워드 substitions의, 유사하다, 그래서 SendGrid이SendGrid Web API v3 각 수신자마다 다른 대체 값
- 밥을 대체 사용의 생각 ([email protected]) "안녕 밥을 말하는 이메일을 얻어야한다, 가 lorem ipsum의는
환경이 provided PHP-Class 작곡가에 의해 설치 사용하여 CodeIgniter를 설치 안녕하세요 앨리스가 lorem ipsum의 "를"
문제가있는 함수 호출은 addSubstitution($key, $value)이며 오류 400 (잘못된 요청)이 발생합니다. 이 호출없이 요청을 제출하면 모든 것이 예상대로 작동합니다 (당연히 대체되지 않은 자리 표시 자 포함). 나는 깨끗한 202
을 얻고있다, 전자 우편은 도착하고있다. SendMail에서 제공하는 오류 텍스트는 {"errors":[{"message":"Bad Request","field":null,"help":null}]}
이며 많은 도움이되지 않습니다.
대체 키에 값 배열을 추가 할 것을 고려했습니다. 이 코드는 this과 this 코드 (첫 번째 예제의 SMTP API를 사용하여 두 번째 코드가 무엇인지 명확히 알 수 없음)에서 복사되었지만 value
이 addSubstitution
인 경우에만 문자열을 처리 할 수 있습니다.
분명해야 함 : 일반적인 접근 방식에서이 기능이 필요합니다. 내 문제는 인사말의 수신자 이름, 개인화 된 수신 거부 링크 등과 관련이 없습니다. "Sendgrid-Marketing-API를 사용하고 이전에 수신자를 업로드하십시오"와 같은 대답이 내 요구를 충족시키지 못하기 때문에이 힌트를 추가합니다. .
내 PHP 스크립트 (라이트 버전) :
// General
$sg = new \SendGrid('api_key');
$recipients = array(
array(
'email' => '[email protected]',
'name' => 'Bob'
),
array(
'email' => '[email protected]',
'name' => 'Alice'
)
);
$mail = new \SendGrid\Mail();
$from = new \SendGrid\Email('myname', '[email protected]');
$mail->setFrom($from);
$mail->setSubject('New mail');
$content = new \SendGrid\Content('text/plain', 'Hi -name-, lorem ipsum');
$mail->addContent($content);
// Personalizations
$personalization = new \SendGrid\Personalization();
$substitutions_name = array();
foreach ($recipients as $recipient) {
$email = new \SendGrid\Email(null, $recipient['email']);
$personalization->addTo($email);
array_push($substitutions_name, $recipient['name']);
}
$personalization->addSubstitution('-name-', $substitutions_name);
$mail->addPersonalization($personalization);
$response = $sg->client->mail()->send()->post($mail);
내 접근 방식은 일반적으로 잘못인가? 내 요구를 충족시키는 SendGrid의 또 다른 유사한 기능이 있습니까?
빠른 기능과 긴 기능의 루프에서 php mail()을 호출하지 않으므로 필요한 기능이있는 것으로 보이는 SMTP-API를 호출하는 것은 대안이 아닙니다.
업데이트 : 내가 더 깊고 깊게 파고 들면서 내 솔루션이 완벽하게 작동해야합니다. This SO answer은 정확히 동일한 접근 방식을 사용합니다. 그러나 나는 아직도 400 오류가 발생하는 이유는 무엇입니까? 나머지 코드는 대체 부분이없는 간단한 시도로 작동합니다. 는 PHP 스크립트
{
"from": {
"name": "myname",
"email": "[email protected]"
},
"personalizations": [
{
"to": [
{
"email": "[email protected]"
},
{
"email": "[email protected]"
}
],
"substitutions": {
"-name-": [
"Bob",
"Alice"
]
}
}
],
"subject": "New mail",
"content": [
{
"type": "text/plain",
"value": "Hi -name-, lorem ipsum"
}
]
}
업데이트의 결과 JSON : bwests answer이 따라 내 문제에 대한 솔루션 (테스트)이다 : 편집
v3에서
[...]
$content = new \SendGrid\Content('text/plain', 'Hi -name-, lorem ipsum');
$mail->addContent($content);
foreach ($recipients as $recipient) {
$personalization = new \SendGrid\Personalization();
$email = new \SendGrid\Email(null, $recipient['email']);
$personalization->addTo($email);
$personalization->addSubstitution('-name-', $recipient['name']);
$mail->addPersonalization($personalization);
}
$response = $sg->client->mail()->send()->post($mail);
v3 또는 SMTP를 사용하고 있습니까? SMTP API 링크를 참조하고 있지만 v3에서 상황을 다르게 처리합니다. 이것을 시도하십시오 : https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/personalizations.html – bwest
코드가 생성하는 JSON 페이로드를 게시 할 수 있습니까? – bwest
@bwest Web API v3을 사용하고 있지만이 주제에 대한 문서 (각 수신자마다 다른 대체 값)는 SMTP-API 문서에서만 찾을 수 있으므로 내 링크에서 찾을 수 있습니다. Btw : 귀하의 링크도 마찬가지입니다. 결과 JSON을 제 질문에 첨부했습니다. –