2016-07-21 14 views
2

私はSendgridを使用しており、これらの電子メールをC#言語で送信しようとしています。 私のやっていることは、私のアプリにSMTPとAPIキーを設定して、ブームが送られてきたところです。Sendgrid unsubscribe preferences

質問は、購読解除の設定グループをX-SMTPAPIヘッダーに挿入するにはどうすればよいですか。 FYIの購読中止設定では、グローバル購読解除の代わりに購読を解除するグループを選択できます。

私はすでにこれらのリンクをチェックする:

私はまた、彼らのgithubの上のライブラリのC#をチェックします。 しかし、これらのどれも私には明らかにされていません。

私は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」タイプのインスタンスまたは使用法のコンテキスト内にありません。 'XsmtpapiHeaderAsJson'という静的メソッドの' header'とは何ですか? –

+0

こんにちは、ブレット、ご返信ありがとうございます。 私はJSON GETなどを理解するために最善を尽くしていますが、もっと簡単な例やチュートリアルがなければ、どのようになっているのか分かりませんでした。そして、はい、XsmtpapiHeaderAsJsonは私のヘッダーなので、そこに私のグループを格納することができたら嬉しいです。ちょうどaddHeaderかそのようなものがSendMailにあります。 –

+0

RESTful APIの下線の概念は、http仕様(これはsmtpとは異なるプロトコルです)、それが参照している 'ヘッダー'はhttpリクエストヘッダーです(.NETのHttpRequest型参照)。 私はここで初期化しているSmtpClientがHTTP経由で接続を確立していないと確信しています。 smtpを使用してポート25に接続を確立した後にメールサーバーにSOAPパケットを送信している可能性があります(接続を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 gitHeader.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の参照を更新します。あなたはそれを得るときプル要求を追加するのを忘れないでください...

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

、その後、メソッドを使用し、もちろん、そのようなSetAsmGroupsToDisplay

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

を呼び出し、ワーキング。

+0

これは答えです。本当にすごい、おい!私の人生を保存するためにありがとう! –

関連する問題