##language:zh #pragma section-numbers off ##含有章节索引导航的 ZPyUG 文章通用模板 <<TableOfContents>> ## 默许导航,请保留 <<Include(ZPyUGnav)>> {{http://foto.zoomquiet.org/logo/kspeg-logo-v0.6-72.png}} ##startInc = KSPEG版:GgoogleGroup2mailam = * 文档属主: jessinio * 版本历史: * v0.5~090104 创立;ZoomQuiet 迁移到啄木鸟维基 == gg迁移需求 == 内部啓用了maillist服务, 需要把过去的在googlegroups中的邮件迁移回公司内部. == 分析 == === 数据的回源 === 迁移指定的googlegroups本应该对指定的服务索取数据的, 但现在googlegroups不提供API级的解决方案. 对于此问题, 可见如下讨论URL: * http://code.google.com/p/gdata-issues/issues/detail?id=27 就目前的情况分析, 相应的有其它三种解决: 1. 对web页面抓取, 取出相应的数据 1. 对RSS的定阅, xml的数据抓取 1. gmail的Email邮件download. 前两条总体是: `xml格式 -> email格式`, 非常麻烦, 或者工作量较大. 走gmail路线可以直接取得email格式数据. 但存在缺点: * 邮件的不完整性 决定迁移采取gmail的路线 === 数据的组织 === 将googlegroups数据迁移到公司的maillist(具体为mailman软件), 可以走如下路线: 1. email格式文件 -> MDA 1. email格式文件 -> mailman的归递程序 这里都需要对从googlegroups得到的email格式文件(具体说是从gmail从得到)需要做如下工作: 1. 对email文件的排序 1. 对eamil文件的重新整理 * 如果使用email格式文件 -> MDA的方法,那就需要先在maillist中增加邮件中From的地址, 否则maillist不接收的 * 请把mailman的require_explicit_destination设置为False 1. 对于email格式文件 -> mailman的归递程序, 需要为每份email文件伪造类似如下的一文件头字符串: * `From jessinio@nio.rdev.kingsoft.net Fri Nov 7 16:03:28 2008` == 实际迁移方法 == 如下两部分使用到自个写的python脚本: * [[attachment:migrate_gg_v0.1.py]] === 使用gmail的Email === 如下是脚本的交互过程: {{{ what can I do for you? d/D: download email to localhost mbox format s/S: send localhost mbox file to MDA m/M: make mbox file which can be use be maillist software }}} * 首先要下载gmail的email文件, 选项d {{{ which are your choice?d }}} {{{ User Name: richard.liao.i }}} * 请使用拥用完整goolgegroups邮件的gmail帐号 {{{ input user Password: }}} * 输入密码 * 如下是选项存放地和gmail中的label {{{ which label do you want download?[return to Inbox]Cpc which do you want to save email file?[return to /tmp/Cpc.box }}} * 如下为email的下载提示 {{{ writing.... 1 (RFC822 {4734} writing.... 2 (RFC822 {5364} writing.... 3 (RFC822 {7133} writing.... 4 (RFC822 {4559} writing.... 5 (RFC822 {4708} writing.... 6 (RFC822 {4821} writing.... 7 (RFC822 {7581} writing.... 8 (RFC822 {5168} writing.... 9 (RFC822 {4825} ... ... }}} === 使用脚本放置Email到新的maillist中 === 下载完gmail的email后, 脚本会再说询问要进行的动作, 如下: {{{ what can I do for you? d/D: download email to localhost mbox format s/S: send localhost mbox file to MDA m/M: make mbox file which can be use be maillist software }}} {{{ which are your choice?m }}} * 选择m, make一份新的email文件, 这里不使用S(通过MDA的方式,因为这会重发所有的email到MDA,比较浪费时间 {{{ where is the mbox file ?/tmp/Cpc.box which mbox will be save to/tmp/kcpycamp.mbox }}} * 填写刚才下载的email文件和新的email文件的存放地点 复制新的email文件到mailman的数据目录下: {{{ [root@ml /usr/home/jessinio]# cp /tmp/kcpycamp.mbox /usr/local/mailman/archives/private/kcpycamp.mbox/ [root@ml /usr/home/jessinio]# chown mailman:mailman /usr/local/mailman/archives/private/kcpycamp.mbox/kcpycamp.mbox }}} 重新归档: {{{ [root@ml /usr/home/jessinio]# /usr/local/mailman/bin/arch --wipe kcpycamp /usr/local/mailman/archives/private/kcpycamp.mbox/kcpycamp.mbox }}} == 迁移结果 == 最后的情况请见如下URL: ## * http://ml.rdev.kingsoft.net/pipermail/kcpycamp {{attachment:cpc-mailman.png}} 声明:: 1. 新的maillist中没有google公司华丽的web界面 1. 新的maillist不会像(至少现在不会像)google公司对Email的强大thread功能 * 我们在gmail里看到的邮件的thread来源可能很多, 如多个googlegroups, 我们现在只能针对一个googlegroups 1. 新的maillist的邮件可能有不完整性. 因为googlegroups不提供API, 我们只能使用(至少现在是这样)上面提到的`使用gmail的Email` == TODO == 1. 工具通用化,使用 cmd 模块友好化交互 1. 对大型历史列表的下载提供按照月度,进行分文件下载的支持 1. 对 .eml 的输出支持 1. 对 .txt 的输出支持 == Discuss == === web 也可以 === {{{ est <electronixtar@gmail.com> reply-to python-cn@googlegroups.com to python-cn`CPyUG`华蟒用户组 <python-cn@googlegroups.com> date Sun, Jan 4, 2009 at 19:23 subject [CPyUG:75765] Re: GoogleGroup邮件下载转换器 }}} 地址贴错了~~ * https://groups.google.com/group/python-cn/msg/f10ffa1331b56eb6?dmode=source&output=gplain 这个~~~纯文本~~~直接可以爬下来保存为.eml就可以用客户端打开了。导入mailman也比较方便~~~ {{attachment:snap-gg-thread.png}} * 的确,在每个线索页面中都有邮件源代码的链接,可以直接使用,,, ~ ZoomQuiet ##endInc ::-- jessinio <<DateTime(2009-01-04T06:07:29Z)>> ---- '''反馈''' 创建 by -- ZoomQuiet [<<DateTime(2009-01-04T08:58:18Z)>>]