2012-03-20 67 views
5

Tôi đang viết dịch vụ Windows bằng cách sử dụng C# .NET 4.0 (máy trạm phát triển của tôi là Windows 7). Mục đích là gửi email trực tiếp từ dịch vụ trong trường hợp có lỗi trong quá trình xử lý. tôi đã bao gồm một đoạn mã để hiển thị những gì tôi đang cố gắng để đạt được:Không thể gửi email SMTP từ dịch vụ windows trên Win7

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()); 
      } 

Vấn đề tôi đang phải đối mặt là - tùy chọn email không hoạt động từ một dịch vụ giành chiến thắng trên bất kỳ cửa sổ 7 máy. Tuy nhiên chính xác cùng một mã sẽ làm việc trên một máy Win XP hoàn toàn tốt. Hãy cẩn thận, điều này không thể được kiểm tra như một ứng dụng giao diện điều khiển. Nó cần phải được chạy như một dịch vụ để xem hành vi. Tôi đặt cùng một mã trong một ứng dụng giao diện điều khiển và nó hoạt động tốt trên máy win 7 của tôi.

Ngoài ra, tôi đã bật tính năng cửa sổ máy khách và máy chủ telnet và có thể gửi email qua lời nhắc lệnh thành công.

Tôi đã thử một vài điều để thử và cô lập các nguyên nhân (không làm việc) -

  • Thiết lập NetworkCredential một cách rõ ràng và thiết lập UseDefaultCredentials = false. emailClient.Credentials = new System.Net.NetworkCredential ("tên người dùng", "pwd", "Domain1");

  • thay đổi Log On Như lựa chọn của dịch vụ là userid của tôi và pwd

  • Các From và To địa chỉ email được xác thực, chứ không phải địa chỉ giả (trong mã thật của tôi đó là!)

Sự khác biệt duy nhất tôi có thể tìm thấy là dịch vụ Windows được cài đặt trong tài khoản hệ thống cục bộ. Nhưng việc thay đổi đăng nhập sẽ khiến nó sử dụng chi tiết xác thực của tôi/thông tin đăng nhập được chỉ định trong mã. Anh chàng CNTT trong văn phòng của tôi nói rằng sự khác biệt duy nhất anh thấy là thông điệp của tôi đã được gửi như một chuyển tiếp (không chắc chắn điều này có nghĩa là từ/đến và đăng nhập như tài khoản khi cập nhật thông tin đăng nhập của tôi không thay đổi kết quả)

ngoại lệ tôi thấy bị bắt là:

SMTP Ngoại lệ ném: System.Net.Mail.SmtpException: Không gửi thư. ---> System.Net.WebException: Không thể kết nối với máy chủ từ xa ---> System.Net.Sockets.SocketException: Một nỗ lực đã được thực hiện để truy cập vào một socket theo cách bị cấm bởi quyền truy cập của nó XXX.XXX.XXX .XXX XX tại System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) tại System.Net.ServicePoint.ConnectSocketInternal (Boolean connectFailure, Socket s4, Socket s6, Socket & socket, IPAddress & address, ConnectSocketState state , IAsyncResult asyncResult, Int32 timeout, Exception & exception)

Bất kỳ ý tưởng nào được đánh giá cao!

Tôi cảm thấy nó phải làm với một cửa sổ 7 chính sách bảo mật/tính năng và hy vọng có thể đơn giản như thay đổi một thiết lập mặc định.

+0

Bạn có chạy tường lửa nào không? Google nhanh chóng cho thông điệp về SocketException được khởi đầu ("Một nỗ lực đã được thực hiện để truy cập vào socket theo cách bị cấm bởi quyền truy cập của nó ...") gợi ý rằng một số người đã gặp phải cùng một vấn đề xác định rằng phần mềm tường lửa đã ngăn chặn dịch vụ gửi thư và giải quyết nó bằng cách vô hiệu hóa tường lửa hoặc thêm quy tắc cho phép đối với dịch vụ của họ trong cấu hình của nó. – Iridium

+0

tôi đã nghĩ về điều đó .. Nhưng tôi đã có thể gửi email smtp thông qua một ứng dụng giao diện điều khiển (cùng một mã, chỉ cần không phải là một dịch vụ) và thông qua dấu nhắc lệnh. Đồng thời, đồng nghiệp của tôi (cùng một nhóm và quyền truy cập), người điều hành dịch vụ trên máy tính Windows của mình, có thể gửi email. Chúng tôi đã kiểm tra với CNTT và họ cho chúng tôi biết chúng tôi không bị chặn. – PreethaA

+0

Tôi sẽ đặt cược rằng đó là danh tính mà dịch vụ đang chạy đang gây ra sự cố. Tôi không biết nếu họ thay đổi mặc định giữa XP và Win 7, nhưng tôi biết họ đã làm cho hồ bơi ứng dụng IIS. –

Trả lời

0

Tôi thấy chính sách bảo mật trên máy tính xách tay công việc mới của chúng tôi và bộ phận CNTT từ chối cho phép chúng tôi thay đổi nó. Máy chủ thử nghiệm của chúng tôi không có cùng một vấn đề, của ourse nó không phải là cửa sổ 7 hoặc vì vậy tôi không thể chắc chắn 100%. Hãy thử gửi email thông qua dòng lệnh để xem nếu smtp được cho phép từ máy của bạn.

Cùng mã làm việc chạy tốt whn trên win xp hoặc cửa sổ máy chủ mà không hav bất kỳ hạn chế

1

Bạn có thể chạy dịch vụ như người dùng hiện hành. Chỉ cần chọn tùy chọn USER trong trình cài đặt dịch vụ và nó sẽ hoạt động như người dùng hiện tại. Tôi đã gặp lỗi tương tự ngày hôm nay và tôi đã tìm thấy giải pháp này. Tôi hy vọng nó sẽ hữu ích cho bất cứ ai. enter image description here

Các vấn đề liên quan