1

我正在尝试在没有用户干预的情况下从 GMail 帐户发送和接收已知结构的邮件。

有没有一种优雅的方法可以从 Firefox 扩展建立 IMAP 和 SMTP 连接,而不会通过涉及C++Python使事情变得过于复杂?

4

2 回答 2

1

您必须使用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 的实现还没有准备好)。

于 2012-07-30T09:47:17.000 回答
0

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 连接到任意服务器,所以您应该能够窃取此代码!

于 2012-07-30T08:51:00.360 回答