linux-sed 应用-批量修改.eml邮件的接收时间

公司之前在用一套在线的CRM系统,现决定停用了,所以之前的客户邮件都需要从CRM系统导出。问题是导出的机制是用邮件客户端重新收一次,这要就导致所有邮件的接收时间变成此次接收时间,而不是邮件原始的收件时间了,这样不利于用户对历史邮件的查找(foxmail 里只显示一个时间,不能显示发送时间,要不然也可以让他们按发送时间排序),于时就想了个办法,把邮件都导成 .eml文件,然后修改它的接收时间为发送时间,这样再次导入邮件客户端就能很好的按时间排序了。

此次用到了 linux 下的 sed 等shell命令,其中正则表达式的调试颇费时间,特别记录了一下:

.eml邮件格式:

Return-Path: <xioh@163.com>
Delivered-To: hog@trade.alisoft.com
Received: (qmail 20460 invoked from network); 
Received: from unknown (HELO alswm-rule3.hst.jyl.itbu.alidc.net) (172.26.9.127)
  by 0 with SMTP; 23 Jul 2011 16:20:13 -0000
Message-ID: <6935039.1311438013166.JavaMail.admin@alswm-rule3.hst.jyl.itbu.alidc.net>
Date: Wed, 20 Jul 2011 09:57:16 +0800 (CST)
From: =?gbk?B?urJz7Q3Lnwuuo=?= <xionsh@163.com>
Reply-To: =?gbk?B?rJzH7Q3Lnwuuo=?= <xiosh@163.com>
To: =?gbk?Q?xuxiaoyan=28=D0=EC=CF=FE=D1=D2=A3=A9?= <xuxin@hoang.com>
Subject: =?gbk?B?1/TFwcu5tcS/qsax0qrH8w==?=
Cc: =?gbk?B?wu2zrA==?= <step@hog.com>, 
=?gbk?B?1tzBwbLFILrqycw=?= <zhouliangcai@hog.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; 
boundary="----=_Part_1375787_30476309.1311438013163"


------=_Part_1375787_30476309.1311438013163
Content-Type: text/html; charset=gbk
Content-Transfer-Encoding: quoted-printable


<DIV></DIV>
<DIV>=D0=EC=D7=DC3=BA</DIV>
 

shell 脚本如下: 修改邮件文件的发送时间为接收时间,并将此时间作为邮件名前辍重命名邮件。

#!/bin/bash
export IFS=$'\n'
subdir="modified"
filelist=`ls *.eml`
mkdir $subdir
for filename in $filelist
do
      d=`sed -n "1,15s/^\(Date: \)\(.* (CST)\r\)/\2/p" $filename`             #取出邮件的发出时间
      e=`sed -n "1,15s/^\(From: .*<\)\(.*\)\(>\r.*\)/\2/p" $filename`                                                 #取出邮件的发件人
      filename2=${filename:0:(${#filename}-4)} 
      filename2="${filename2:0:64}.eml"                                                                                        
      filename2="$subdir/From_$e,`date -d "$d" +%Y-%m-%d_%H:%M`_$filename2"
      cp   $filename $filename2                                                                                                         #用新文件名copy一份
      sed -i "1,15s/\(Received: .*; \)\(.*\)/\1$d/g" $filename2                                                         #修改邮件的接收时间
      #echo "cp"  "$filename"  $filename2 
done



参考:

http://sed.sourceforge.net/sed1line_zh-CN.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wxgnolux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值