我正在尝试在没有用户干预的情况下从 GMail 帐户发送和接收已知结构的邮件。
有没有一种优雅的方法可以从 Firefox 扩展建立 IMAP 和 SMTP 连接,而不会通过涉及C++或Python使事情变得过于复杂?
您必须使用nsISocketTransportService.createTransport()打开连接,如下所示:
var Cc = Components.classes;
var Ci = Components.interfaces;
var socket = Cc["@mozilla.org/network/socket-transport-service;1"]
.getService(Ci.nsISocketTransportService)
.createTransport(["ssl"], 1, "pop.gmail.com", 995, null);
var input = socket.openInputStream(Ci.nsITransport.OPEN_UNBUFFERED, 0, 0);
var scriptableInput = Cc["@mozilla.org/scriptableinputstream;1"]
.createInstance(Ci.nsIScriptableInputStream);
scriptableInput.init(input);
var output = socket.openOutputStream(Ci.nsITransport.OPEN_UNBUFFERED, 0, 0);
这将为您提供输入和输出流。您可以通过 接收数据nsIScriptableInputStream.read()
并通过 发送数据nsIOutputStream.write()
。但是您仍然必须自己实现 IMAP/SMTP 逻辑(您不能使用 Thunderbird 中的当前实现,因为它是用 C++ 编写的,并且新的基于 JavaScript 的实现还没有准备好)。
https://bugzilla.mozilla.org/show_bug.cgi?id=733573是关于为 Web 应用程序实现 TCP API;这是一项正在进行的工作,最多可能仅在 Firefox 17 中可用。但是,如果您阅读了补丁(https://bugzilla.mozilla.org/attachment.cgi?id=643432&action=diff#a/b2g/components/TCPSocket.js_sec1),TCPSocket 对象几乎可以提供制作所需的一切SSL 连接到任意服务器,所以您应该能够窃取此代码!