Monday, August 08, 2005

Sending Read and Delivery Recipients programmatically via Exchange

Someone asked me last week about sending a delivery recipient programmatically via OWA which is a bit of interesting one so I thought I’d share. There is a good KB article that gives a description of how to send read and delivery recipient via CDOSYS (and CDOEX) using the urn:schemas:mailheader:disposition-notification-to (for read recipients) and urn:schemas:mailheader:return-receipt-to (for delivery recipients). If your sending via the OWA send command you need to include two different properties

"http://schemas.microsoft.com/exchange/readreceiptrequested=1"
"http://schemas.microsoft.com/exchange/deliveryreportrequested=1"

If you are sending via WebDAV for example using this code from the SDK . You need to make the following mods

Declare another string eg
string strNotifyaddr = "\"Fred Smith\""<fsmith@domain.com>";

And then modify the header string to include disposition-notification-to and Return-Receipt-To eg

strMailboxURI = "http://" + strServer + "/exchange/" + strAlias;
strSubURI = "http://" + strServer + "/exchange/" + strAlias
+ "/##DavMailSubmissionURI##/";
strTempURI = "http://" + strServer + "/exchange/" + strAlias
+ "/drafts/" + strSubject + ".eml";
strBody = "To: " + strTo + "\n" +
"Subject: " + strSubject + "\n" +
"Date: " + System.DateTime.Now +
"X-Mailer: test mailer" + "\n" +
"MIME-Version: 1.0" + "\n" +
"Content-Type: text/plain;" + "\n" +
"disposition-notification-to: " + strNotifyaddr + "\n" +
"Return-Receipt-To: " + strNotifyaddr + "\n" +
"Charset = \"iso-8859-1\"" + "\n" +
"Content-Transfer-Encoding: 7bit" + "\n" +
"\n" + strText;


I’ve put together two samples for sending a mail with read recipients via OWA and posted the code here. The difference between both samples is the first is for if you aren’t using Forms based authentication on your Exchange box and the second is a sample for if you are using FBA on your Exchange box (this includes code to deal with cookies). The normal OWA send code look like

stmsgbody ="Hello Fred <BR<BR>"
stmsgbody = stmsgbody & "What to get some coffee Mate, Meet me downstairs in
ten<BR><BR>"
stmsgbody = stmsgbody & "Cheers<BR>"
stmsgbody = stmsgbody & "Barney<BR>"
szXml = ""
szXml = szXml & "Cmd=send" & vbLf
szXml = szXml & "MsgTo=address@domain.com" & vbLf
szXml = szXml & "MsgCc=" & vbLf
szXml = szXml & "MsgBcc=" & vbLf
szXml = szXml & "urn:schemas:httpmail:importance=1" & vbLf
szXml = szXml & "http://schemas.microsoft.com/exchange/readreceiptrequested=1" &
vbLf
szXml = szXml &
"http://schemas.microsoft.com/exchange/deliveryreportrequested=1" & vbLf
szXml = szXml & "http://schemas.microsoft.com/exchange/sensitivity-long=" & vbLf
szXml = szXml & "urn:schemas:httpmail:subject=Coffee ???" & vbLf
szXml = szXml & "urn:schemas:httpmail:htmldescription=<!DOCTYPE HTML PUBLIC " _
& """-//W3C//DTD HTML 4.0 Transitional//EN""><HTML DIR=ltr><HEAD><META
HTTP-EQUIV" _
& "=""Content-Type"" CONTENT=""text/html; charset=utf-8""></HEAD><BODY><DIV>" _
& "<FONT face='Arial' color=#000000 size=2>" & stmsgbody & "</font>" _
& "</DIV></BODY></HTML>" & vbLf
Set ObjxmlHttp = CreateObject("Microsoft.XMLHTTP")
ObjxmlHttp.Open "POST", "https://server/exchange/mailbox/Drafts", False, "",""
ObjxmlHttp.setRequestHeader "Accept-Language:", "en-us"
ObjxmlHttp.setRequestHeader "Content-type:", "application/x-www-UTF8-encoded"
ObjxmlHttp.setRequestHeader "Content-Length:", Len(xmlstr)
ObjxmlHttp.Send szXml
Wscript.echo ObjxmlHttp.responseText