2012-04-16 2 views
0

私は特定のディレクトリをスキャンして特定のサイズを超えるファイルを探すアプリケーションを持っています。それを検出すると、特定のファイルが特定のサイズ制限に達したことを示す警告メールを送信します。私の問題は、現在のプログラムがファイルごとに1つの電子メールを送信することです。 10以上のファイルが限界を超えている場合は、10個のメールを送信します。 ?必要であれば、それは、ファイルのすべてをコンパイル作り、単一の電子メールでそれらのファイルのリストを送信するためにどのようにここに私のコードは次のとおりです。ファイル名のリストを1つのリストに保存して電子メールで送信するにはどうすればいいですか?

private void Form1_Load(object sender, EventArgs e) 
    { 
     count = 0; 
     timer = new Timer(); 
     timer.Interval = 1000; 
     timer.Tick += new EventHandler(timer1_Tick); 
     timer.Start(); 


     List<string> s1 = System.IO.Directory.GetFiles(@"F:\gdimaging\data", "*.*", SearchOption.AllDirectories).ToList<string>(); 
     s1.AddRange(System.IO.Directory.GetFiles(@"F:\hios\DATA", "*.*", SearchOption.AllDirectories).ToList<string>()); 
     s1.AddRange(System.IO.Directory.GetFiles(@"F:\imgviewer\data", "*.*", SearchOption.AllDirectories).ToList<string>()); 
     s1.AddRange(System.IO.Directory.GetFiles(@"F:\newcnas\data", "*.*", SearchOption.AllDirectories).ToList<string>()); 
     s1.AddRange(System.IO.Directory.GetFiles(@"F:\newpod\data", "*.*", SearchOption.AllDirectories).ToList<string>()); 
     s1.AddRange(System.IO.Directory.GetFiles(@"F:\OMS\data", "*.*", SearchOption.AllDirectories).ToList<string>()); 
     s1.AddRange(System.IO.Directory.GetFiles(@"F:\WEBIMG", "*.*", SearchOption.AllDirectories).ToList<string>()); 


     dt.Columns.Add("File_Name"); 
     dt.Columns.Add("File_Type"); 
     dt.Columns.Add("File_Size"); 
     dt.Columns.Add("Create_Date"); 
     ArrayList fileList = new ArrayList();  
     foreach(string s in s1) 
     { 
      try 
      { 
       FileInfo info = new FileInfo(s); 
       FileSystemInfo sysInfo = new FileInfo(s); 
       dr = dt.NewRow(); 
       //System.Collections.Generic.List<string> nameList; 
       dr["File_Name"] = sysInfo.Name; 
       dr["File_Type"] = sysInfo.Extension; 
       dr["File_Size"] = (info.Length/1024).ToString(); 
       dr["Create_Date"] = sysInfo.CreationTime.Date.ToString("dd/MM/yyyy"); 
       dt.Rows.Add(dr); 


       if ((info.Length/1024) > 1500000) 
       { 
        fileList.Add(sysInfo.Name); 
       } 

       if (dt.Rows.Count > 0) 
       { 
        dataGridView1.DataSource = dt; 
       } 
      } 
      catch (UnauthorizedAccessException ex) 
      { 
       MessageBox.Show("Error : " + ex.Message); 
       continue; 
      } 

     } 

     MessageBox.Show(fileList + "overlimit!!"); 

}

+0

あなたが書き留めた電子メールとパスワードは実際の場合がありますか? – Tarik

+0

em ??実際のものはありません。 –

答えて

1

はboolean型を返すpublicメソッド/属性を持つクラス でメールオプションをカプセル化:このような

何かを - - テキストエディタでMacで行われたようにチェックされていません

private void Form1_Load(object sender, EventArgs e) 
{ 
    count = 0; 
    timer = new Timer(); 
    timer.Interval = 1000; 
    timer.Tick += new EventHandler(timer1_Tick); 
    timer.Start(); 


    List<string> s1 = System.IO.Directory.GetFiles(@"F:\gdimaging\data", "*.*", SearchOption.AllDirectories).ToList<string>(); 
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\hios\DATA", "*.*", SearchOption.AllDirectories).ToList<string>()); 
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\imgviewer\data", "*.*", SearchOption.AllDirectories).ToList<string>()); 
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\newcnas\data", "*.*", SearchOption.AllDirectories).ToList<string>()); 
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\newpod\data", "*.*", SearchOption.AllDirectories).ToList<string>()); 
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\OMS\data", "*.*", SearchOption.AllDirectories).ToList<string>()); 
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\WEBIMG", "*.*", SearchOption.AllDirectories).ToList<string>()); 

    //s1 = Directory.GetFiles(@"F:\gdimaging\data", "*.*"); 
    dt.Columns.Add("File_Name"); 
    dt.Columns.Add("File_Type"); 
    dt.Columns.Add("File_Size"); 
    dt.Columns.Add("Create_Date"); 
    // new mail list class 
    class mailList { 
    public bool isEmpty = true; 
    MailMessage mailMessage; 
    // do all the onceonly stuff in the constructor 
     public mailList(){ 
      mailMessage = new MailMessage(); 
      mailMessage.To.Add(new MailAddress("[email protected]")); 
      mailMessage.To.Add(new MailAddress("[email protected]")); 
    // set subject 
      mailMessage.Subject = "FILE SIZE WARNING MESSAGE"; 
      // Identify the credentials to login to the gmail account 
      string sendEmailsFrom = "[email protected]"; 
        // password below is written in * to encrypt it 

      string sendEmailsFromPassword = "***4556**"; 
      NetworkCredential cred = new NetworkCredential(sendEmailsFrom, sendEmailsFromPassword); 
      SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587); 
      mailClient.EnableSsl = true; 
      mailClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
      mailClient.UseDefaultCredentials = false; 
      mailClient.Timeout = 20000; 
      mailClient.Credentials = cred; 
      mailMessage.IsBodyHtml = true; 
      mailMessage.From = new MailAddress("[email protected]", "Shahrul Nizam"); 

     } 
     public addFile(String fileName){ 
      mailMessage.Body = mailMessage.Body + sysInfo.Name+ "HAS REACH ITS SIZE LIMIT."; 
      isEmpty = false; 
     } 
     public send(){ 
      mailClient.Send(mailMessage); 
      MessageBox.Show("Email Notification Sent!"); 
     } 
    } 

    } 
    try 
     { 
     mailList ml = new mailList(); 
     foreach(string s in s1) 
      { 
       FileInfo info = new FileInfo(s); 
       FileSystemInfo sysInfo = new FileInfo(s); 
       dr = dt.NewRow(); 
      //System.Collections.Generic.List<string> nameList; 
       dr["File_Name"] = sysInfo.Name; 
       dr["File_Type"] = sysInfo.Extension; 
       dr["File_Size"] = (info.Length/1024).ToString(); 
       dr["Create_Date"] = sysInfo.CreationTime.Date.ToString("dd/MM/yyyy"); 
       dt.Rows.Add(dr); 


       if ((info.Length/1024) > 1500000) 
       { 
        ml.addFile(sysInfo.Name); 

        if (dt.Rows.Count > 0) 
        { 
        dataGridView1.DataSource = dt; 
        } 

       } 
       if(ml.isEmpty==false){ 
        ml.Send(); 
       } 
      } 
    catch (UnauthorizedAccessException ex) 
    { 
     MessageBox.Show("Error : " + ex.Message); 
     continue; 
    } 

} 
+0

提案のために@Paddyに感謝します。しかし、自分のコードを編集してもよいでしょうか。私はArrayListを使用しようとし、それが動作するかどうかをテストするためだけに電子メールを送信する代わりにMessageBoxを使用します。 ArrayListを使用すると、プログラムを実行すると、System.Collection.Arraylistがオーバーレイされてメッセージがポップアップします。 ファイル名をポップアップするが、そうでなかったとします。私に何が間違っているのか指摘できますか? –

+0

あなたは配列リストの制限を破っているかもしれません。おそらくあなたのループに問題があり、それは多すぎる行を返しています。おそらくArrayListの容量とIsFixedSizeプロパティをチェックしてからcountプロパティを実行します。 –

+0

ArrayListには限界がありますか?私はちょうど約10 +ファイルのサイズ制限を超えるファイルを格納するために、リストを使用します。 –

1

あなたはforeachループでファイルサイズを確認した後、特定の制限を超えるファイルを別の配列に追加し、for-loopの外にあるメッセージ本体の配列要素に追加します。ファイルのいずれかが基準を満たしており、基準が満たされた場合のみ、メール操作を実行する場合

+0

ちょっと意見を伺うには、私のコードの一部をループの外側に送る電子メールを移動してから、ファイルサイズのチェックの中でifを使って、サイズを超えるファイルをすべてリストに追加してから電子メールを送信するためにリストを使用するだけです(申し訳ありません、私はまだプログラミングに新しいです) –