私は最近、SQLデータベースから情報を取得し、結果を含むHTMLページを作成して、それを自動電子メールで送信するプログラムをC#で設計しました。私はすべてが[散発的に]機能しています。私が抱えている問題は、会社のExchangeサーバーがクラッシュしているように見えることです。プログラムの最初の数回の実行が成功した後、次の例外が発生し始めます。
基本例外:System.Net.Mail.SmtpException:システムストレージが不十分です。サーバーの応答は次のとおりです。4.3.1不十分なシステムリソース
メーリングでDispose()のようなメソッドを呼び出す必要があるかどうか疑問に思っていますか?または、メールシステムの応答を停止させる他の明らかな理由がある場合はどうなりますか?これは、私のコードだけでなく、当社のすべてのクライアントに影響します。
これはExchange2010であり、私のコードは.NET3.5に対してコンパイルされています。私の添付ファイルは通常27kbです。Exchangeサーバーにログインすると、メッセージが無期限にキューに残っているように見えます。キューをクリアし(NDRを送信せずに削除)、サーバーを再起動すると、キューが再び実行されます。
郵送部分は次のようになります(ユーザー名、パスワード、アドレスが変更されました)。
public void doFinalEmail()
{
List<string> distList = new List<string>();
string distListPath = Environment.CurrentDirectory + "\\DistList.txt";
string aLine;
logThat("Attempting email distribution of the generated report.");
if (File.Exists(distListPath))
{
FileInfo distFile = new FileInfo(distListPath);
StreamReader distReader = distFile.OpenText();
while (!String.IsNullOrEmpty(aLine = distReader.ReadLine()))
{
distList.Add(aLine);
}
}
else
{
logThat("[[ERROR]]: Distribution List DOES NOT EXIST! Path: " + distListPath);
}
MailMessage msg = new MailMessage();
MailAddress fromAddress = new MailAddress("emailaddresshere");
msg.From = fromAddress;
logThat("Recipients: ");
foreach (string anAddr in distList)
{
msg.To.Add(anAddr);
logThat("\t" + anAddr);
}
if (File.Exists(Program.fullExportPath))
{
logThat("Attachment: " + Program.fullExportPath);
Attachment mailAttachment = new Attachment(Program.fullExportPath);
msg.Attachments.Add(mailAttachment);
string subj = "Company: " + Program.yestFileName;
msg.Subject = subj;
msg.IsBodyHtml = true;
msg.BodyEncoding = System.Text.Encoding.UTF8;
sendMail(msg);
}
else
{
logThat("[[ERROR]]: ATTACHMENT DOES NOT EXIST! Path: " + Program.fullExportPath);
}
}
public void sendMail(MailMessage msg)
{
try
{
string username = "user"; //domain user
string password = "pass"; // password
SmtpClient mClient = new SmtpClient();
mClient.Host = "192.168.254.11";
mClient.Credentials = new NetworkCredential(username, password);
mClient.DeliveryMethod = SmtpDeliveryMethod.Network;
mClient.Send(msg);
}
catch (Exception oops)
{
string whatHappened = String.Format("Company: \r\nFailure in {0}! \r\n\r\nError message: {1} \r\nError data: {2} \r\n\r\nStack trace: {3} \r\n\r\nBase exception: {4} \r\nOccuring in method: {5} with a type of {6}\r\n", oops.Source, oops.Message, oops.Data, oops.StackTrace, oops.GetBaseException(), oops.TargetSite, oops.GetType());
logThat(whatHappened);
Environment.Exit(1);
}
}