- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试将多个邮箱导出到数据库。我当前的脚本将连接 IMAP 并循环播放所有消息。尽管对于较大的邮箱,这将不起作用,并且会减慢甚至停止。
想法是每天运行脚本,将所有不在数据库中的消息“复制”到数据库中。获取大量电子邮件的最佳方式是什么(2 万封邮件分布在大约 40 - 50 个文件夹中)。
最终,这将需要从一台服务器上工作,每天扫描数百甚至数千个帐户(想象一下数据量)。它将邮件(uid 和主题)存储到数据库中,并创建一个将存储在数据服务器上的包(因此它还需要获取附件)。
最佳答案
所以您想通过 IMAP 执行电子邮件备份。有专业的软件工具可以执行此操作。
让我们从简单的事情开始:从收件箱文件夹中为一个特定用户下载一封电子邮件。这需要您 (a) 使用用户的凭据登录,(b) 选择收件箱文件夹,以及 (c) 下载邮件(假设您已经知道它的 UID,即 55)。您在 IMAP 中按如下方式执行此操作(仅请求 - 未显示响应):
01 LOGIN username password
02 SELECT INBOX
03 UID FETCH 55 BODY[]
特定文件夹中的每封邮件都被赋予一个 UID .这是永不更改的邮件的唯一标识符 - 该文件夹中 中的任何其他邮件都不能使用它。新消息的 UID 必须高于之前的消息。这使它成为确定您之前是否已下载邮件的有用工具。
下一步:让我们看看下载 INBOX 文件夹中的所有新邮件。假设您是第一次下载邮件,收件箱当前有 UID 为 54、55 和 57 的邮件。您可以使用如下命令一次性下载这些邮件:
03 UID FETCH 54,55,57 BODY[]
(如果要下载的内容很多,您可能希望分批进行(例如一次 30 次)。)这样做之后,您将存储到目前为止下载的最高 UID。下次,您可以检查是否有更高的 UID,如下所示:
04 UID FETCH 58:* UID
这将(仅)检索具有从 58 开始的 UID 的消息的 UID。如果得到结果,则下载这些结果,并再次存储 UID。等等。
有一个问题。只要文件夹的 UIDVALIDITY 属性(包含在对 SELECT 命令的响应中)不变,消息的 UID 就是有效的。如果由于某种原因发生变化,该文件夹将失效,您需要重新下载该文件夹中的所有邮件。
最后,您希望将其扩展为适用于所有用户的所有文件夹。为了获取特定用户的所有文件夹,您可以使用 IMAP LIST 命令:
05 LIST "" "*"
您需要事先知道用户的凭据并遍历它们。
这是您需要执行的操作背后的 IMAP 理论。用 PHP 实现它留作练习。
关于PHP 获取超过 20000 封 imap 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166280/
我有一堆代码执行 IMAP 命令“search, idle, done, search, idle, done, search, ...”。 是否有可能某些消息在搜索和空闲命令之间到达,因此只能在空闲
(使用IMAP命令,而不借助任何其他邮件程序包) 最佳答案 我不确定您对imap的了解程度如何,但是基本上在登录后,“选择”源邮箱,“复制”邮件,然后“删除”邮件(如果是,则“删除”旧邮箱)现在是空的
我正在编写一个 IMAP 爬虫,它是开源应用程序的一部分,对于增量爬网,我想使用消息 UID 来确定我是否已经看到了特定消息。 现在我找到了 a post从 2007 年开始说 IMAP UID 并不
我注意到 libcurl 支持 IMAP,但在文档和示例中没有找到任何内容 http://curl.haxx.se/libcurl/c/imap.html很穷。有谁知道如何在这个库中使用这个协议(pr
IMAP UID 是否保证为数字?我读过 RFC3501 中的部分,它说: Unique identifiers are assigned in a strictly ascending fashio
IMAP UID 是否保证为数字?我读过 RFC3501 中的部分,它说: Unique identifiers are assigned in a strictly ascending fashio
我正在使用开源 IMAP C# 库 IMapX (http://hellowebapps.com/products/imapx/)。当我试图从收件箱中获取电子邮件时,需要花费很多时间。有没有办法根据接
我正在尝试使用 Limilabs imap 库连接到电子邮件; tcpc = new System.Net.Sockets.TcpClient("imap.gmail.com", 993); 工作
我正在尝试使用 imap 方法通过 php 打开电子邮件,但它给我一个错误无法打开流 {imap.gmail.com:993/imap/ssl}INBOX,这是我的代码 $hostname = '{i
有没有办法确定给定电子邮件地址的 POP 或 IMAP 服务器?我正在为非技术用户构建一个应用程序,我真的不想打扰他们询问他们的 IMAP/POP 服务器。 mail2web.com这样做,但我不确定
如何确定通过 APPEND 添加的消息的 UID到邮箱?通过 STATUS我可以事先得到下一个值的预测,我可以 SEARCH之后,但依赖这些会引入竞争条件,因为可能在这些命令之间添加了其他消息。 最佳
这个搜索查询对我来说似乎有效: UID SEARCH OR ( OR ( OR (FROM "def@gmail.com") (FROM "abc@gmail.com")) (FROM "ghi@gm
我正在使用以下代码以编程方式验证电子邮件。 Properties properties = new Properties(); Session emailSession = Session.getDe
我正在使用 OpenSSL 连接到邮件服务器。 POP3 工作正常,但 IMAP 有问题。基于 CAPABILITY 命令服务器支持 PLAIN、NTLM 和 GSS-API 认证方法。 我想使用 P
我正在使用以下代码建立 IMAP 连接。我想阅读电子邮件。我读了这个文件 link无法从这里继续。 我的代码: #lang racket (define imap-server "*****") (d
在尝试使用 php 的 imap 函数时,我无法连接到 Gmail 的 imap 服务器。我正在使用: $mail = imap_open('{imap.gmail.com:993/imap/ssl/
我试图更好地理解 Gmail API . stated benefits 之一Gmail API 的最大特点是它可以“提供比 IMAP 显着的性能改进”。 Gmail API 和协议(protocol
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在制作一个支持 POP3 和 IMAP 的邮件客户端。我正在使用 vmime api 用 C++ 对客户端进行编程。我的问题是:同步邮件的最佳方式是什么? 我认为标识符是个好方法,但我不知道同步邮
我正在制作一个支持 POP3 和 IMAP 的邮件客户端。我正在使用 vmime api 用 C++ 对客户端进行编程。我的问题是:同步邮件的最佳方式是什么? 我认为标识符是个好方法,但我不知道同步邮
我是一名优秀的程序员,十分优秀!