2017-09-25 22 views
0

こんにちは私は基本的に特定の日に存在するx個の電子メールを返すクエリを実行していますが、sendgridのapiを使用してこれらの電子メールすべてに電子メールを送信したいのですが、以下に列挙されたエラーの多くは、誰かが光を放つことができるだろうか?Azure関数SendGrid

[コード]

**#r "System.Data" 
#r "SendGrid" 

using System; 
using System.Data; 
using SendGrid.Helpers.Mail; 

using System.Data.SqlClient; 
using System.Text.RegularExpressions; 
using Microsoft.SqlServer.Server; 
using SendGrid; 

     private SqlConnection conn = null; 
     private SqlDataAdapter da = null; 
     private SqlCommandBuilder cb = null; 
     private DataSet ds = null; 
     private String location = null; 

public void Run(TimerInfo myTimer, TraceWriter log) 
    { 
     log.Info($"C# Timer trigger function executed at: {DateTime.Now}"); 
     string connStr = "Data Source=sdc-hwsb.database.windows.net;Initial Catalog=SDC-HotelWSBooking;Integrated Security=False;User ID=sdchwsb;Password=Trivago17!;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; 
     SqlConnection conn = new SqlConnection(connStr); 
     conn.Open(); 
     string query = "SELECT email FROM dbo.test_bookings2 WHERE startDate = @startDate"; 
     SqlCommand cmd = new SqlCommand(query, conn); 
     cmd.Parameters.AddWithValue("@startDate", DateTime.Today.ToShortDateString()); 
     int k = 0; 
     int f = Convert.ToInt32(cmd.ExecuteNonQuery()); 
     while (f > 0 & k < f) 
     { 
      conn = new SqlConnection(connStr); 
      da = new SqlDataAdapter(query, conn); 
      cb = new SqlCommandBuilder(da); 
      ds = new DataSet(); 
      da.Fill(ds); 
      String Email = Convert.ToString(ds.Tables[0].Rows[k]); 
      Run1(Email,message); 
      k++; 

     } 

    } 


    public static void Run1(string email, out Mail message) 
{ 
     message = new Mail 
     {   
     Subject = "Azure news"   
    }; 
var personalization = new Personalization(); 
// change to email of recipient 
personalization.AddTo(new Email(email)); 

Content content = new Content 
{ 
    Type = "text/plain", 
    Value = "DD" 
}; 
message.AddContent(content); 
message.AddPersonalization(personalization); 

}

** 

Iがメッセージオブジェクトsendgridにrefferingエラーのような使用されて取得しています:

2017-09-25T18:50:37.754 Function started (Id=067b32b9-7bc3-47ca-9f32-b8b92c3b57e9) 
2017-09-25T18:50:37.770 Function compilation error 
2017-09-25T18:50:37.770 run.csx(38,28): error CS0103: The name 'message' does not exist in the current context 
2017-09-25T18:50:37.807 Exception while executing function: Functions.TimerTriggerCSharp1. Microsoft.Azure.WebJobs.Script: Script compilation failed. 
2017-09-25T18:50:37.948 Function completed (Failure, Id=067b32b9-7bc3-47ca-9f32-b8b92c3b57e9, Duration=196ms) 

答えて

0

これらのエラーの一部は、コンパイルされていますエラー - 最初に修正します。たとえば、28行目に ')'がありません。

Visual Studioで関数を作成することもできます。これは、C#インテリセンスとエラーチェック機能を備えた実際のIDEの機能を提供します。それは上記のエラーをキャッチします。それはあなたの関数が簡単ではないとすぐに役立ちます。ここをクリックしてください: https://blogs.msdn.microsoft.com/appserviceteam/2017/08/14/azure-functions-tools-released-for-visual-studio-2017-update-3/

SendGridバインディングはRun()関数上にある必要があります。

public void Run(TimerInfo myTimer, TraceWriter log, out Mail message) 

次に、Run1はメッセージを生成するための内部ヘルパーに過ぎません。

複数のメッセージを送信する必要がある場合は、ICollector/IAsyncCollectorを使用します。それには「追加」メソッドがあります。次のようにマイク・Sが使用ICollectorを介して複数の電子メールを送信について説明したように

+0

私はそれらを修正しました../ @MikeS – rahulchawla

+0

それらのすべてではありません:)あなたのコードのC#コンパイルエラーについてはまだ教えています。 38行目の 'message'の使用は不正です。 –

+0

これはsendgridオブジェクトです。これは私がバインドするために使用しているドキュメントですhttps://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-sendgrid – rahulchawla

1

が、私は公式の文書についてSendGrid output bindingを確認し、任意のサンプルを見つけられませんでした、そして私は、この機能をテストするためにQueue output sample in C#からのコードサンプルを追っ:

run.csx

#r "SendGrid" 

using System; 
using SendGrid.Helpers.Mail; 

public static void Run(TimerInfo myTimer, TraceWriter log, ICollector<Mail> mails) 
{ 
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}"); 

    for(int i=0;i<3;i++) 
    { 
     Mail message = new Mail() 
     { 
      Subject = $"Hello world from the SendGrid C# TimerTrigger!" 
     }; 

     var personalization = new Personalization(); 
     personalization.AddTo(new Email("the-email-address-of-recipient")); 

     Content content = new Content 
     { 
      Type = "text/plain", 
      Value = $"Hello world!{i}" 
     }; 

     message.AddContent(content); 
     message.AddPersonalization(personalization); 
     mails.Add(message); 
    } 
} 

function.json

{ 
    "bindings": [ 
    { 
     "name": "myTimer", 
     "type": "timerTrigger", 
     "direction": "in", 
     "schedule": "0 */5 * * * *" 
    }, 
    { 
     "type": "sendGrid", 
     "name": "mails", 
     "apiKey": "sendgrid-apikey", 
     "direction": "out", 
     "from":"<the-email-address-of-sender>" 
    } 
    ], 
    "disabled": false 
} 

結果:

enter image description here

また、VS2017を経由して機能のクラスライブラリプロジェクトを作成するために、あなたがSendGrid出力については、このtutorialを参照することができます。

関連する問題