Tôi có một Outlook thêm bằng văn bản trong C#.Nhận địa chỉ email của người dùng hiện tại trong Outlook 2007
Tôi đã tự hỏi làm cách nào hoặc liệu tôi có thể lấy địa chỉ email của người dùng hiện tại không?
Cảm ơn
Tôi có một Outlook thêm bằng văn bản trong C#.Nhận địa chỉ email của người dùng hiện tại trong Outlook 2007
Tôi đã tự hỏi làm cách nào hoặc liệu tôi có thể lấy địa chỉ email của người dùng hiện tại không?
Cảm ơn
Sử dụng Namespace.CurrentUser
: http://msdn.microsoft.com/en-us/library/bb220041(v=office.12).aspx
Tested trong VS 2010, .NET 4.0, Outlook 2010:
var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
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. –
@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. –
Làm việc hoàn hảo;) –
Hãy thử outlookObject.ActiveExplorer().Session.CurrentUser.Address
. Làm việc cho tôi trên VS10, Outlook 2007, .NET 4.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.
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;
Phụ thuộc vào định nghĩa "địa chỉ người dùng hiện tại".
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)).
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
).
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 Redemption và RDOSession 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.
Owner
của nó.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
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. –
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
Thats VBA, không phải C#. Tôi không thể dường như thấy rằng trong C# – electricsheep
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