i'm trying to create a new contact for outlook through my web
application, sending to an exchange 2007 server but keep getting error
message "The remote server returned an error: (403) Forbidden."  here
is my code below and can;t figure out why i keep getting this?

 try
         {
            string sUri = "http://nte-exc-01/Exchange/administrator/
Contacts/JoLynnDobney.eml";

            System.Uri myUri = new System.Uri(sUri);
            HttpWebRequest HttpWRequest = (HttpWebRequest)
WebRequest.Create(myUri);

            string strXMLNSInfo;
            string strNameInfo;
            string strBusinessAddrInfo;
            string strHomeAddrInfo;
            string strOtherAddrInfo;
            string strMailAddrInfo;
            string strPhoneInfo;
            string strEmailInfo;
            string strOrganizationalInfo;

            string strPersonalInfo;
            string strCustomerInfo;
            string strFollowUpInfo;
            string strMiscInfo;
            string strUserFieldsInfo;

            // Specify the Namespaces to be used.
            strXMLNSInfo = "xmlns:g=\"DAV:\"" +
               " xmlns:c=\"urn:schemas:contacts:\"" +
               " xmlns:e=\"http://schemas.microsoft.com/exchange/\""; +
               " xmlns:mapi=\"http://schemas.microsoft.com/mapi/\""; +
               " xmlns:x=\"xml:\" xmlns:cal=\"urn:schemas:calendar:\""
+
               " xmlns:mail=\"urn:schemas:httpmail:\">";
            // Specify the contact's name information.
            // (First Name, Middle Name, Last Name, Full Name,
            //  Subject of the contact--used by Outlook Address Book,
            //  File As, Initials, Nickname, Title, and
Suffix)
        strNameInfo = "<c:givenName>JoLynn</c:givenName>" +
         "<c:middlename>Julie</c:middlename>" +
         "<c:sn>Dobney</c:sn>" +
         "<c:cn>JoLynn J. Dobney</c:cn>" +
         "<mail:subject>JoLynn Dobney</mail:subject>" +
         "<c:fileas>Dobney, JoLynn</c:fileas>" +
         "<c:initials>JJD</c:initials>" +
         "<c:nickname>Jo</c:nickname>" +
         "<c:personaltitle>Mrs.</c:personaltitle>" +
         "<c:namesuffix>MCSD</c:namesuffix>";
            // Specify the Business Address Information.
            // (Street, PO Box, City, State, Postal Code, and Country)
        strBusinessAddrInfo = "<c:street>Business Address Information</
c:street>" +
         "<c:postofficebox>PO Box 12345</c:postofficebox>" +
         "<c:l>AnyTown</c:l>" +
         "<c:st>WA</c:st>" +
         "<c:postalcode>12345-1234</c:postalcode>" +
         "<c:co>United States</c:co>";
            // Specify the Home Address Information.
            // (Street, PO Box, City, State, Postal Code, and Country)
        strHomeAddrInfo = "<c:homeStreet>Home Address Information</
c:homeStreet>" +
         "<c:homepostofficebox>PO Box 54321</c:homepostofficebox>" +
         "<c:homeCity>SomeTown</c:homeCity>" +
         "<c:homeState>WA</c:homeState>" +
         "<c:homePostalCode>12345</c:homePostalCode>" +
         "<c:homeCountry>United States</c:homeCountry>";
            // Specify the Other Address Information.
            // (Street, PO Box, City, State, Postal Code, and Country)
        strOtherAddrInfo = "<c:otherstreet>Other Address Information</
c:otherstreet>" +
         "<c:otherpostofficebox>PO Box 98765</c:otherpostofficebox>" +
         "<c:othercity>SomeTown</c:othercity>" +
         "<c:otherstate>FL</c:otherstate>" +
         "<c:otherpostalcode>56789</c:otherpostalcode>" +
         "<c:othercountry>United States</c:othercountry>";
            // Specify which address is the mailing address.
            // 0 = None, 1 = Home, 2 = Business, 3 = Other
            strMailAddrInfo = "<c:mailingaddressid>2</
c:mailingaddressid>";
            // Specify phone number information.
            // (Business Phone, Business Phone 2, Business Fax,
            //  Home Phone, Home Phone 2, Home Fax,
            //  Other Phone, Other Fax, Pager, Mobile Phone,
            //  Car Phone, ISDN, Telex, TTY/TDD, Callback)
        strPhoneInfo = "<c:telephoneNumber>425-555-0110</
c:telephoneNumber>" +
         "<c:telephonenumber2>425-555-0111</c:telephonenumber2>" +
         "<c:facsimiletelephonenumber>425-555-0112</
c:facsimiletelephonenumber>" +
         "<c:homePhone>425-555-0113</c:homePhone>" +
         "<c:homephone2>425-555-0114</c:homephone2>" +
         "<c:homefax>425-555-0115</c:homefax>" +
         "<c:otherTelephone>206-555-0111</c:otherTelephone>" +
         "<c:otherfax>206-555-0112</c:otherfax>" +
         "<c:pager>425-555-0116</c:pager>" +
         "<c:mobile>425-555-0117</c:mobile>" +
         "<c:othermobile>206-555-0113</c:othermobile>" +
         "<c:internationalisdnnumber>425-555-0118</
c:internationalisdnnumber>" +
         "<c:telexnumber>425-555-0119</c:telexnumber>" +
         "<c:ttytddphone>425-555-0120</c:ttytddphone>" +
         "<c:callbackphone>425-555-0121</c:callbackphone>";
            // Specify the e-mail address information.
        strEmailInfo = "<mapi:email1addrtype>EX</mapi:email1addrtype>"
+
         "<mapi:email1emailaddress>" +
         "/o=Microsoft/ou=First Administrative Group/cn=Recipients/
cn=jdobney" +
         "</mapi:email1emailaddress>" +
         "<mapi:email1originaldisplayname>" +
         "JoLynn Dobney (Exchange)" +
         "</mapi:email1originaldisplayname>" +
         "<mapi:email2addrtype>SMTP</mapi:email2addrtype>" +
         "<mapi:email2emailaddress>" +
         "[email protected]" +
         "</mapi:email2emailaddress>" +
         "<mapi:email2originaldisplayname>" +
         "JoLynn Dobney (SMTP)" +
         "</mapi:email2originaldisplayname>" +
         "<mapi:email3addrtype>X400</mapi:email3addrtype>" +
         "<mapi:email3emailaddress>" +
         "c=us;a= ; p=Microsoft; o=Exchange; s=Dobney; g=JoLynn; i=J;"
+
         "</mapi:email3emailaddress>" +
         "<mapi:email3originaldisplayname>" +
         "JoLynn Dobney (X400)" +
         "</mapi:email3originaldisplayname>";
            // Specify organizational information.
            // (Company, Company Main Phone, Business Home Page,
            //  Department, Job Title, Manager's Name,
            //  Assistant's Name, Assistant's Phone, Office Location,
            //  Organizational ID Number, Computer Network Name,
            //  Profession)
        strOrganizationalInfo = "<c:o>Fourth Coffee </c:o>" +
         "<c:organizationmainphone>425-555-0199</
c:organizationmainphone>" +
         "<c:businesshomepage>http://www.fourthcoffee.com</
c:businesshomepage>" +
         "<c:department>YYY</c:department>" +
         "<c:title>Lead Software Design Engineer</c:title>" +
         "<c:manager>Karan Khanna</c:manager>" +
         "<c:secretarycn>Ken Myer</c:secretarycn>" +
         "<c:secretaryphone>425-555-0123</c:secretaryphone>" +
         "<c:roomnumber>C-309</c:roomnumber>" +
         "<c:employeenumber>987654321</c:employeenumber>" +
         "<c:computernetworkname>jdobney</c:computernetworkname>" +
         "<c:profession>Software Designer</c:profession>";

            // Specify personal information.
            // (Birthday, Anniversary, Spouse, Children, Gender,
            //  Personal Home Page, Hobbies)
        strPersonalInfo = "<c:bday>1974-01-01T08:00:00Z</c:bday>" +
         "<c:weddinganniversary>1995-01-01T08:00:00Z</
c:weddinganniversary>" +
         "<c:spousecn>Barry Johnson</c:spousecn>" +
         "<c:childrensnames>" +
         "<x:v>David Johnson</x:v><x:v>Willis Johnson</x:v>" +
         "</c:childrensnames>" +
         "<c:gender>Male</c:gender>" +
         "<c:personalHomePage>" +
         "http://www.example.com/JoLynnDobney/default.htm"; +
         "</c:personalHomePage>" +
         "<c:hobbies>Reading, lawn bowling</c:hobbies>";

            // Specify customer related information.
            // (Customer ID, Account, Billing Information)
        strCustomerInfo = "<c:customerid>YYY</c:customerid>" +
         "<c:account>YYY</c:account>" +
         "<c:billinginformation>YYY</c:billinginformation>";
            // Specify Follow Up/Reminder information.
            // (Reminder, Reminder Topic, Reminder Time, and other
reminder information)
                strFollowUpInfo = "<mapi:reminderset>1</mapi:reminderset>" +
         "<mapi:request>Call</mapi:request>" +
         "<mapi:remindertime>2001-12-01T08:00:00Z</mapi:remindertime>"
+
         "<mapi:remindernexttime>2001-12-01T08:00:00Z</
mapi:remindernexttime>" +
         "<e:reply-by-iso>2001-12-01T08:00:00Z</e:reply-by-iso>";

            // Specify miscellaneous information.
            // (Categories, Contacts, Mileage, FTP Site, Language,
            //  Government ID, Location, Internet Free/Busy Address,
            //  Sensitivity)
        strMiscInfo = "<e:keywords-utf8>" +
         "<x:v>Buddies</x:v><x:v>Engineers</x:v>" +
         "</e:keywords-utf8>" +
         "<mapi:contacts><x:v>Brian Johnson</x:v></mapi:contacts>" +
         "<e:mileage>Rarely used string property</e:mileage>" +
         "<c:ftpsite>ftp://ftp.example.com/</c:ftpsite>" +
         "<c:language>US English</c:language>" +
         "<c:governmentid>000-00-0000</c:governmentid>" +
         "<c:location>Nowhere Land</c:location>" +
         "<cal:fburl>http://www.example.com/JoLynnDobney/freebusy</
cal:fburl>" +
         "<mapi:sensitivity>2</mapi:sensitivity>";

            // Specify the User Field information.
            // (User Field 1, User Field 2, User Field 3, User Field
4)
        strUserFieldsInfo = "<e:extensionattribute1>User Data 1" +
         "</e:extensionattribute1>" +
         "<e:extensionattribute2>User Data 2</e:extensionattribute2>"
+
         "<e:extensionattribute3>User Data 3</e:extensionattribute3>"
+
         "<e:extensionattribute4>User Data 4</e:extensionattribute4>";

            string sQuery;
         sQuery = "<?xml version='1.0'?>" +
         "<g:propertyupdate>" + strXMLNSInfo +
         "<g:set>" +
         "<g:prop>" +
         "<g:contentclass>urn:content-classes:person</g:contentclass>"
+
         "<e:outlookmessageclass>IPM.Contact</e:outlookmessageclass>"
+
         strNameInfo + strBusinessAddrInfo +
         strHomeAddrInfo + strOtherAddrInfo +
         strMailAddrInfo + strPhoneInfo +
         strEmailInfo + strOrganizationalInfo +
         strPersonalInfo + strCustomerInfo +
         strFollowUpInfo + strMiscInfo +
         strUserFieldsInfo +
         "</g:prop>" +
         "</g:set>" +
         "</g:propertyupdate>";

            // Set the credentials.
            // TODO: Replace with the appropriate user credential.
            NetworkCredential myCred = new NetworkCredential
("administrator", txtPassword.Text,"txtDomain.Text");
            CredentialCache myCredentialCache = new CredentialCache();
            myCredentialCache.Add(myUri, "Basic", myCred);
            HttpWRequest.Credentials = myCredentialCache;

            // Set the headers.
            HttpWRequest.KeepAlive = false;
            HttpWRequest.Headers.Set("Pragma", "no-cache");
            HttpWRequest.Headers.Set("Translate", "f");
            HttpWRequest.ContentType =  "text/xml";
            HttpWRequest.ContentLength = sQuery.Length;

            //Set the request timeout to 5 minutes.
            HttpWRequest.Timeout = 300000;
            // set the request method
            HttpWRequest.Method = "PROPPATCH";

            // Store the data in a byte array.
            byte[] ByteQuery = System.Text.Encoding.ASCII.GetBytes
(sQuery);
            HttpWRequest.ContentLength = ByteQuery.Length;
            Stream QueryStream = HttpWRequest.GetRequestStream();
            // write the data to be posted to the Request Stream
            QueryStream.Write(ByteQuery,0,ByteQuery.Length);
            QueryStream.Close();

            // Send the request and get the response,
            HttpWebResponse HttpWResponse = (HttpWebResponse)
HttpWRequest.GetResponse();

            // Get the Status code
            int iStatCode =  (int)HttpWResponse.StatusCode;
            string sStatus = iStatCode.ToString();
            Console.WriteLine("Status Code: {0}", sStatus);
            // Get the request headers
            string sReqHeaders = HttpWRequest.Headers.ToString();
            Console.WriteLine(sReqHeaders);

            // Read the Response Steam
            Stream strm = HttpWResponse.GetResponseStream();
            StreamReader sr = new StreamReader(strm);
            string sText = sr.ReadToEnd();
            Console.WriteLine("Response: {0}", sText);

            // Close the stream.
            strm.Close();

            // Clean up
            myCred = null;
            myCredentialCache = null;
            HttpWRequest = null;
            HttpWResponse = null;
            QueryStream = null;
            strm = null;
            sr = null;
         }

Reply via email to