2011-01-21 42 views

Trả lời

5
+1

Thats VBA, không phải C#. Tôi không thể dường như thấy rằng trong C# – electricsheep

+4

bạn có thể thử 'myEmailAddress = this.ActiveExplorer(). Session.CurrentUser.EmailAddress;' hoặc thử các giải pháp khác ở đây: http://social.msdn.microsoft.com/forums/en- US/vsto/thread/d2d9bf23-e27f-4f30-9199-42833d6919a4/ – acconrad

12

Tested trong VS 2010, .NET 4.0, Outlook 2010:

var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress; 
+3

Tại sao không rút ngắn nó thành var emailAddress = this.Application.Session.CurrentUser.AddressEntry.Address? Bạn cũng cần kiểm tra xem AddressEntry.GetExchangeUser có hợp lệ không - đối với người dùng không có Exchange trong hồ sơ, GetExchangeUser sẽ trả về null. –

+1

@DmitryStreblechenko, tôi đã cố tình viết nó theo hình thức dài để có thể thấy rõ nó xuất phát từ đâu. Đồng thời, tôi cố tình trả lời nó với số dòng mã tối thiểu. Tôi để nó cho OP để viết mã phòng thủ trong bối cảnh của ứng dụng của anh ta/cô ấy. –

+0

Làm việc hoàn hảo;) –

0

Hãy thử outlookObject.ActiveExplorer().Session.CurrentUser.Address. Làm việc cho tôi trên VS10, Outlook 2007, .NET 4.0

0

Bất cứ ai đi ngang qua, tôi muốn mạnh mẽ những lời khuyên sử dụng Application.Session.CurrentUser.AddressEntry.Address thay vì bất cứ điều gì bằng Application.ActiveExplorer().Session, như ActiveExplorer() có thể trả về một NullReferenceException, ví dụ khi mở một email thông qua Outlook.

2

Nếu bạn đang sử dụng máy chủ POP/IMAP thông thường, bạn sẽ nhận được địa chỉ e-mail với: Application.Session.CurrentUser.AddressEntry.Address;

Với Exchange Server, bạn nhận được địa chỉ e-mail với: Application.Session.CurrentUser.AddressEntry.GetExchangeUser(). PrimarySmtpAddress;

5

Phụ thuộc vào định nghĩa "địa chỉ người dùng hiện tại".

  1. Địa chỉ của tài khoản chính trong Outlook có thể được truy xuất từ ​​Appication.Session.CurrentUser (trả về đối tượng Recipient). Sử dụng tài sản Recipient.Address. Tuy nhiên, lưu ý rằng đối với tài khoản Exchange (Recipient.AddressEntry.Type == "EX"), bạn sẽ nhận được một địa chỉ loại EX. Để truy xuất địa chỉ SMTP, hãy sử dụng Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress. Hãy chuẩn bị để xử lý null/ngoại lệ trong trường hợp lỗi.

Trên bình diện MAPI Extended (C++ hay Delphi), sử dụng IMAPISession::QueryIdentity (bạn có thể kiểm tra nó trong OutlookSpy - bấm nút IMAPISession, sau đó QueryIdentity). Sau đó, bạn có thể đọc thuộc tính PR_ADDRTYPE ("EX" so với "SMTP") và PR_EMAIL_ADDRESS (khi PR_ADDRTYPE = "SMTP") hoặc (trong trường hợp Exchange) PR_SMTP_ADDRESS (không đảm bảo có mặt) và PR_EMS_AB_PROXY_ADDRESSES (thuộc tính đa giá trị sẽ trao đổi địa chỉ, bao gồm tất cả địa chỉ proxy (bí danh)).

  1. Trong trường hợp có nhiều tài khoản trong cấu hình, bạn có thể gửi hoặc nhận email qua nhiều tài khoản. Trong trường hợp đó, hãy sử dụng MailItem.SendUsingAccount (trả về đối tượng Account, có thể là null - trong trường hợp đó sử dụng Application.Session.CurentUser). Điều này hợp lệ cho cả việc nhận, gửi hoặc gửi email được soạn (Application.ActiveInspector.CurrentItem hoặc Application.ActiveExplorer.ActiveInlineResponse).

  2. Tất cả tài khoản trong một hồ sơ nhất định có thể được truy cập bằng cách sử dụng bộ sưu tập Namespace.Accounts(Application.Session.Accounts). Có thể truy cập địa chỉ của tài khoản bằng cách sử dụng thuộc tính Account.SmtpAddress. Lưu ý rằng Mô hình đối tượng Outlook chỉ hiển thị các tài khoản thư. Một số tài khoản cửa hàng (chẳng hạn như PST) không có trong bộ sưu tập vì chúng không có bản sắc người dùng nội tại ngay cả khi một số tài khoản khác (như POP3/SMTP) có thể gửi đến cửa hàng đó. Nếu bạn muốn truy cập tất cả các tài khoản, bạn có thể sử dụng RedemptionRDOSession của nó.Thu thập tài khoản (RDOAccounts đối tượng).

Trên cấp MAPI mở rộng, tài khoản được hiển thị thông qua giao diện IOlkAccountManager. Bạn có thể chơi với nó trong OutlookSpy nếu bạn nhấp vào nút IOlkAccountManager.

  1. Trong trường hợp ủy quyền các cửa hàng Exchange, chủ cửa hàng không được hiển thị thông qua Mô hình đối tượng Outlook. Bạn có thể sử dụng mở rộng MAPI (lưu ý rằng tài sản PR_MAILBOX_OWNER_ENTRYID chỉ được tiếp xúc bởi các cửa hàng trực tuyến, nó không có sẵn trong một cửa hàng lưu trữ). Bạn có thể phân tích cú pháp ID mục nhập cửa hàng Exchange và trích xuất địa chỉ loại EX từ nó. Sau đó bạn có thể xây dựng id mục nhập đối tượng GAL cho địa chỉ EX. Bạn cũng có thể truy cập chủ sở hữu cửa hàng bằng cách sử dụng Redemption và đối tượng RDOExchangeMailboxStore của nó và thuộc tính Owner của nó.
+0

Trong trường hợp nếu cuộc hẹn được tạo trong lịch, có cách nào để sử dụng OOM để tìm hiểu tài khoản email nào sẽ được liên kết với nó không? I E. để ánh xạ lịch vào tài khoản khi chúng tôi có nhiều tài khoản trong tiểu sử. – Alex

+0

Không chắc chắn, hãy đọc phần bổ nhiệm Parent property, đưa nó vào đối tượng Folder, đọc thuộc tính Folder.Store. Lặp lại bộ sưu tập Namespace.Accounts và so sánh giá trị của thuộc tính Account.DeliveryStore.EntryID với id mục nhập của id mục nhập cửa hàng mẹ của cuộc hẹn. –

+0

Cảm ơn! Trong khi đó, tôi thấy rằng AppointmentItem vừa tạo đã chứa một người nhận trong bộ sưu tập người nhận của nó và người nhận này có email tôi cần (để người tổ chức đã được khởi tạo). Trông giống như một phương pháp dễ dàng hơn (cho công việc cụ thể này). Hoặc có bất kỳ hạn chế nào của phương pháp này không? Nó được cung cấp rằng các cuộc hẹn trong câu hỏi được tạo ra bởi mã của riêng tôi vì vậy tôi không phải đối phó với các trường hợp khi cuộc hẹn đã tồn tại và danh sách người nhận của nó có thể không mặc định và không thể dựa vào. – Alex

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