Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
We can send deferred delivery mail using Exchange Web Services by setting PR_DEFERRED_SEND_TIME and PR_DEFERRED_DELIVERY_TIME MAPI properties as extended properties on the EWS request.
Here is the sample code in C#:
NOTE: Following programming examples is for illustration only, without warranty either expressed or implied,
including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose.
This sample code assumes that you are familiar with the programming language being demonstrated and the tools used
to create and debug procedures.
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using SendMailWithDeferredDelivery.msgex07;
6: using System.Net;
7: using System.Net.Security;
8: using System.Security.Cryptography.X509Certificates;
9:
10: namespace SendMailWithDeferredDelivery
11: {
12: class Program
13: {
14: static void Main(string[] args)
15: {
16: //Please change the server, domain, username, password
17: ExchangeServiceBinding esb = new ExchangeServiceBinding();
18: esb.Credentials = new NetworkCredential("user", "pass!", "domain");
19: esb.Url = @"https://<FQDN Server>/EWS/Exchange.asmx";
20:
21:
22: System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
23: {
24: // Replace this line with code to validate server certificate.
25: return true;
26: };
27:
28:
29: esb.RequestServerVersionValue = new RequestServerVersion();
30: esb.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2007_SP1;
31:
32: // Create a new message.
33: MessageType message = new MessageType();
34:
35: // Define the e-mail address of the recipient of the message.
36: EmailAddressType singleRecip = new EmailAddressType();
37: singleRecip.EmailAddress = "user@msglab.com";
38:
39: message.ToRecipients = new EmailAddressType[2];
40: message.ToRecipients[0] = singleRecip;
41:
42: // Set the subject and sensitivity properties.
43: message.Subject = "Siberian Tigers";
44: message.Sensitivity = SensitivityChoicesType.Personal;
45:
46: message.ExtendedProperty = new ExtendedPropertyType[2];
47:
48: message.ExtendedProperty[0] = new ExtendedPropertyType();
49:
50: message.ExtendedProperty[0].ExtendedFieldURI = new PathToExtendedFieldType();
51:
52: //NOTE: This PropertyID is equal to PropertyTag "0x3FEF" but you have to use PropertyID and not PropertyTag
53: //otherwise it will NOT work as expected and this will not be visible via OOM or WebDAV,
54: //you have to specify it as Integer value in PropertyTag field
55: //PR_DEFERRED_SEND_TIME
56: message.ExtendedProperty[0].ExtendedFieldURI.PropertyTag = "16367";
57:
58: message.ExtendedProperty[0].ExtendedFieldURI.PropertyType = MapiPropertyTypeType.SystemTime;
59:
60: //Sending mail in another 5 Mins
61: DateTime deliverydatetime;
62: System.DateTime today = System.DateTime.Now;
63: System.TimeSpan duration = new System.TimeSpan(0,5, 0);
64: deliverydatetime = today.Add(duration);
65:
66: message.ExtendedProperty[0].Item = deliverydatetime.ToUniversalTime().ToString();
67:
68: //NOTE: This PropertyID is equal to PropertyTag "0x000F" but you have to use PropertyID and not PropertyTag
69: //otherwise it will NOT work as expected and this will not be visible via OOM or WebDAV,
70: //you have to specify it as Integer value in PropertyTag field
71: //PR_DEFERRED_DELIVERY_TIME
72:
73: message.ExtendedProperty[1] = new ExtendedPropertyType();
74:
75: message.ExtendedProperty[1].ExtendedFieldURI = new PathToExtendedFieldType();
76:
77: message.ExtendedProperty[1].ExtendedFieldURI.PropertyTag = "15";
78:
79: //message.ExtendedProperty[1].ExtendedFieldURI.PropertyTag= "0x000F";
80:
81: message.ExtendedProperty[1].ExtendedFieldURI.PropertyType = MapiPropertyTypeType.SystemTime;
82:
83: message.ExtendedProperty[1].Item = deliverydatetime.ToUniversalTime().ToString();
84:
85:
86: // Set the body property.
87: message.Body = new BodyType();
88: message.Body.BodyType1 = BodyTypeType.HTML;
89: message.Body.Value = "Did you know there are estimated to be only about 400 " +
90: "of these magnificent creatures left in the wild?";
91:
92: // Create a CreateItem request.
93: CreateItemType createItem = new CreateItemType();
94:
95: // Specify that the CreateItem operation should directly send the message
96: // and save a copy in the Sent Items folder.
97: createItem.MessageDisposition = MessageDispositionType.SendAndSaveCopy;
98: createItem.MessageDispositionSpecified = true;
99:
100: DistinguishedFolderIdType folder = new DistinguishedFolderIdType();
101: folder.Id = DistinguishedFolderIdNameType.outbox;
102:
103: TargetFolderIdType targetFolder = new TargetFolderIdType();
104: targetFolder.Item = folder;
105: createItem.SavedItemFolderId = targetFolder;
106:
107: createItem.Items = new NonEmptyArrayOfAllItemsType();
108: createItem.Items.Items = new ItemType[1] { message };
109:
110: // Call the CreateItem method and get its response.
111: CreateItemResponseType response = esb.CreateItem(createItem);
112:
113: // Get the items returned by CreateItem.
114: ResponseMessageType[] itemsResp = response.ResponseMessages.Items;
115:
116: }
117: }
118: }
EWS Rocks!!!
Comments
- Anonymous
June 13, 2009
PingBack from http://quickdietsite.info/story.php?id=1722