微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

maildir头问题

我有followign bash脚本来更新maildir文件的mtimes:

#!/bin/bash for i in /test/emailfile do date=$(sed -n '/Received: from/ { :a; n; /;/ {s/.*; //p;q}; ba }' "$i") newdate=$(date -d "$date" +'%Y%m%d%H%M.%s') touch -t "$newdate" "$i" done

这个脚本一直工作正常,像这样的标准头文件

Delivery-date: Sun,22 Apr 2007 00:15:13 -0600 Received: from an-out-0708.google.com ([209.85.132.243]) by x.xxxx.com with esmtp (Exim 4.63) (envelope-from <[email protected]>) id 1HfVLs-0002Io-RQ for [email protected]; Sun,22 Apr 2007 00:15:13 -0600

哪个有2007年交货date。 如果我触摸该文件,以便文件date从今天开始,然后运行我的脚本,则文件date将恢复为接收date。

但是,当试图使用以下标头在电子邮件上运行我的脚本时:

如何在Linux上使用PHP从本地主机发送电子邮件

设置本地SMTP和POP3用于testing邮件发送和接收循环

Perl:SMTP无法连接到邮件服务器

Mutt命令的多个头

shell脚本发送邮件

Delivery-date: Mon,15 Dec 2008 17:26:37 -0800 Received: from xxxxxx ([130.194.13.165]) by xxxxxxx with esmtp (Exim 4.69) (envelope-from <[email protected]>) id 1LCOhp-0006fm-2g for [email protected]; Mon,15 Dec 2008 17:26:37 -0800

date显然没有恢复。 我看不出标题在任何方面都明显不同。 我需要重新设置mtimes,因为许多邮件客户端使用filetime来显示从时间的接收。 我的脚本已经处理了超过3000封电子邮件,确保所有客户端都以正确的顺序显示电子邮件,这些电子邮件是移动的服务器和所有文件具有相同的date,但由于某种原因,它不会在特定的电子邮件上工作。 我有没有明显的脚本?

编辑:date显然是从脚本恢复,但依赖mtimes的客户端不会显示此消息,无论脚本设置的date。 权限与布局和文件名格式相同。 以下是来自ls -la的信息

-rw-rw---- 1 username username 11769 Dec 14 21:25 1229318728.H329820P11297.xxxxx.serverxxxxx.com:2,S -rw-rw---- 1 username username 3366 Dec 15 17:26 1229390797.H476913P25671.xxxxx.serverxxxxx.com:2,S -rw-rw---- 1 username username 1149 Dec 22 05:39 1229953142.H901034P11016.xxxxx.serverxxxxx.com:2,S -rw-rw---- 1 username username 7557 Dec 23 15:43 1230075791.H700954P8392.xxxxx.serverxxxxx.com:2,S

不能正确显示文件是上面的第二个。 有没有什么办法可以debugging为什么会这样呢?

如何使用mailx重命名附件?

spamassassin和spamc的不同结果

通过java代码调用Linux的“mailx”:message-text总是进入附件

从过去的UUCP爆炸? 下一步是什么?

如何devise一个电子邮件系统

它似乎为我工作得很好,试试这个小小的,看看你得到什么。

#!/bin/bash echo 'Delivery-date: Sun,22 Apr 2007 00:15:13 -0600' | sed -n '/Received: from/ { :a; n; /;/ {s/.*; //p;q}; ba }' date -d "Sun,22 Apr 2007 00:15:13 -0600" +'%Y%m%d%H%M.%s' echo 'Delivery-date: Mon,15 Dec 2008 17:26:37 -0800' | sed -n '/Received: from/ { :a; n; /;/ {s/.*; //p;q}; ba }' date -d "Mon,15 Dec 2008 17:26:37 -0800" +'%Y%m%d%H%M.%s'

我得到(按预期):

Sun,22 Apr 2007 00:15:13 -0600 200704221415.13 Mon,15 Dec 2008 17:26:37 -0800 200812161026.37

所以我不知道为什么你不工作,虽然这个脚本的输出应该是一个很好的起点。

你可以做的另一件事是临时修改你的脚本,如下所示:

: : : : : echo touch -t "$newdate" "$i" touch -t "$newdate" "$i" : : : : :

这将输出你正在尝试的实际命令。

还要检查目录和单个文件文件权限。

什么是“ls -l”(mtime)和“ls -lc”(ctime)给你的实际可疑的邮件文件? 这可能是你的脚本工作正常vut用户电子邮件客户端不使用mtime / ctime。

编辑后:

引用“但是,依赖于mtimes的客户不会显示这个消息,不管脚本是如何设置日期的”,我的回应是客户端依赖于mtimes。

解释夏洛克自己,一旦你消除了所有其他的可能性,不管怎样,剩下的不可能是必然的。 还有一件事我注意到了:你是不是只是说这个信息根本就没有被显示出来(或者是我认为我们正在谈论的是错误的日期)?

如果是后者,则需要查看邮件客户端,以查看其实际获取日期的位置。 出于兴趣,客户认为它是什么日期(并且是否匹配标题中的任何日期?

如果前者,我们可以讨论这个问题。

我认为这是(客户端)你需要从这里走,因为我的专业知识比电子邮件客户端更在脚本,我可能无法进一步帮助。 不过,我很想看看结果如何,所以我最喜欢这个问题。

以下脚本使用日期而不是邮件消息的“接收日期”属性。 这将日期设置为与某些邮件应用程序使用的日期相匹配,并简化了sed语句。 当遇到错误/无效的日期时,它还包括改进的错误处理。

#!/bin/bash echo "Process folder : $@" for i in $( ls -1 $@ ) do # date=$(sed -n '/Received: from/ { :a; n; /;/ {s/.*; //p;q}; ba }' "$i") # date=$(sed -n -f ~/scripts/fix.sed "$i") date=$(sed -n '/^Date: / {s/^Date: //p;q}' "$i") newdate=$(date -d "$date" +'%Y%m%d%H%M.%s') returnCode=$? if [ "$returnCode" != "0" ] then echo "Date Return Code : $returnCode" echo "Message file : $i received at : $date" fi touch -c -t "$newdate" "$i" done

你确定 – 它对我有用。

我做的唯一的变化是:

#!/bin/bash for i in "$@" do date=$(sed -n '/Received: from/ { :a; n; /;/ {s/.*; //p;q}; ba }' "$i") newdate=$(date -d "$date" +'%Y%m%d%H%M.%s') touch -c -t "$newdate" "$i" done

touch -c使文件不会被触摸创建。

for i in "$@"所以它运行在命令行参数而不是一个固定的文件

$ touch data2 ; ls -l data2 -rw-r--r-- 1 leeder leeder 250 2009-01-22 11:43 data2 $ bash test.sh data data2 ; ls -l data2 -rw-r--r-- 1 leeder leeder 250 2008-12-16 01:26 data2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐