Sparkpost C# API добавляет вложения в шаблоны

Я просматривал документацию и искал в Интернете документацию о том, как добавлять вложения в созданные шаблоны. Я использую CSharp-Sparkpost darrencauthon для обработки вызовов API. Пока то, что у меня есть, не работает. У кого-нибудь есть рабочее решение (возможно?) или лучшее решение для С#? Я не против использования другой библиотеки. Это ссылка на CSharp-Sparkpost

Вот что у меня есть:

var t = new Transmission();

t.Content.From.Email = "[email protected]";
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();

Я проверил, что могу отправить это вложение без шаблона, а также подтвердил, что могу отправить этот шаблон без вложения. Итак... электронная почта отправляется; однако полученное содержимое представляет собой только данные шаблона и замены. Нет вложения с шаблоном электронной почты.


person Fus Ro Dah    schedule 22.06.2017    source источник


Ответы (3)


Используя библиотеку Даррена и объединив требования для моего проекта, я придумал это решение. Я просто делаю дополнительный вызов API, чтобы захватить шаблон Html, чтобы я мог создать передачу без отправки template_id. Все еще использую библиотеку CSharp-Sparkpost для выполнения всех вызовов. Я изменил пример программы Даррена 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");
    }

Шаблон с прикрепленным файлом

person Fus Ro Dah    schedule 26.06.2017

О, на самом деле, теперь я вижу - вы говорите о добавлении вложений в шаблоны, а не вложений.

Мой ответ на это таков: когда я разрабатывал эту библиотеку, вложение в шаблоны не поддерживалось самим SparkPost.

Моя библиотека позволяет вам попробовать это, но это потому, что все шаблонные и не шаблонные электронные письма считаются «передачами». Поэтому, если вы создаете передачу, у нее есть возможность добавлять вложения... но если вы отправляете передачу с идентификатором шаблона, вложение игнорируется.

Я мог бы выдать ошибку или каким-то образом спроектировать API вокруг этого ограничения, но что, если они перестанут игнорировать вложение, а моя библиотека выдаст ошибку? Я разработал библиотеку для гибкости по мере роста веб-API SparkPost, и я не хотел, чтобы моя библиотека мешала.

Если вы хотите проверить, правильно ли вы отправляете вложение, отправьте свою передачу без идентификатора передачи, а вместо этого укажите тему и текст сообщения электронной почты. Если электронное письмо проходит и вы получаете вложение, то вы знаете, что это из-за этого ограничения шаблона/вложения от SparkPost.

ПРИМЕЧАНИЕ: я помещаю этот ответ в Stack Overflow, и возможно, что это датированное сообщение больше не будет действительным в будущем.

person Darren    schedule 26.06.2017
comment
Я только что проверил на своей стороне, и ограничение все еще в силе. - person Darren; 26.06.2017
comment
Вот ссылка на тестовый сценарий. Все то же самое, что и в предыдущем тесте вложения, за исключением того, что вместо темы/тела передается идентификатор шаблона. И электронное письмо будет отправлено, но вложение не будет включено. Это говорит мне, что это проблема со SparkPost, а не с библиотекой. github.com/darrencauthon/csharp-sparkpost/pull/147/ - person Darren; 26.06.2017
comment
Спасибо за изучение этого снова. Теперь я собрал обходной путь, зная ограничения текущего состояния Sparkpost API. Я запрашиваю GET, извлекаю html для шаблона, а затем использую вашу библиотеку, например: transmission.Content.Html = htmlFromGet - person Fus Ro Dah; 26.06.2017
comment
Я мог так же легко получить Html для замены из любого другого источника, у меня просто было несколько шаблонов, и было несложно подключить запрос к API для их получения. - person Fus Ro Dah; 26.06.2017

Я Даррен Каутон, главный автор этой библиотеки.

У меня есть поддержка вложений в моих приемочных тестах, которые запускаются перед каждым выпуском. Ссылка ниже, но код должен быть таким простым, как:

// C#

var attachment = File.Create<Attachment>("testtextfile.txt");
transmission.Content.Attachments.Add(attachment);

https://github.com/darrencauthon/csharp-sparkpost/blob/3a8cb1efbb8c9a0448c71c126ce7f88759867fb0/src/SparkPost.Acceptance/TransmissionSteps.cs#L56

person Darren    schedule 26.06.2017