2016-07-21 8 views
2

Ich benutze Sendgrid und versuche, diese E-Mails mit C# Sprache zu senden. Also, was ich tue, ist die SMTP und API Keys in meinen Apps zu konfigurieren, und Boom, da gehen die E-Mails gesendet.Sendgrid unsubscribe Einstellungen

Die Frage ist, wie füge ich die Abbestellen Einstellungen Gruppe in meinem X-SMTPAPI-Header ein? FYI, Abmelden-Einstellungen ist, wo Sie wählen können, welche Gruppe Sie abmelden möchten statt globale Abbestellen.

Ich habe bereits diese Links:

ich die Bibliothek C# auf ihre Github ebenfalls geprüft. Aber keiner von diesen ist mir klar.

Ich bin völlig blind mit JSON, GET, Request, RESPONSE und so.

das ist mein C# -Code

 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 ..scheint Ihr Problem ist wirklich in Bezug auf "Ich bin völlig blind mit JSON, GET, REQUEST, RESPONSE und so". Nichts für ungut, aber eine Lösung für dieses Szenario wird das nicht angehen. Die Dokumentation, auf die Sie verwiesen haben, ist ausreichend. Allerdings steht die referenzierte Dokumentation nicht im Zusammenhang mit dieser Instanz oder Verwendung dieses .NET-SmtpClient-Typs. Was ist 'header' in der statischen Methode namens' XsmtpapiHeaderAsJson'? –

+0

Hallo Brett, danke für deine Antwort. Ich versuche mein Bestes, JSON GET usw. zu verstehen, aber ohne ein einfacheres Beispiel/Tutorial, konnte ich nicht sehen, wie es geht. Und, ja, XsmtpapiHeaderAsJson ist meine Kopfzeile, also hatte ich gehofft, dass es meine Gruppen dort drin speichern könnte, und ich addiere einfach Header oder etwas in SendMail da unten. –

+0

Das Unterstreichungskonzept von RESTful APIs ist, dass es auf der HTTP-Spezifikation beruht (Dies ist ein anderes Protokoll zu smtp), daher ist der "header", auf den verwiesen wird, ein HTTP-Anforderungs-Header (siehe HttpRequest-Typ in .NET). Ich bin mir ziemlich sicher, dass der SmtpClient, den Sie hier initialisieren, keine Verbindung über HTTP herstellt, geschweige denn RESTFul. Es sendet wahrscheinlich SOAP-Pakete an Mail-Server nach dem Herstellen einer Verbindung auf Port 25 mit dem SMTP (wenn wir die Verbindung als eine URL darstellen würde wäre es "SMTP: // SERVERNAME: 25") –

Antwort

4

Ich sehe, was du meinst, das smtpapi-csharp Projekt einfach nicht über das Konzept umgesetzt .. aber es ist eine triviale Angelegenheit. (Der Wert dieses Hilfsprojekts ist zunächst fraglich).

Wirklich ist das einzige Stück von Bedeutung hier auskommentiert.

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

sein sollte,

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

Im Wesentlichen sind Sie nur die Zuordnung json zu diesem Header. Die Documentation bietet diese Probe

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

[1, 2, 3] ist ein Array von ganzen Zahlen, die Gruppenkenn korreliert. Folgendes 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); 
} 

Erstellen und aktualisieren Sie Ihre csproj Referenz Ihre gegabelt Projekt verwenden


Alternativ

fork the git und hinzufügen.

dann rufen SetAsmGroupsToDisplay wie so,

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

und, natürlich, verwenden Sie die Methode:

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

... Sie vergessen haben, kein Pull-Request hinzufügen, wenn Sie es Arbeiten.

+0

Dies ist die Antwort. Verdammt geil, Alter !! Danke, dass du mein Leben gerettet hast !! –

Verwandte Themen