2014-09-23 91 views
1

我在試圖創建一個Thunderbird擴展,其中一個引導/無重啓類型(我的意思是,JavaScript代碼是而不是從覆蓋層運行。各種活動)。在發送郵件時獲取Thunderbird擴展的發件人和收件人

在某些時候,當用戶決定發送消息時,我想檢查發件人和收件人(收件人,抄送,密送),以便對他們執行一些檢查。

我已經設置和工作的事件監聽器的數量,其中包括一個用於確認發送消息時正確觸發的compose-send-message事件。

在那裏,我無法找到如何獲取發件人電子郵件地址以及所有收件人的電子郵件地址。我試圖用兩種:

let fields = components.classes["@mozilla.org/messengercompose/composefields;1"]. 
    createInstance(components.interfaces.nsIMsgCompFields) 

,並用:

let params = components.classes["@mozilla.org/messengercompose/composeparams;1"]. 
    createInstance(components.interfaces.nsIMsgComposeParams); 

let fields = params.composeFields; 

但無論如何fields.hasRecipients返回false,並且如fields.to爲空(或空,不能完全回憶)。看起來他們沒有被TB設置。

當然,我搜索了周圍,也在TB覆蓋延伸相關的線程,但沒有運氣。有一個SO線程here,似乎不完全回答這個問題,因爲它只是關於發件人。
其他參考文獻:SO againMozillaZineTB stdlib

+0

在此期間,我得到一些提示從這個論壇:https://groups.google.com/forum/#!topic/mozilla.dev.apps.thunderbird/QH39UnH4YlE,https://開頭groups.google.com/forum/#!topic/mozilla.dev.extensions/Lj93jF_2ZNU – superjos 2014-09-26 19:17:14

回答

0

好吧,感謝來自mozilla.dev.apps.thunderbird threadmozilla.dev.extensions thread的人們的幫助,我可以從compose-send-message事件監聽器中訪問發件人和收件人。

下面是相關的代碼...其實,多一點:果汁僅有不到onComposeSendMessage

var windowMediator = components.classes['@mozilla.org/appshell/window-mediator;1']. 
    getService(components.interfaces.nsIWindowMediator); 

var listener = new Listener(windowMediator); 
windowMediator.addListener(listener); 

function Listener (windowMediator) { 

    var self = this; 
    var _mediator = windowMediator; 
    var _compose = null; 

    this.onOpenWindow = function (aWindow) { 
    // [...] 

    _compose = aWindow.docShell. 
     QueryInterface(components.interfaces.nsIInterfaceRequestor). 
     getInterface(components.interfaces.nsIDOMWindow); 

    _compose.addEventListener('compose-send-message', self.onComposeSendMessage, true); 
    }; 

    this.onComposeSendMessage = function (event) { 
    event.currentTarget.removeEventListener(event.type, self.onComposeSendMessage, true); 

    // event.currentTarget.gMsgCompose <--> _compose.gMsgCompose 

    // Get sender 
    log(_compose.gMsgCompose.identity.email); // DEBUG with custom log function 

    // Get recipients 
    log(_compose.gMsgCompose.compFields.to); // DEBUG 
    log(_compose.gMsgCompose.compFields.cc); // DEBUG 
    log(_compose.gMsgCompose.compFields.bcc); // DEBUG 
    }; 

    this.onCloseWindow = function() { 
    _mediator.removeListener(self); // Remove itself, so to not receive message twice 
    }; 

    // [...] 

} 

再次,感謝所有這些組進行反饋。

0

我已經做得更簡單了。

var win = Services.wm.getMostRecentWindow("msgcompose"); 
composeFields = {}; 
win.Recipients2CompFields(composeFields); 
// composeFields has more properties than this like cc and bcc but the 
// below is what you asked for. 
Components.utils.reportError(composeFields.to); // Debug output. 
var sender = document.getElementById("msgIdentity").description 
相關問題