質問に記載されているこのタイプのプログラムを作成しようとしています。私は悲惨に失敗し、msdnやgoogleで運が無ければ私はStackOverflowの知性的な心を求めています。私のコードはそれを読むことに興味がある人のために以下にあります。URLがダウンした場合に電子メール通知を送信するプログラム
私はこのプログラムを実行しているときに、それがアクティブで正常に動作しているかどうかを確認するためにURLを読みたいと思います。そうでなければ、私は悪い返答を得て、誰かにそのウェブサイトがダウンしていることを知らせる電子メールが送信されます。
これは、C#と3.5netのVisual Studio 2010です。プログラムは、SQL Server 2008から自分のデータベースから情報(URLおよび電子メールアドレス)を読み取っています。データベースは、HttpResponse(OKまたはNOTOK)ごとに読み取ったサイトに基づいて情報を更新します。ウェブサイトがNOTOKの場合、電子メールが送信されます。私は、XOUlitities.Emailのダイレクトリンクライブラリを使用しています。
主な問題は、動作しないと私は理由がない理由です。それは外出し、ウェブサイトを読んで戻ってきますが、私は電子メールを受け取りません。 私の質問は、電子メール機能のための簡単な方法はありますか? XOUtilitiesのDLLを使わなくても、コマンド全体をプログラムの中に書くことはできますか?私は基本的にアドバイスを探しています。 .exeを実行すると、エラーは発生しませんが、問題は電子メール機能内で発生する可能性があります。誰かがこの問題に関してどんな光を放つことができれば、それは素晴らしいことでしょう。前もって感謝します!
using System;
using System.Collections.Generic;
using System.Text;
using XOUtilities;
using System.Web;
using System.Net;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.IO;
namespace WebsiteStatusCheck
{
class Program
{
static string errorMsg;
static void Main(string[] args)
{
string connectionString = ConfigurationManager.AppSettings["ConnectionString"];
string tableName = ConfigurationManager.AppSettings["WebsiteListTableName"];
string mailServer = ConfigurationManager.AppSettings["MailServer"];
string replyToEmail = ConfigurationManager.AppSettings["ReplyToEmail"];
string query = "SELECT * FROM " + tableName;
SqlDataAdapter sDA = new SqlDataAdapter(query, connectionString);
DataTable table = new DataTable();
sDA.Fill(table);
string[][] websites = new string[table.Rows.Count][];
int i = 0;
table.Columns.Add("isSiteAlive");
table.Columns.Add("isDBAlive");
foreach (DataRow row in table.Rows)
{
string[] temp = CheckURL(row["URL"].ToString());
row["isSiteAlive"] = temp[0];
row["isDBAlive"] = temp[1];
}
XOUtilities.Email email = new XOUtilities.Email();
email.fromAddress = replyToEmail;
email.server = mailServer;
email.subject = "Website needs IMMEDIATE action";
email.isHtml = true;
email.body = @"The following website looks to be down:<br /><br /><table><tr><th>URL</th><th>Website</th><th>Database</th>";
foreach(DataRow row in table.Rows)
{
if (row["isSiteAlive"].ToString().Trim() != "OK" || row["isDBAlive"].ToString().Trim() != "OK")
{
string tempbody = email.body;
email.body += @"<tr><td><center>" + row["URL"].ToString() + @"</center></td><td><center>" + row["isSiteAlive"].ToString() + @"</center></td><td><center>" + row["isDBAlive"].ToString() + @"</center></td></tr>";
email.toAddresses = row["EMAILS_CSV"].ToString().Split(new char[] { ',' });
email.SendEmail();
email.body = tempbody;
}
}
}
//string[0] = website value
//string[1] = database value
static string[] CheckURL(string url)
{
string[] ret = new string[2];
try
{
WebClient client = new WebClient();
Stream resp = client.OpenRead(url);
StreamReader reader = new StreamReader(resp);
string result = reader.ReadToEnd();
ret[0] = "OK";
ret[1] = result;
}
catch (WebException e)
{
errorMsg = e.Status.ToString();
if (e.Status == WebExceptionStatus.ProtocolError)
{
errorMsg = ((HttpWebResponse)e.Response).StatusDescription;
}
ret[0] = errorMsg;
ret[1] = "unreachable";
}
catch (Exception e)
{
errorMsg = e.Message;
ret[0] = errorMsg;
ret[1] = "unreachable";
}
return ret;
}
}
}
これまでデバッグに関して何を試しましたか?あなたはデバッガのコードを熟読しましたか?はいの場合は、すべての点が確実に機能するようになるまでデバッガコンソールウィンドウにエラーメッセージはありますか? – dgvid
電子メールに['SmtpClient'](http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient%28v=VS.90%29.aspx)を使用していない理由パート? – Yahia
このライブラリは、電子メールにjava libまたは.net libを送信するライブラリです。文字列の演算子オーバーロードを使用するC#コード内でも使用できます。StringBuilderを使用して複雑な文字列を作成することをお勧めします。私の意見では、どのバージョンの.NETがbtwを使用しているのですか? – MethodMan