2011-01-21 20 views
16

मेरे पास C# में लिखा गया एक आउटलुक जोड़ें।Outlook 2007 में वर्तमान उपयोगकर्ता का ईमेल पता प्राप्त करें

मैं सोच रहा था कि वर्तमान उपयोगकर्ता का ईमेल पता कैसे प्राप्त किया जा सकता है या नहीं?

धन्यवाद

उत्तर

5
+1

हालांकि वीबीए था, सी # नहीं। मुझे लगता है कि सी # – electricsheep

+4

में आप 'myEmailAddress = this.ActiveExplorer()। सत्र .CurrentUser.EmailAddress;' या अन्य समाधानों को आजमाएं: http://social.msdn.microsoft.com/forums/en- यूएस/vsto/thread/d2d9bf23-e27f-4f30-9199-42833d6919a4/ – acconrad

12

वी.एस. 2010 में परीक्षण किया गया, .NET 4.0, आउटलुक 2010:

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

इसे विभिन्न ईमेल को छोटा क्यों नहीं करें एड्रेस = this.Aplication.Session.CurrentUser.AddressEntry.Address? आपको यह भी जांचना होगा कि पताEntry.GetExchangeUser मान्य है - प्रोफ़ाइल में कोई एक्सचेंज वाले उपयोगकर्ता के लिए, GetExchangeUser शून्य वापस आ जाएगा। –

+1

@DmitryStreblechenko, मैंने जानबूझकर इसे लंबे रूप में लिखा ताकि यह स्पष्ट होगा कि यह कहां से आता है। साथ ही, मैंने जानबूझकर कोड की लाइनों की न्यूनतम संख्या के साथ उत्तर दिया। मैं इसे ओपी में अपने आवेदन के संदर्भ में रक्षात्मक कोड लिखने के लिए छोड़ देता हूं। –

+0

सही काम किया;) –

0

outlookObject.ActiveExplorer().Session.CurrentUser.Address की कोशिश करो। VS10, Outlook 2007 पर मेरे लिए काम किया, .NET 4.0

0

किसी से गुजर रहा है, मैं दृढ़ता से Application.ActiveExplorer().Session, ActiveExplorer() के रूप में उपयोग करते हुए एक NullReferenceException वापस कर सकती है Application.Session.CurrentUser.AddressEntry.Address का उपयोग कर था सलाह कुछ भी करने के बजाय, उदाहरण के लिए जब माध्यम से एक ईमेल खोलने आउटलुक।

2

यदि आप सामान्य पीओपी/आईएमएपी सर्वर का उपयोग कर रहे हैं, तो आपको ई-मेल पता मिलता है: आवेदन। सत्र। CurrentUser.AddressEntry.Address;

एक्सचेंज सर्वर के साथ, आपको ई-मेल पता मिलता है: आवेदन। सत्र। CurrentUser.AddressEntry.GetExchangeUser()। PrimarySmtpAddress;

5

"वर्तमान उपयोगकर्ता पता" की परिभाषा पर निर्भर करता है।

  1. Outlook में प्राथमिक खाते का पता Appication.Session.CurrentUser (रिटर्न Recipient वस्तु) से प्राप्त किया जा सकता है। Recipient.Address संपत्ति का उपयोग करें। ध्यान दें कि एक एक्सचेंज खाते (Recipient.AddressEntry.Type == "EX") के लिए आपको एक EX टाइप पता प्राप्त होगा। एसएमटीपी पता पुनर्प्राप्त करने के लिए, Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress का उपयोग करें। त्रुटियों के मामले में नल/अपवादों को संभालने के लिए तैयार रहें।

विस्तारित MAPI स्तर (सी ++ या डेल्फी) पर, का उपयोग IMAPISession::QueryIdentity (आप इसे OutlookSpy में परीक्षण कर सकते हैं - IMAPISession बटन पर क्लिक करके QueryIdentity)। इसके बाद आप PR_ADDRTYPE संपत्ति ("EX" बनाम "एसएमटीपी") और PR_EMAIL_ADDRESS (जब PR_ADDRTYPE = "एसएमटीपी") या (एक्सचेंज के मामले में) PR_SMTP_ADDRESS (उपस्थित होने की गारंटी नहीं है) और PR_EMS_AB_PROXY_ADDRESSES (बहुविकल्पीय संपत्ति एक्सचेंज पते, सभी प्रॉक्सी (उपनाम) पते सहित)।

  1. प्रोफ़ाइल में एकाधिक खातों के मामले में, एकाधिक खातों के माध्यम से एक ईमेल भेजा या प्राप्त किया जा सकता है। उस मामले में MailItem.SendUsingAccount का उपयोग करें (Account ऑब्जेक्ट देता है, शून्य हो सकता है - उस मामले में Application.Session.CurentUser का उपयोग करें)। यह प्राप्त, भेजे गए या ईमेल के लिए दोनों मान्य है (Application.ActiveInspector.CurrentItem या Application.ActiveExplorer.ActiveInlineResponse)।

  2. किसी दिए गए प्रोफ़ाइल में सभी खातों को Namespace.Accounts संग्रह (Application.Session.Accounts का उपयोग करके एक्सेस किया जा सकता है)। Account.SmtpAddress संपत्ति का उपयोग कर खाते का पता एक्सेस किया जा सकता है। ध्यान दें कि Outlook ऑब्जेक्ट मॉडल केवल मेल खाते का खुलासा करता है। कुछ स्टोर खाते (जैसे पीएसटी) संग्रह में नहीं हैं क्योंकि उनके पास आंतरिक उपयोगकर्ता पहचान नहीं है, भले ही कुछ अन्य खाते (जैसे कि पीओपी 3/एसएमटीपी) उस स्टोर को डिलीवर कर सकें। यदि आप सभी खातों तक पहुंचना चाहते हैं, तो आप Redemption और इसके RDOSession का उपयोग कर सकते हैं।लेखा संग्रह (RDOAccounts ऑब्जेक्ट)।

विस्तारित एमएपीआई स्तर पर, खातों को IOlkAccountManager इंटरफेस के माध्यम से उजागर किया जाता है। यदि आप IOlkAccountManager बटन पर क्लिक करते हैं तो आप OutlookSpy में इसके साथ खेल सकते हैं।

  1. प्रतिनिधि विनिमय स्टोर के मामले में, स्टोर स्वामी को Outlook ऑब्जेक्ट मॉडल के माध्यम से प्रकट नहीं किया जाता है। आप या तो विस्तारित एमएपीआई का उपयोग कर सकते हैं (ध्यान दें कि PR_MAILBOX_OWNER_ENTRYID संपत्ति केवल ऑनलाइन स्टोर द्वारा उजागर की जाती है, यह कैश किए गए स्टोर में उपलब्ध नहीं है)। आप एक्सचेंज स्टोर एंट्री आईडी को पार्स कर सकते हैं और इससे पूर्व प्रकार का पता निकाल सकते हैं। फिर आप EX पता दिए गए GAL ऑब्जेक्ट एंट्री आईडी का निर्माण कर सकते हैं। आप Redemption और इसकी RDOExchangeMailboxStore ऑब्जेक्ट और इसकी Owner संपत्ति का उपयोग कर स्टोर स्वामी तक पहुंच सकते हैं।
+0

यदि कैलेंडर में कोई अपॉइंटमेंट बनाया जा रहा है, तो क्या यह जानने के लिए ओओएम का उपयोग करने का कोई तरीका है कि कौन सा ईमेल खाता इसके साथ जुड़ा होगा? अर्थात। जब हमारे पास प्रोफाइल में एकाधिक खाते होते हैं तो कैलेंडर को खाते में मैप करने के लिए। – Alex

+0

निश्चित रूप से नहीं, नियुक्ति अभिभावक संपत्ति पढ़ें, इसे फ़ोल्डर ऑब्जेक्ट पर डालें, फ़ोल्डर पढ़ें। स्टोर संपत्ति। नेमस्पेस के माध्यम से लूप। खाता संग्रह और नियुक्ति के मूल स्टोर एंट्री आईडी की प्रविष्टि आईडी के साथ खाता.DeliveryStore.EntryID संपत्ति के मूल्य की तुलना करें। –

+0

धन्यवाद! इस बीच, मैंने पाया कि अभी तक बनाए गए अपॉइंटमेंटइटम ने अपने प्राप्तकर्ता संग्रह में एक प्राप्तकर्ता शामिल किया है और इस प्राप्तकर्ता के पास मुझे आवश्यक ईमेल है (ताकि आयोजक पहले ही प्रारंभ हो चुका हो)। एक आसान तरीका की तरह दिखता है (इस विशेष कार्य के लिए)। या क्या इस दृष्टिकोण की कोई कमी है? यह मुहैया कराया गया है कि प्रश्न में नियुक्तियां मेरे स्वयं के कोड द्वारा बनाई गई हैं, इसलिए जब नियुक्ति पहले से मौजूद हो तो मुझे इस मामले से निपटने की ज़रूरत नहीं है और इसकी प्राप्तकर्ता सूची गैर-डिफ़ॉल्ट हो सकती है और इस पर भरोसा नहीं किया जा सकता है। – Alex

संबंधित मुद्दे