2012-02-10 36 views
13

Tôi đang cố truy xuất các mục trong Hộp thư đến từ một hộp thư cụ thể (trong đó tôi có quyền), sử dụng API được quản lý của Exchange Web Services. Tôi đã thử nghiệm mã đầu tiên bằng cách sử dụng địa chỉ email của riêng tôi thông qua AutodiscoverUrl, và nó hoạt động tốt. Tuy nhiên, khi tôi thử sử dụng địa chỉ email khác, EWS vẫn truy xuất các mục trong hộp thư đến của riêng mình. Đây có phải là do bộ nhớ cache hay gì đó không?Các mục hộp thư sai được truy xuất bằng API được quản lý của Exchange Web Services trong C#

Mã của tôi là như sau:

ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1); 
    ex.AutodiscoverUrl("[email protected]"); 

    FindItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10)); 

    foreach (Item item in findResults.Items) 
     Console.WriteLine(item.Subject); 

Trả lời

29

Địa chỉ e-mail trao cho AutodiscoverUrl không có gì để làm với hộp thư bạn đang ràng buộc vào.

Có (ít nhất) hai cách để nhận các mục trong hộp thư đến từ hộp thư của người dùng khác: Ủy quyền truy cập và mạo danh.

Nếu bạn có quyền truy cập đại biểu đến hộp thư người dùng khác, bạn có thể chỉ định các mailbox như một tham số trong cuộc gọi đến FindItems:

FindItemsResults<Item> findResults = ex.FindItems(
    new FolderId(WellKnownFolderName.Inbox, new Mailbox("[email protected]")), 
    new ItemView(10)); 

Nếu bạn có permissions to impersonate người sử dụng khác, bạn có thể mạo danh khác người sử dụng khi kết nối với EWS và cuộc gọi sau đây để FindItem sẽ làm việc trên hộp thư đến của người dùng mạo nhận:

ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1); 
ex.AutodiscoverUrl("[email protected]"); 
ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "[email protected]"); 
ItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10)); 

Disclaimer: tôi đã viết mã trên mà không thực sự thử nghiệm nó trên một máy chủ Exchange thực.

+1

Cảm ơn, vì tôi có quyền truy cập đại biểu (và không có quyền mạo danh), tôi đã thực hiện phương pháp tiếp cận đầu tiên của bạn và đã hoạt động! – communista

+1

Trình tiết kiệm! Cảm ơn! –

+0

Tôi mất quá nhiều thời gian để tìm ra điều này: 1) xác định bộ lọc bao gồm các hộp thư đích: 'Import-Module ActiveDirectory; get-aduser -filter * | trong đó {$ _. samaccountname -like "bob"} ', 2) tạo một phạm vi quản lý bao gồm các hộp thư đích' new-ManagementScope –Name bob_targetuser –RecipientRestrictionFilter {samaccountname -like "bob"} '; 3) gán phạm vi cho đối tượng ACL: 'New-ManagementRoleAssignment –Name appimpersonationrole –Role ApplicationImpersonation –User usernamethatisallowedImpersonzationrights –CustomRecipientWriteScope bob_targetuser' – mbrownnyc

11

nếu bạn muốn gửi email bằng cách sử dụng chỉ những người được ủy quyền mới có quyền lưu email trước khi gửi. nó sẽ thiết lập địa chỉ smtp được yêu cầu để gửi tin nhắn.

 ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 
     service.Credentials = new WebCredentials("user1", "1234", "domain.com"); 
     service.AutodiscoverUrl("[email protected]"); 

     EmailMessage email = new EmailMessage(service); 
     email.ToRecipients.Add("[email protected]"); 
     email.Subject = "HelloWorld"; 
     email.Body = new MessageBody("Sent by using the EWS Managed API"); 

     //save it first! 
     email.Save(new FolderId(WellKnownFolderName.Drafts, "[email protected]")); 

     email.Send(); 

i sử dụng nó để tránh lỗi này: "Khi đưa ra một yêu cầu như một tài khoản mà không có một hộp thư, bạn phải xác định hộp thư địa chỉ SMTP chính cho bất kỳ thư mục phân biệt Id"

+1

Tôi đang cố gửi một e-mail từ một tài khoản dùng chung mạo danh, nó không hoạt động với lỗi sau: "Tài khoản không có quyền mạo danh người dùng được yêu cầu". Tuy nhiên, trang web Exchange Online cho phép tôi gửi e-mail như người dùng được chia sẻ. Điều này đã làm tôi thất vọng cho đến khi tôi tìm thấy câu trả lời này, một cái gì đó khá giống với điều này làm việc cho những gì tôi đã cố gắng làm. Tiết kiệm đầu tiên là chìa khóa. Cảm ơn bạn. p.s. Tôi đang sử dụng Save rồi SendAndSaveCopy. –

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