2016-07-21 2 views
2

Я использую Sendgrid и пытаюсь отправить эти письма на язык C#. Итак, что я делаю, это настройка SMTP и API-ключей в моих приложениях, а также бум, туда отправляются электронные письма.Sendgrid отказаться от подписки предпочтения

Вопрос в том, как вставить Отменить подписку Настройки в моем заголовке X-SMTPAPI? FYI, предпочтения отписки, где вы можете выбрать, какую группу вы хотите отменить, вместо глобальной отписки.

Я уже проверил эти ссылки:

Я также проверил библиотеку C# на их GitHub. Но никто из них не дал мне понять.

Я полностью слеп с JSON, GET, REQUEST, RESPONSE и т. Д.

это мой C# код

 public void Main() 
       { 
        string sSubject = Dts.Variables["vSubject"].Value.ToString(); 
        string sBody = Dts.Variables["vBodyMessage"].Value.ToString(); 

        int iPriority = 2; 



        if (SendMail(sSubject, sBody, iPriority)) 
        { 
         Dts.TaskResult = (int)ScriptResults.Success; 
        } 
        else 
        { 
         //Fails the Task 
         Dts.TaskResult = (int)ScriptResults.Failure; 
        } 
       } 

//THIS IS THE HEADER X-SMTPAPI, I DUNNO HOW TO USE IT :(
//I WANNA ADD MY GROUPS HERE 
    private static string XsmtpapiHeaderAsJson() 
      { 
       var header = new Header(); 
       header.SetAsmGroupId(777); 

       //var uniqueArgs = new string[] { "Small", "Medium", "Large" }; 
       //{ 

       //  "asm_groups_to_display": [1, 2, 3] 

       //}; 
       //header.AddUniqueArgs({ "asm_groups_to_display": ['1', '2', '3']}); 

       //var subs = new List<String> { "私はラーメンが大好き" }; 
       //header.AddSubstitution("%tag%", subs); 

       //dynamic stuff = json 

       return header.JsonString(); 
      } 

    public bool SendMail(string sSubject, string sMessage, int iPriority) 
      { 
       string xmstpapiJson = XsmtpapiHeaderAsJson(); 

       try 
       { 
        string sEmailServer = Dts.Variables["sServer"].Value.ToString(); 
        string sEmailPort = Dts.Variables["sPort"].Value.ToString(); 
        string sEmailUser = Dts.Variables["sUser"].Value.ToString(); 
        string sEmailPassword = Dts.Variables["sPassword"].Value.ToString(); 
        string sEmailSendTo = Dts.Variables["sSendTo"].Value.ToString(); 
        string sEmailSendToName = Dts.Variables["sSendToName"].Value.ToString(); 
        //string sEmailSendCC = Dts.Variables["sSendCC"].Value.ToString(); 
        string sEmailSendFrom = Dts.Variables["sFrom"].Value.ToString(); 
        string sEmailSendFromName = Dts.Variables["sFromName"].Value.ToString(); 

        SmtpClient smtpClient = new SmtpClient(); 
        MailMessage message = new MailMessage(); 

        MailAddress fromAddress = new MailAddress(sEmailSendFrom, sEmailSendFromName); 

        //You can have multiple emails separated by ; 
        string[] sEmailTo = Regex.Split(sEmailSendTo, ";"); 
        //string[] sEmailCC = Regex.Split(sEmailSendCC, ";"); 
        int sEmailServerSMTP = int.Parse(sEmailPort); 

        smtpClient.Host = sEmailServer; 
        smtpClient.Port = sEmailServerSMTP; 

        System.Net.NetworkCredential myCredentials = 
         new System.Net.NetworkCredential(sEmailUser, sEmailPassword); 
        smtpClient.Credentials = myCredentials; 

        message.From = fromAddress; 

        //MailAddress toAddress = new MailAddress(sEmailSendTo, sEmailSendToName); 
        //message.To.Add(toAddress); 

        if (sEmailTo != null) 
        { 
         for (int i = 0; i < sEmailTo.Length; ++i) 
         { 
          if (sEmailTo[i] != null && sEmailTo[i] != "") 
          { 
           MailAddress toAddress = new MailAddress(sEmailTo[i], sEmailSendToName); 
           message.To.Add(toAddress); 


          } 
         } 
        } 

        switch (iPriority) 
        { 
         case 1: 
          message.Priority = MailPriority.High; 
          break; 
         case 3: 
          message.Priority = MailPriority.Low; 
          break; 
         default: 
          message.Priority = MailPriority.Normal; 
          break; 
        } 


        //message.Headers.Add("X-SMTPAPI", xmstpapiJson); 

        //smtpClient.SendCompleted += SendCompletedCallback; 
        //const string state = "test1"; 

        message.Subject = sSubject; 
        message.IsBodyHtml = true; 
        message.Body = sMessage; 

        //smtpClient.SendAsync(message, state); 
        smtpClient.Send(message); 
        return true; 
       } 
       catch (Exception ex) 
       { 
        return false; 
       } 
      } 
+0

hmm ..кажется, ваша проблема действительно касается «Я полностью слеп с JSON, GET, REQUEST, RESPONSE и т. д.». Без обид, но для решения этого сценария это не будет. Соответствующая документация является достаточной. Сказав это, ссылочная документация не относится к экземпляру экземпляра .NET 'SmtpClient' или использованию. Что такое 'header' в статическом методе с именем' XsmtpapiHeaderAsJson'? –

+0

Привет, Брет, спасибо за ваш ответ. Я стараюсь понять JSON GET и т. Д., Но без какого-либо более простого примера/учебника я не мог понять, как это происходит. И, да, XsmtpapiHeaderAsJson - это мой заголовок, поэтому я надеялся, что он сможет хранить мои группы там, и я просто добавляюHeader или что-то в этом в SendMail там. –

+0

Концепция подчеркивания API RESTful заключается в том, что он опирается на спецификацию http (это другой протокол для smtp), поэтому «заголовок», на который он ссылается, является заголовком HTTP-запроса (поиск типа HttpRequest в .NET). Я уверен, что SmtpClient, который вы инициализируете здесь, не устанавливает соединение по http, не говоря уже о RESTFul. вероятно, отправит SOAP-пакеты на Почтовый сервер после установления соединения на порте 25 с помощью smtp (если бы мы отображали соединение как url, это было бы «smtp: // SERVERNAME: 25') –

ответ

4

Я понимаю, что вы имеете в виду, проект smtpapi-CSharp просто не имеет, что концепция реализована .. но это пустяк. (ценность этого проекта утилиты сомнительна для начала).

На самом деле единственное важное значение здесь прокомментировано.

//message.Headers.Add("X-SMTPAPI", xmstpapiJson); 

Должно быть,

message.Headers.Add("X-SMTPAPI", @"{ ""asm_group_id"" : 777, ""asm_groups_to_display"" : [777] }"); 

По сути, вы просто назначая JSON для этого заголовка. Documentation предоставляет этот пример

{ 
    "asm_groups_to_display": [1, 2, 3] 
} 

[1, 2, 3] представляет собой массив целых чисел, который коррелирует с GroupIds.


В качестве альтернативы,

fork the git и добавьте следующие строки в Header.cs

/// <summary> 
///  This sets which groups to display on the Manage Preferences page of an email. You can find further documentation about ASM here: 
///  https://sendgrid.com/docs/API_Reference/SMTP_API/suppressions.html 
/// </summary> 
/// <param name="ids">ASM groups to display applied to the message</param> 
public void SetAsmGroupsToDisplay(params int[] ids) 
{ 
    _settings.AddArray(new List<string> {"asm_groups_to_display"}, ids); 
} 

Построить и обновить справки csproj использовать свой раздвоенный проект.

затем вызовите SetAsmGroupsToDisplay как так,

private static string XsmtpapiHeaderAsJson() 
{ 
    var header = new Header(); 
    header.SetAsmGroupId(777); 
    header.SetAsmGroupsToDisplay(777); // SetAsmGroupsToDisplay(new int[] {777}) works too 
    return header.JsonString(); 
} 

и, конечно, использовать метод:

message.Headers.Add("X-SMTPAPI", XsmtpapiHeaderAsJson()); 

... не забыл добавить Толкай запрос, когда вы его получите за работой.

+0

это ответ. Черт побери, чувак! спасибо за спасение моей жизни! –

Смежные вопросы