sendgridMail.send
関数を使用してトランザクションテンプレートを送信する場合、 sendgridMail.send
( data.subject
またはdata.personalizations[someIndex].subject
経由)に渡されるdata
オブジェクトに追加された件名data.personalizations[someIndex].subject
)は破棄され、実際のトランザクションテンプレート自体で指定されている件名が使用されます。
私が期待する動作は、 data
オブジェクトで指定されたフィールドが既存のテンプレートフィールドを上書きすることですが、そうではないようです。 v3 Mail Send APIのドキュメントを見ると、 template_id
フィールドの説明には次のように記載されています。
使用するテンプレートのID。 件名とコンテンツ(テキストまたはhtml)を含むテンプレートを使用する場合、パーソナライズレベルまたはメッセージレベルでそれらを指定する必要はありません。
私にとって、「パーソナライズやメッセージレベルでそれらを指定する必要はありません」とは、テンプレートの件名を上書きできることを意味します。 そうでない場合は、説明を「パーソナライズやメッセージレベルで指定することはできません」に変更する必要
sendgridMail.send
を使用してメールを送信しようとしましたが、 data.subject
を「[TEST] MyEmailSubject」に指定しましたsendgridMail.send
関数を使用して、テンプレートを送信します。 また、必ずdata.subject
またはdata.personalizations[someIndex].subject
いずれかを指定してください。こんにちは@ 10kc-zack、
トランザクションテンプレートでは、件名を{{subject}}に設定し、コードでdata.subject
を"[TEST] My Email Subject"
設定すると思います。
それはあなたのために働きますか?
敬具、
エルマー
@thinkingseriousの返信とあなたの提案に
これで作業は完了しますが(現在使用している回避策です)、API呼び出し本体の一部として件名を設定できる方がはるかに望ましいです。 APIに提供されたサブジェクトが実際に破棄され、その情報がAPIドキュメントから欠落していることを確認できますか?
こんにちは@ 10kc-zack、
トランザクションテンプレートでは、件名を{{subject}}に設定し、コードで
data.subject
を"[TEST] My Email Subject"
設定すると思います。それはあなたのために働きますか?
敬具、
エルマー
@ 10kc-zackが述べたように、この回避策は機能しますが、テンプレートが'
apostrophyなどの一部の文字を変換していることにも気づきました。 私のメールは件名Someone's
届きます
SendMailNugetパッケージメソッドを使用して件名を設定するのに問題があります。 上記の情報を使用して更新しようとしたコードは次のとおりです。
public async Task SendAsyncTemplate(string FromAddress, string FromName, string ToAddress, string ToName, string Subject, string LinkText, string LinkUrl)
{
_logger.LogInformation($"Sending mail to: {ToAddress}, with subject: {Subject}");
var apiKey = _sendGridOptions.SendGridAPI;
var client = new SendGridClient(apiKey);
var from = new EmailAddress(FromAddress, FromName);
var to = new EmailAddress(ToAddress, ToName);
var msg = new SendGridMessage();
var templateData = new ExampleTemplateData
{
Subject = Subject,
Name = ToName,
LinkText = LinkText,
LinkUrl = LinkUrl
};
msg.Subject = "{{subject}}";
msg.SetFrom(from);
msg.AddTo(to);
msg.AddCc(from);
msg.SetTemplateId("supersecret");
msg.SetTemplateData(templateData);
var response = await client.SendEmailAsync(msg);
_logger.LogInformation($"SendGrid Response Status Code: {response.StatusCode}");
}
private class ExampleTemplateData
{
[JsonProperty("subject")]
public string Subject { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("linkText")]
public string LinkText { get; set; }
[JsonProperty("linkUrl")]
public string LinkUrl { get; set; }
}
デバッグモードで実行しましたが、値が正しく設定されています。 件名として取得しているのはハイフンです。 何か案は?
ドー! {{subject}}を設定する必要がある場所を見つけました。 他の誰かがこの問題を抱えている場合は、テンプレートを編集して、左側の[設定]をクリックしてください。 あなたの主題を入力するためのスペースがあります。 ここに{{subject}}と入力します。
@smschick 、
あなたの場合、あなたは{{{ subject }}}
をするでしょう。
@thinkingseriousそれは確かに私が参照していたドキュメントです:+1:
dynamic_template_data
を使用せずにAPIを介して件名を設定できるようにする計画はありますか?
@ mou01件名を設定する方法の簡単な例: https :
はい、動的テンプレートデータを使用する場合、パーソナライズを介してサブジェクトを渡すことができないのはかなり混乱しています。見た目のデータでサブジェクトを渡す必要があります。
@ mou01件名を設定する方法の簡単な例: https :
これは動的テンプレートで機能しますか?
そうではないと思いますが、動的テンプレートの背後にある考え方は、テンプレート設定でサブジェクトを設定し、サブジェクトで動的データを使用できるようにすることだと思います。 トレードオフは、完全に柔軟にしたい場合は、動的データで渡す必要があることです。
この問題を抱えている人がいる場合:
テンプレートに移動し、歯車のアイコンが付いた[設定]をクリックして、件名フィールドに入力します{{subject}}
そして最後に、ペイロードを送信するとき、「 dynamic_template_data 」はサブジェクト値を持つ必要があります。
"dynamic_template_data":{
"subject": "My Subject Value here"
}
ドキュメントの変更時にこの問題を解決することは、このリポジトリで修正できるものではありません。 ドキュメントチームにリクエストを送信しました(参照タイトル:_メールの更新-template_idの説明を送信_)。更新があればここに戻ります。
ドキュメントが更新されました。
ありがとう@ childish-sambino
トリプルブラケットはまだ機能していますが、それはまだ公式の解決策ですか?
ありがとう!
@tcukanootはい。
最も参考になるコメント
ドー! {{subject}}を設定する必要がある場所を見つけました。 他の誰かがこの問題を抱えている場合は、テンプレートを編集して、左側の[設定]をクリックしてください。 あなたの主題を入力するためのスペースがあります。 ここに{{subject}}と入力します。