সি # তে এমএস এক্সচেঞ্জের ইমেলটি পড়ুন


91

আমার একটি এমএস এক্সচেঞ্জ সার্ভারের একটি নির্দিষ্ট মেইলবক্স থেকে ই-মেইলটি পর্যবেক্ষণ করার এবং পড়ার দক্ষতা প্রয়োজন (আমার সংস্থার অভ্যন্তরীণ)। আমার প্রেরকের ই-মেইল ঠিকানা, বিষয়, বার্তা বডিটি পড়তে এবং কোনও সংযুক্তি ডাউনলোড করতে পারা দরকার।

সি # (বা ভিবি.এনইটি) ব্যবহার করে এটি করার সর্বোত্তম উপায় কী?


4
মাইক্রোসফ্ট এক্সচেঞ্জ 2007 এসপি 1 এবং ভি 2010 এর জন্য এক্সচেঞ্জ ওয়েব পরিষেবাদি পরিচালিত এপিআই প্রকাশ করেছে যা আউটলুকের প্রয়োজনীয়তা ছাড়াই একজনকে আপনার মেইলবক্সে প্রবেশের অনুমতি দেয়। আমার ব্লগে আমার দুটি নিবন্ধ রয়েছে যা এই পদ্ধতির বিষয়ে আলোচনা করে: - সি #: এক্সচেঞ্জ ওয়েব পরিষেবাদি ব্যবহার করে এক্সচেঞ্জ থেকে সমস্ত ইমেল পাওয়া
gaমেগম্যান

এক্সচেঞ্জ ওয়েব সার্ভিসেস পরিচালিত এপিআই 1.0 এসডিকে হ'ল এক্সচেঞ্জ সার্ভার 2007 এসপি 1 এবং তারপরের জন্য এক্সগ্রাফিকভাবে এক্সচেঞ্জ আপডেট করার জন্য মাইক্রোসফ্ট প্রস্তাবিত পদ্ধতি। msdn.microsoft.com/en-us/library/dd633710(EXCHG.80).aspx
jlo

উত্তর:


90

এটি একটি জগাখিচুড়ি. । নেট ইন্টারপ ডিএলএল এর মাধ্যমে এমএপিআই বা সিডিও আনুষ্ঠানিকভাবে মাইক্রোসফ্ট দ্বারা অসমর্থিত - এটি সূক্ষ্মভাবে কাজ করবে বলে মনে হবে, তবে মেমরি ফাঁসের সমস্যা রয়েছে তাদের বিভিন্ন মেমরি মডেলের কারণে। আপনি সিডিওএক্স ব্যবহার করতে পারেন, তবে এটি কেবল এক্সচেঞ্জ সার্ভারে কাজ করে, দূর থেকে নয়; অকেজো আপনি আউটলুকের সাথে বিরতি রাখতে পারেন, তবে এখন আপনি আউটলুকের উপর নির্ভরতা তৈরি করেছেন; overkill। অবশেষে, আপনি এক্সচেঞ্জ 2003 এর ওয়েবডিএভি সমর্থনটি ব্যবহার করতে পারেন , তবে ওয়েবডিএভি জটিল, .NET এর পক্ষে অন্তর্নির্মিত সমর্থন কম রয়েছে, এবং (আঘাতের অপমান করার জন্য) এক্সচেঞ্জ 2007 ওয়েবডিএভি সমর্থন প্রায় সম্পূর্ণ ড্রপ করে।

একটি লোক কি করতে হবে? আমি আইএমএপি এর মাধ্যমে আমার এক্সচেঞ্জ 2003 সার্ভারের সাথে যোগাযোগের জন্য আফটারলজিকের আইএমএপ উপাদানটি ব্যবহার করে শেষ করেছি এবং এটি খুব ভাল কাজ করে শেষ হয়েছে। (আমি সাধারণত নিখরচায় বা ওপেন-সোর্স লাইব্রেরিগুলি সন্ধান করি, তবে আমি নেট ডটকমের সমস্তগুলি খুঁজে পেতে পেয়েছি - বিশেষত 2003 এর আইএমএপি প্রয়োগের কিছুটা প্রশ্ন আসে) - এবং এটি যথেষ্ট সস্তা ছিল এবং প্রথমটিতে কাজ করেছিল চেষ্টা করুন। আমি জানি সেখানে অন্যরাও রয়েছেন))

যদি আপনার সংস্থাটি এক্সচেঞ্জ 2007 এ থাকে তবে আপনার ভাগ্য ভাল। এক্সচেঞ্জ 2007 একটি এসওএপি-ভিত্তিক ওয়েব পরিষেবা ইন্টারফেস নিয়ে আসে যা অবশেষে এক্সচেঞ্জ সার্ভারের সাথে কথোপকথনের একীভূত, ভাষা-স্বাধীন উপায় সরবরাহ করে। যদি আপনি 2007+ কোনও প্রয়োজনীয়তা তৈরি করতে পারেন তবে এটি অবশ্যই যাওয়ার উপায়। (দুঃখের সাথে আমার জন্য, আমার সংস্থার একটি "তবে 2003 টি ভাঙ্গা হয়নি" নীতি রয়েছে))

আপনার যদি এক্সচেঞ্জ 2003 এবং 2007 উভয়ই ব্রিজ করতে হয় তবে অবশ্যই IMAP বা POP3 যাওয়ার উপায় definitely


21
অ্যাক্সেস সহজ করার জন্য এসওএপি-ভিত্তিক ওয়েব পরিষেবাটি মাইক্রোসফ্ট দ্বারা মুড়ে দেওয়া হয়েছিল - এক্সচেঞ্জ ওয়েব সার্ভিসেস পরিচালিত এপিআই 1.0 এসডিকে ব্যবহার করার পরামর্শ দেওয়া হচ্ছে: এমএসডিএন.মিকাইসফটওয়্যার /en-us/library/dd633710(EXCHG.80).aspx
jlo

4
এটি প্রায় যেন মাইক্রোসফ্ট আউটলুক ব্যতীত অন্য কোনও কিছুতে অক্ষম হওয়ার জন্য ডিজাইন করেছে
ক্রিস এস

67

উম,

আমার এখানে কিছুটা দেরি হয়ে যেতে পারে তবে ইডাব্লুএস এর বিন্দুটি কি তাই নয়?

https://msdn.microsoft.com/en-us/library/dd633710(EXCHG.80).aspx

একটি মেলবক্স থেকে মেল পেতে প্রায় 6 টি লাইন কোড নেয়:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

//service.Credentials = new NetworkCredential( "{Active Directory ID}", "{Password}", "{Domain Name}" );

service.AutodiscoverUrl( "First.Last@MyCompany.com" );

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

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

4
"ইডাব্লুএস পরিচালিত এপিআই মাইক্রোসফ্ট এক্সচেঞ্জ সার্ভার 2007 সার্ভিস প্যাক 1 (এসপি 1) এবং মাইক্রোসফ্ট এক্সচেঞ্জের পরবর্তী সংস্করণগুলির সাথে যোগাযোগ করে এমন অ্যাপ্লিকেশনগুলির প্রয়োগকে সহজ করেছে"
ক্রিস এস

4
বুঝতে পারছি এটি মূলত কয়েক বছরের পুরানো বার্তার জন্য একটি নেক্রোবাম্প, তবে এই কোডটি আমাকে প্রায় পাঁচ মিনিটের মধ্যে একই প্রকল্পের জন্য চালিয়ে যায়। প্রথমবারের মাধ্যমে নিখুঁতভাবে কাজ করেছেন। নির্বাচিত উত্তর আইএমওর চেয়ে সত্যই একটি আরও সমসাময়িক / ব্যাপক সমাধান ... অন্য কারও উল্লেখের জন্য লক্ষ্য করা for
ডেভিড ডাব্লু

4
এই চলমান পেয়ে নোট। আপনাকে নিউগেট প্যাকেজ "মাইক্রোসফ্ট এক্সচেঞ্জ ওয়েব সার্ভিস" ইনস্টল করতে হবে
জন এম

4
এটি প্রথম চেষ্টা করে আমার জন্য কাজ করেছিল। এটি নতুন গৃহীত উত্তর হওয়া উচিত।
kroe761

আমি যদি জানতে পারি যে আমার নিজের মেইলবক্সটি ছাড়া আমি কোনও ইমেল ঠিকানা ব্যবহার service.autodiscoverurlকরতে service.credentialsচাই, তবে আমি ঠিক আছি?
জিমকোড

19
  1. বর্তমানে পছন্দসই (এক্সচেঞ্জ 2013 এবং 2016) API হ'ল EWS । এটি খাঁটি HTTP ভিত্তিক এবং যে কোনও ভাষা থেকে অ্যাক্সেস করা যায় তবে নেট এবং জাভা নির্দিষ্ট গ্রন্থাগার রয়েছে।

    তুমি ব্যবহার করতে পার API এর সাথে খেলতে EWSEditor itor

  2. এক্সটেন্ডেড MAPI । এটি আউটলুক দ্বারা ব্যবহৃত নেটিভ এপিআই। এটি MSEMSএক্সচেঞ্জ এমএপিআই সরবরাহকারী ব্যবহার করে শেষ হয় , যা আরপিসি (এক্সচেঞ্জ 2013 এটি আর সমর্থন করে না) বা আরপিসি-ওভার-এইচটিটিপি (এক্সচেঞ্জ 2007 বা নতুন) বা এমএপিআই-ওভার-এইচটিটিপি (এক্সচেঞ্জ 2013 এবং আরও নতুন) ব্যবহার করে এক্সচেঞ্জের সাথে কথা বলতে পারে।

    এপিআই নিজেই কেবল পরিচালনাহীন সি ++ বা ডেলফি থেকে অ্যাক্সেস করতে পারে । আপনি রিডেম্পশন (যে কোনও ভাষা ) ও ব্যবহার করতে পারেন - এটির আরডিও পরিবারগুলি হ'ল একটি বর্ধিত এমএপিআই মোড়ক। বর্ধিত এমএপিআই ব্যবহার করতে আপনাকে আউটলুক বা এমএপিআই এর স্ট্যান্ডেলোন (এক্সচেঞ্জ) সংস্করণ ইনস্টল করতে হবে (বর্ধিত সমর্থনে, এবং এটি ইউনিকোড পিএসটি এবং এমএসজি ফাইল সমর্থন করে না এবং এক্সচেঞ্জ 2016 এ অ্যাক্সেস করতে পারে না)। বর্ধিত এমএপিআই কোনও পরিষেবাতে ব্যবহার করা যেতে পারে।

    ব্যবহার করে আপনি এপিআই সঙ্গে খেলা করতে পারেন OutlookSpy বা MFCMAPI

  3. আউটলুক অবজেক্ট মডেল - এক্সচেঞ্জ সুনির্দিষ্ট নয়, তবে কোডটি যে মেশিনে চালিত হয় সেখানে মেশিনে আউটলুকের সমস্ত ডেটা অ্যাক্সেসের অনুমতি দেয়। কোনও পরিষেবাতে ব্যবহার করা যাবে না।

  4. এক্সচেঞ্জ অ্যাক্টিভ সিঙ্ক । মাইক্রোসফ্ট আর এই প্রোটোকলে কোনও উল্লেখযোগ্য সংস্থান বিনিয়োগ করে না।

  5. আউটলুক সিডিও 1.21 লাইব্রেরি ইনস্টল করতে ব্যবহৃত হয়েছিল (এটি প্রসারিত এমএপিআইকে আবৃত করে), তবে এটি মাইক্রোসফ্ট দ্বারা অবচয় করা হয়েছিল এবং আর কোনও আপডেট পায় না।

  6. সেখানে তৃতীয় পক্ষ থাকত। নেট এমএপিআই র‌্যাপার এমএপিআই 33 নামে পরিচিত, তবে এটি আর বিকাশ বা সমর্থিত নয়।

  7. ওয়েবডিএভি - হ্রাস করা হয়েছে।

  8. এক্সচেঞ্জের জন্য সহযোগী ডেটা অবজেক্টস (সিডিওএক্স) - হ্রাস করা হয়েছে।

  9. এক্সচেঞ্জ ওএল ডিবি সরবরাহকারী (EXOLEDB) - হ্রাস করা হয়েছে।


EwsEditor গিথুব এ চলে গেছে: github.com/dseph/EwsEditor
Opmet

10

ওয়েবডিএভি করতে আমি প্রায় পুরানো কোডটি রেখেছিলাম। আমি মনে করি এটি এক্সচেঞ্জ 2003 এর বিরুদ্ধে লেখা হয়েছিল, তবে আমার আর কোনও স্মরণ নেই। যদি এটি সহায়ক হয় তবে নির্দ্বিধায় ধার করুন ...

class MailUtil
{
    private CredentialCache creds = new CredentialCache();

    public MailUtil()
    {
        // set up webdav connection to exchange
        this.creds = new CredentialCache();
        this.creds.Add(new Uri("http://mail.domain.com/Exchange/me@domain.com/Inbox/"), "Basic", new NetworkCredential("myUserName", "myPassword", "WINDOWSDOMAIN"));
    }

    /// <summary>
    /// Gets all unread emails in a user's Inbox
    /// </summary>
    /// <returns>A list of unread mail messages</returns>
    public List<model.Mail> GetUnreadMail()
    {
        List<model.Mail> unreadMail = new List<model.Mail>();

        string reqStr =
            @"<?xml version=""1.0""?>
                <g:searchrequest xmlns:g=""DAV:"">
                    <g:sql>
                        SELECT
                            ""urn:schemas:mailheader:from"", ""urn:schemas:httpmail:textdescription""
                        FROM
                            ""http://mail.domain.com/Exchange/me@domain.com/Inbox/"" 
                        WHERE 
                            ""urn:schemas:httpmail:read"" = FALSE 
                            AND ""urn:schemas:httpmail:subject"" = 'tbintg' 
                            AND ""DAV:contentclass"" = 'urn:content-classes:message' 
                        </g:sql>
                </g:searchrequest>";

        byte[] reqBytes = Encoding.UTF8.GetBytes(reqStr);

        // set up web request
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://mail.domain.com/Exchange/me@domain.com/Inbox/");
        request.Credentials = this.creds;
        request.Method = "SEARCH";
        request.ContentLength = reqBytes.Length;
        request.ContentType = "text/xml";
        request.Timeout = 300000;

        using (Stream requestStream = request.GetRequestStream())
        {
            try
            {
                requestStream.Write(reqBytes, 0, reqBytes.Length);
            }
            catch
            {
            }
            finally
            {
                requestStream.Close();
            }
        }

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        using (Stream responseStream = response.GetResponseStream())
        {
            try
            {
                XmlDocument document = new XmlDocument();
                document.Load(responseStream);

                // set up namespaces
                XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);
                nsmgr.AddNamespace("a", "DAV:");
                nsmgr.AddNamespace("b", "urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/");
                nsmgr.AddNamespace("c", "xml:");
                nsmgr.AddNamespace("d", "urn:schemas:mailheader:");
                nsmgr.AddNamespace("e", "urn:schemas:httpmail:");

                // Load each response (each mail item) into an object
                XmlNodeList responseNodes = document.GetElementsByTagName("a:response");
                foreach (XmlNode responseNode in responseNodes)
                {
                    // get the <propstat> node that contains valid HTTP responses
                    XmlNode uriNode = responseNode.SelectSingleNode("child::a:href", nsmgr);
                    XmlNode propstatNode = responseNode.SelectSingleNode("descendant::a:propstat[a:status='HTTP/1.1 200 OK']", nsmgr);
                    if (propstatNode != null)
                    {
                        // read properties of this response, and load into a data object
                        XmlNode fromNode = propstatNode.SelectSingleNode("descendant::d:from", nsmgr);
                        XmlNode descNode = propstatNode.SelectSingleNode("descendant::e:textdescription", nsmgr);

                        // make new data object
                        model.Mail mail = new model.Mail();
                        if (uriNode != null)
                            mail.Uri = uriNode.InnerText;
                        if (fromNode != null)
                            mail.From = fromNode.InnerText;
                        if (descNode != null)
                            mail.Body = descNode.InnerText;
                        unreadMail.Add(mail);
                    }
                }

            }
            catch (Exception e)
            {
                string msg = e.Message;
            }
            finally
            {
                responseStream.Close();
            }
        }

        return unreadMail;
    }
}

এবং মডেল.মেল:

class Mail
{
    private string uri;
    private string from;
    private string body;

    public string Uri
    {
        get { return this.uri; }
        set { this.uri = value; }
    }

    public string From
    {
        get { return this.from; }
        set { this.from = value; }
    }

    public string Body
    {
        get { return this.body; }
        set { this.body = value; }
    }
}

4
দ্রষ্টব্য: ওয়েবডাএভি সমর্থন এক্সচেঞ্জ সার্ভার 2010 থেকে বাদ দেওয়া হয়েছে, এর পরিবর্তে EWS ব্যবহার করুন।
আমাদের ম্যান


0

যদি আপনার এক্সচেঞ্জ সার্ভারটি পিওপি বা আইএমএপ সমর্থন করার জন্য কনফিগার করা থাকে তবে এটি সহজ উপায়।

আরেকটি বিকল্প হ'ল ওয়েবডিএভি অ্যাক্সেস। এটির জন্য একটি গ্রন্থাগার পাওয়া যায়। এটি আপনার সেরা বিকল্প হতে পারে।

আমি মনে করি এক্সচেঞ্জ অ্যাক্সেস করতে COM অবজেক্ট ব্যবহার করে বিকল্প রয়েছে, তবে আমি নিশ্চিত না যে এটি কতটা সহজ।

আপনার প্রশাসক আমার অনুমান অনুসারে আপনাকে অ্যাক্সেস দিতে ঠিক কী इच्छुक তার উপরে এটি নির্ভর করে।


0

মেলবক্স অ্যাক্সেস করতে এবং আপনার প্রয়োজনীয় তথ্য পেতে আপনার MAPI ব্যবহার করতে সক্ষম হওয়া উচিত। দুর্ভাগ্যক্রমে আমি জানি যে একমাত্র নেট নেট ম্যাপির লাইব্রেরি (এমএপিআই 33) অনিচ্ছাকৃত বলে মনে হচ্ছে। এটি নেট। নেট মাধ্যমে এমপিআই অ্যাক্সেস করার দুর্দান্ত উপায় ছিল, তবে আমি এখন এর কার্যকারিতাটির সাথে কথা বলতে পারি না। আপনি এটি কোথায় পাবেন সে সম্পর্কে আরও তথ্য রয়েছে: MAPI33.dll এর জন্য অবস্থান ডাউনলোড করুন?



0

একটি বিকল্প হ'ল আউটলুক ব্যবহার করা। আমাদের কাছে একটি মেল ম্যানেজার অ্যাপ্লিকেশন রয়েছে যা একটি এক্সচেঞ্জ সার্ভার অ্যাক্সেস করে এবং ইন্টারফেস হিসাবে আউটলুক ব্যবহার করে। এটি নোংরা কিন্তু এটি কাজ করে।

উদাহরণ কোড:

public Outlook.MAPIFolder getInbox()
        {
            mailSession = new Outlook.Application();
            mailNamespace = mailSession.GetNamespace("MAPI");
            mailNamespace.Logon(mail_username, mail_password, false, true);
            return MailNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
        }

4
আমি যদি এক্সচেঞ্জ 2003 এ অ্যাক্সেসের জন্য উইন 2003 এ উইন্ডোজ পরিষেবাটি চাই? আমার সার্ভার win2003 এ আউটলুক 2003 বা 2007 ইনস্টল করতে হবে?
কিকিনেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.