私はc#.NET 4.0(私の開発ワークステーションはWindows 7)を使用してWindowsサービスを作成しています。 処理中にエラーが発生した場合は、サービスから直接電子メールを送信することを目的としています。 私は私が達成しようとしていますかを示すためにコードスニペットを含めました:Win7のWindowsサービスからSMTPメールを送信できません
try
{
string emailAddresses = "[email protected]";
string emailCCAddresses = "[email protected]";
//Send the email
using (MailMessage mailMsg = new MailMessage())
{
mailMsg.To.Add(emailAddresses);
mailMsg.From = new MailAddress("[email protected]");
mailMsg.CC.Add(emailCCAddresses);
mailMsg.Subject = " Error Message ";
mailMsg.Body = DateTime.Now + " : Invalid File Encountered." ;
////Creating the file attachment
using (Attachment data = new Attachment("C:\\users\\sample.xml", MediaTypeNames.Application.Octet))
{
//Add timestamp info for the file
ContentDisposition disposition = data.ContentDisposition;
disposition.ModificationDate = File.GetLastWriteTime("C:\\users\\sample.xml");
mailMsg.Attachments.Add(data);
SmtpClient emailClient = new SmtpClient("example.Sample.com", 25);
emailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
emailClient.UseDefaultCredentials = true;
emailClient.Send(mailMsg);
}
}//end using
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
私が直面しています問題がある - 電子メールオプションは、任意のWindows 7マシンで勝利サービスから動作しません。しかし、まったく同じコードは完全にうまくWin XPマシンで動作します。警告、これはコンソールアプリケーションとしてテストすることはできません。この動作を確認するには、サービスとして実行する必要があります。私はコンソールアプリケーションに同じコードを入れ、それは私の勝利7マシンで正常に働いた。
さらに、私はtelnetクライアントとサーバーウィンドウの機能を有効にし、コマンドプロンプトから電子メールを正常に送信できました。明示的NetworkCredentialの設定および= falseをUseDefaultCredentialsを設定
-
は、私は(何も働いていない)試してみて、原因を特定するためにいくつかのことを試してみました。 emailClient.Credentials = new System.Net.NetworkCredential( "username"、 "pwd"、 "Domain1");から、私のユーザーIDとPWD
- ザ・するとアドレスを電子メールで送信するには、サービスのオプションとしてログオンを変更するには、本物の、ダミーではないアドレス(ある私の実際のコードで!)
私が見つけることができる唯一の違いは、Windowsサービスがローカルシステムアカウントの下にインストールされていることです。しかしのログをに変更すると、コードに指定されている認証の詳細/資格情報が使用されているはずです。私のオフィスのIT担当者は、自分のメッセージがリレーとして送信されたことがわかりました(私のログインに更新されたときのアカウントとしてのfrom/toとログオンの意味はわかりません)
私が捕まる見る例外は次のとおりです。
SMTP例外がスローさ:System.Net.Mail.SmtpException:失敗メール送信します。 ---> System.Net.WebException:リモートサーバーに接続できません---> System.Net.Sockets.SocketException:アクセス許可XXX.XXX.XXXによって禁止されている方法でソケットにアクセスしようとしましたSystem.Net.ServicePoint.ConnectSocketInternal(ブールconnectFailure、ソケットS4、S6ソケット、ソケット&ソケットたIPAddress &アドレス、ConnectSocketState状態でSystem.Net.Sockets.Socket.DoConnect(エンドポイントendPointSnapshot、のSocketAddressのSocketAddress)で.XXX XX 、IAsyncResult asyncResult、Int32 timeout、例外&例外)
すべてのアイデアがありがとう!
私はそれがWindows 7のセキュリティポリシー/機能と関係があり、うまくいけばデフォルト設定を変更するように簡単かもしれないと感じています。
ファイアウォールを実行していますか?最初にスローされたSocketExceptionのメッセージ(「アクセス許可で禁止されている方法でソケットにアクセスしようとしました...」)のための簡単なGoogleでは、同じ問題を経験した多くの人々が、ファイアウォールソフトウェアは、ファイアウォールを無効にするか、またはその構成でそのサービスの許可ルールを追加することによって、メールを送信しているサービスを妨げていました。 – Iridium
私はそれについて考えました..しかし、私は、コンソールアプリケーション(同じコード、ちょうどサービスではない)とコマンドプロンプト経由でsmtp電子メールを送信することができました。また、Windows XPマシンでサービスを実行した同僚(同じチームとアクセス権)が電子メールを送信できました。私たちはITでチェックし、ブロックされていないことを彼らに伝えます。 – PreethaA
私はそれが問題の原因となっているサービスが実行されているアイデンティティーであると確信しています。彼らがXPとWin 7の間のデフォルトを変更したかどうかは分かりませんが、IISアプリケーションプールの場合はそれがわかりました。 –