Difference between revisions of "Zimlet cookbook based on JavaScript API"
(→Mail) |
(→Get email body) |
||
Line 65: | Line 65: | ||
====Get email body==== | ====Get email body==== | ||
<pre> | <pre> | ||
− | + | var body = msgObj.getBodyContent(); | |
</pre> | </pre> | ||
+ | |||
+ | ==== Get list of attachments ==== | ||
+ | <pre> | ||
+ | var attArray = msgObj.attachments; | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | ==== Download Entire Email ==== | ||
+ | You can download the whole email(including all its attachments). This example is from com_zimbra_emaildownloader Zimlet. | ||
+ | <pre> | ||
+ | The logic is to simply get the message's id and then do a simple http GET to http://<server>/home/message.txt?fmt=tgz&id=<messageId> | ||
+ | </pre> | ||
+ | <pre> | ||
+ | com_zimbra_emaildownloader.prototype.doDrop = | ||
+ | function(msgObj) { | ||
+ | this.srcMsgObj = msgObj.srcObj; | ||
+ | if(this.srcMsgObj.type == "CONV"){ | ||
+ | this.srcMsgObj = this.srcMsgObj.getFirstHotMsg(); | ||
+ | } | ||
+ | var url = []; | ||
+ | var i = 0; | ||
+ | var proto = location.protocol; | ||
+ | var port = Number(location.port); | ||
+ | url[i++] = proto; | ||
+ | url[i++] = "//"; | ||
+ | url[i++] = location.hostname; | ||
+ | if (port && ((proto == ZmSetting.PROTO_HTTP && port != ZmSetting.HTTP_DEFAULT_PORT) | ||
+ | || (proto == ZmSetting.PROTO_HTTPS && port != ZmSetting.HTTPS_DEFAULT_PORT))) { | ||
+ | url[i++] = ":"; | ||
+ | url[i++] = port; | ||
+ | } | ||
+ | url[i++] = "/home/"; | ||
+ | url[i++]= AjxStringUtil.urlComponentEncode(appCtxt.getActiveAccount().name); | ||
+ | url[i++] = "/message.txt?fmt=tgz&id="; | ||
+ | url[i++] = this.srcMsgObj.id; | ||
+ | try{ | ||
+ | var subject = this.srcMsgObj.subject.replace(/\*/g, "").replace(/\[/g, "").replace(/\]/g, "").replace(/\</g, "").replace(/\>/g, "").replace(/\=/g, "").replace(/\+/g, "").replace(/\'/g, "").replace(/\"/g, "").replace(/\\/g, "").replace(/\//g, "").replace(/\,/g, "").replace(/\./g, "").replace(/\:/g, "").replace(/\;/g, "").replace(/ /g, "").replace(/!/g, ""); | ||
+ | if(subject.length > 16){ | ||
+ | subject = subject.substring(0,15); | ||
+ | } | ||
+ | url[i++] = "&filename=" + subject; | ||
+ | } catch(e) { | ||
+ | } | ||
+ | var getUrl = url.join(""); | ||
+ | window.open(getUrl, "_blank"); | ||
+ | }; | ||
</pre> | </pre> | ||
Revision as of 18:25, 31 March 2009
Contents
1. How to get access to an email's to,cc,bcc,subject, body information when its drag-dropped onto Zimlet's panel Item? First off we need to allow message(ZmMailMsg) or conversation(ZmConv) to be dragged onto Zimlet Panel Item.
<zimletPanelItem label="Zimlet Name" icon="Zimlet-panelIcon"> <dragSource type="ZmConv" /> <dragSource type="ZmMailMsg" /> </zimletPanelItem>
Then, within the Zimlet's Javascript file, we need to override 'doDrop' function.
com_zimbra_coloredemails.prototype.doDrop = function(zmObject) { };
The email dropped(zmObject) can be either a conversation or a single email. This zmObject internally has an object called 'srcObj' (source-object) and contains the real or actual Zimbra Object that was dropped. Once we get access to this, we can access all the properties and even functions.
com_zimbra_coloredemails.prototype.doDrop = function(zmObject) { var msgObj = zmObject.srcObj;//get access to source-object //if its a conversation i.e. "ZmConv" object, get the first loaded message "ZmMailMsg" object within that. if (zmObject.type == "CONV") { msgObj = zmObject.getFirstHotMsg(); } };
At this point we have a single message "ZmMailMsg" object and we can access all its properties.
Get mail subject
var subject = msgObj.subject; //where msgObj is of type "ZmMailMsg"
Get all email address
var emailsArray = msgObj.getEmails(); //where msgObj is of type "ZmMailMsg"
Get email addresses only in CC
var ccemails = [];//stores all email address in the email var participants = msgObj.participants.getArray(); //where msgObj is of type "ZmMailMsg" for(var i =0; i < participants.length; i++) { if(participants[i].type == AjxEmailAddress.CC) { ccemails.push(participants[i].address); } } PS: Similarly you can get emails of the following types: AjxEmailAddress.FROM = "FROM"; AjxEmailAddress.TO = "TO"; AjxEmailAddress.CC = "CC"; AjxEmailAddress.BCC = "BCC"; AjxEmailAddress.REPLY_TO = "REPLY_TO"; AjxEmailAddress.SENDER = "SENDER";
Get email body
var body = msgObj.getBodyContent();
Get list of attachments
var attArray = msgObj.attachments;
Download Entire Email
You can download the whole email(including all its attachments). This example is from com_zimbra_emaildownloader Zimlet.
The logic is to simply get the message's id and then do a simple http GET to http://<server>/home/message.txt?fmt=tgz&id=<messageId>
com_zimbra_emaildownloader.prototype.doDrop = function(msgObj) { this.srcMsgObj = msgObj.srcObj; if(this.srcMsgObj.type == "CONV"){ this.srcMsgObj = this.srcMsgObj.getFirstHotMsg(); } var url = []; var i = 0; var proto = location.protocol; var port = Number(location.port); url[i++] = proto; url[i++] = "//"; url[i++] = location.hostname; if (port && ((proto == ZmSetting.PROTO_HTTP && port != ZmSetting.HTTP_DEFAULT_PORT) || (proto == ZmSetting.PROTO_HTTPS && port != ZmSetting.HTTPS_DEFAULT_PORT))) { url[i++] = ":"; url[i++] = port; } url[i++] = "/home/"; url[i++]= AjxStringUtil.urlComponentEncode(appCtxt.getActiveAccount().name); url[i++] = "/message.txt?fmt=tgz&id="; url[i++] = this.srcMsgObj.id; try{ var subject = this.srcMsgObj.subject.replace(/\*/g, "").replace(/\[/g, "").replace(/\]/g, "").replace(/\</g, "").replace(/\>/g, "").replace(/\=/g, "").replace(/\+/g, "").replace(/\'/g, "").replace(/\"/g, "").replace(/\\/g, "").replace(/\//g, "").replace(/\,/g, "").replace(/\./g, "").replace(/\:/g, "").replace(/\;/g, "").replace(/ /g, "").replace(/!/g, ""); if(subject.length > 16){ subject = subject.substring(0,15); } url[i++] = "&filename=" + subject; } catch(e) { } var getUrl = url.join(""); window.open(getUrl, "_blank"); };