我们正在尝试使用 Unix 服务器获取未读电子邮件列表mailx -L
。但是,如果电子邮件主题的长度超过 25 个字符,则会被截断。
如何解决这个问题?
答案1
mailx
截断其输出以适合标准输出上的列数。为了获取列数,它将ioctl(1, TIOCGWINSZ, ...)
首先尝试 - 您的终端窗口大小 - 如果失败,它将使用COLUMNS
环境变量。所以试试这个:
COLUMNS=999 mailx -L | cat
在|cat
那里,所以mailx
它的标准输出不会是终端,从而迫使 ioctl 失败。
答案2
邮件通常只是文本文件(在信箱或者邮件目录格式),因此您可以使用grep
、sed
、awk
或任何脚本语言来处理它们。邮件的常见位置是/var/mail
、/var/spool/mail
或用户主目录中的某个文件/目录。
要提取邮件的主题,您可以grep
这样使用:
grep -E '^Subject: ' /path/to/mail
要删除“主题:”部分,请通过管道将其传递sed
:
...| sed -e 's/^Subject: //'
未读邮件的过滤更加复杂,因为已读/未读状态存储在不同的邮件标题行中。我猜你需要一个用 awk、Perl、Python 等编写的稍微复杂的脚本。我没有为此准备好经过测试的解决方案。