How to send deferred delivery email using Exchange Web Services ?
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