0

ドキュメントをざっと見て、インターネットを検索して、作成したテンプレートに添付ファイルを追加する方法に関するドキュメントを見つけました。私は darrencauthon の CSharp-Sparkpost を使用して API 呼び出しを処理しています。これまでのところ、私が持っているものは機能していません。誰かが実用的な解決策(可能ですか?)またはC#のより良い解決策を持っていますか? 別のライブラリを使用することに反対しているわけではありません。これは CSharp-Sparkpost へのリンクです

ここに私がこれまでに持っているものがあります:

var t = new Transmission();

t.Content.From.Email = "from@thisperson.com";
t.Content.TemplateId = "my-template-email";

new Recipient
{
    Address = new Address { Email = recipient }
}
.Apply(t.Recipients.Add);


new Attachment
{
    Data = //CSVDATA,
    Name = "Table.csv",
    Type = "text/csv"
}.Apply(t.Content.Attachments.Add);


var client = new SparkPost.Client(Util.GetPassword("sparkpostapikey"));
client.Transmissions.Send(t).Wait();

テンプレートなしでこの添付ファイルを送信できることを確認し、添付ファイルなしでこのテンプレートを送信できることも確認しました。だから...メールが送信されています。ただし、受信するコンテンツはテンプレートと置換データのみです。テンプレート メールに添付ファイルはありません。

4

3 に答える 3

2

Darren のライブラリを使用し、私のプロジェクトの要件を組み合わせて、これが私が思いついたソリューションです。テンプレート Html を取得するために追加の API 呼び出しを行っているだけなので、template_id. CSharp-Sparkpostライブラリを引き続き使用して、すべての呼び出しを行います。Darren のサンプル SendInline プログラムを次のように変更しました。

    static async Task ExecuteEmailer()
    {
        var settings = ConfigurationManager.AppSettings;
        var fromAddr = settings["fromaddr"];
        var toAddr = settings["toaddr"];

        var trans = new Transmission();

        var to = new Recipient
        {
            Address = new Address
            {
                Email = toAddr
            },
            SubstitutionData = new Dictionary<string, object>
            {
                {"firstName", "Stranger"}
            }
        };

        trans.Recipients.Add(to);

        trans.SubstitutionData["firstName"] = "Sir or Madam";

        trans.Content.From.Email = fromAddr;
        trans.Content.Subject = "SparkPost sending attachment using template";
        trans.Content.Text = "Greetings {{firstName or 'recipient'}}\nHello from C# land.";

        //Add attachments to transmission object
        trans.Content.Attachments.Add(new Attachment()
        {
            Data = Convert.ToBase64String(System.IO.File.ReadAllBytes(@"C:\PathToFile\ExcelFile.xlsx")),
            Name = "ExcelFile.xlsx",
            Type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        });

        Console.Write("Sending mail...");

        var client = new Client(settings["apikey"]);
        client.CustomSettings.SendingMode = SendingModes.Sync;

        //retrieve template html and set Content.Html
        var templateResponse = await client.Templates.Retrieve("template-email-test");
        trans.Content.Html = templateResponse.TemplateContent.Html;

        //Send transmission 
        var response = client.Transmissions.Send(trans);

        Console.WriteLine("done");
    }

添付ファイル付きテンプレート

于 2017-06-26T21:07:50.790 に答える
1

ああ、なるほど、添付ファイルではなく、添付ファイルをテンプレートに追加することについて話しているのですね。

それに対する私の答えは、私がこのライブラリを開発したとき、テンプレートへの添付はSparkPost 自体でサポートされていなかったということです。

私のライブラリでは試してみることができますが、それはすべてのテンプレートおよび非テンプレート メールが「送信」と見なされるためです。したがって、送信を作成する場合、添付ファイルを追加するオプションがあります... しかし、テンプレート ID を使用して送信を送信すると、添付ファイルは無視されます。

エラーをスローするか、この制限を回避するように API を設計することはできますが、添付ファイルを無視するのをやめたのにライブラリがエラーをスローした場合はどうなるでしょうか? SparkPost Web API の成長に合わせてライブラリを柔軟に設計しましたが、ライブラリが邪魔になるのは避けました。

添付ファイルを正しく送信しているかどうかをテストしたい場合は、送信 ID を付けずに件名とメール本文を付けて送信してください。メールが送信されて添付ファイルが届いた場合は、SparkPost からのこのテンプレート/添付ファイルの制限が原因であることがわかります。

: この回答を Stack Overflow に掲載しています。この日付の付いたメッセージは将来的に無効になる可能性があります。

于 2017-06-26T15:57:42.323 に答える