2

我想将我的电子邮件从一个有点不可靠的提供商(比如说 X)转移到 Gmail。不幸的是,电子邮件提供商不允许文件夹导出或直接 IMAP 链接。

我唯一能做的就是通过 POP3 将 Gmail 连接到 X,以便将 X 收件箱中的任何内容复制到 Gmail。

这是我设置的,它可以工作,但当然 POP3 只扫描收件箱。

我在收件箱以外的其他文件夹中有数千封电子邮件,所以我需要先将它们移动到收件箱。但是,我只能通过 X 的 Web GUI 移动消息,每轮只能移动一页消息。

所以我必须打开已保存的邮件文件夹,点击“全选”,选择“收件箱”并点击“移动”,然后页面将重新加载,我需要再次这样做......数百次。

我制作了一个 Javascript 函数(假设 MoveToInbox())来模拟这些操作,然后在 Firefox 中打开页面并启动 Firefox Scratchpad。所以,我可以在 Scratchpad 中一直按 Ctrl+R,然后等待页面重新加载,然后再按一次,这样可以节省大约 50% 的时间。

但是,我想知道,如果我能以某种方式使 Scratchpad 与该选项卡一起工作,以便它等待页面重新加载,然后执行脚本然后再次等待,从而消除所有手动重复任务。

我想我可以用 window.addEventListener 以某种方式做到这一点,但是这个对象似乎在页面重新加载时被清除了,所以有什么我可以使用的吗?

4

2 回答 2

0

我自己的快速回答是仅使用诸如GreaseMonkey之类的 Firefox 插件。

当然,解决方案在不同的情况下会有所不同,但我自己的是这个 GreaseMonkey Javascript:

// the function to select all messages and programmatically click on 
// move button:
function moveToInbox()
{
    selectAllCheckbox=document.getElementById("messagesForm")[0]; 
    mailboxSelector=document.getElementsByName('targetMailbox')[0];
    selectAllCheckbox.click(); // click on "select all" checkbox
    mailboxSelector.selectedIndex=1; //specify that we are moving to inbox
    inx.mail.mailbox.mailboxTransfer(); // execute provider's function for moving mail.
}

// This gets executed on any page that matches URL specified in Greasemonkey script properties
// I have put this to execute, if the URL is for the folder I want to move messages from.

messageList=document.getElementById("messagesForm")[0];
// in my case, if there are no more messages to move, the form is not created at all, so 
// I can check for its existance, to determine if I need to execute moving.
if (messageList == null)
{
    return;
}
else
{
    moveToInbox();
}
于 2012-10-04T06:39:13.857 回答
0

使用 iFrame

第一个问题是重新加载后变量和函数会丢失: -
使用<iframe>withsrc = "X"
现在跨域策略正在引起麻烦:
- 使<iframe>与在同一网站上src

然后,您可以轻松访问和操作网站iframeId.contentDocument

一个例子:

导航到google.com,使用 Inspect Element 添加 iframe:
<iframe src="https://www.google.ae" id="someID"> </iframe>
然后,您可以使用 JavaScript 对 iframe 执行任何操作:
someID.contentDocument.location.reload(); setTimeout('someID.contentDocument.getElementById('lst-ib').value="iframes rock"',1000); //You should use something better than setTimeout to wait for the website to load.

于 2015-11-08T12:35:49.687 回答