How to send deferred delivery email using Exchange Web Services ?

How to send deferred delivery email using Exchange Web Services ?

Rate This
  • Comments 1

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!!!
Leave a Comment
  • Please add 8 and 3 and type the answer here:
  • Post