linux-sed 應用-批量修改.eml郵件的接收時間

來源:互聯網
上載者:User

公司之前在用一套線上的CRM系統,現決定停用了,所以之前的客戶郵件都需要從CRM系統匯出。問題是匯出的機制是用郵件用戶端重新收一次,這要就導致所有郵件的接收時間變成此次接收時間,而不是郵件原始的收件時間了,這樣不利於使用者對曆史郵件的尋找(foxmail 裡只顯示一個時間,不能顯示發送時間,要不然也可以讓他們按發送時間排序),於時就想了個辦法,把郵件都導成 .eml檔案,然後修改它的接收時間為發送時間,這樣再次匯入郵件用戶端就能很好的按時間排序了。

此次用到了 linux 下的 sed 等shell命令,其中Regex的調試頗費時間,特別記錄了一下:

.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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.