![我怎样才能再次发送 /var/mail/root?](https://linux22.com/image/499979/%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E5%86%8D%E6%AC%A1%E5%8F%91%E9%80%81%20%2Fvar%2Fmail%2Froot%EF%BC%9F.png)
由于一些错误配置,我在 /var/mail/root 和 /var/mail/www-data 中有很多电子邮件
我怎样才能“循环”这些文件并在下次发送每封邮件?
答案1
邮件,procmail 的一部分(可能已经在您的系统中可用)可以接收邮箱,将其拆分为消息,然后对每个消息运行命令。从手册页:
-s The input will be split up into separate mail messages, and piped
into a program one by one (a new program is started for every
part). -s has to be the last option specified, the first argument
following it is expected to be the name of a program, any other
arguments will be passed along to it. If you omit the program,
then formail will simply concatenate the split mails on stdout
again. See FILENO.
因此你可以按照我认为你想要的方式做:
formail -s /usr/sbin/sendmail -oi -t < /var/mail/root
答案2
mutt -f /var/mail/www-data
然后在 mutt 内...
T.*
;b
T 将其置于标记模式,.* 标记所有邮件。分号将下一个命令应用于所有标记的邮件,最后 b 将邮件“反弹”到它将提示的地址。
根据记忆,我认为
D.*
或者
T.*
;d
然后将清空邮箱。
答案3
/var/spool/mail/xxx unix 邮箱文件是简单的文本文件,其中按顺序保存邮件消息。每封邮件消息都以“发件人”行(不属于邮件的一部分)开头,其中包含发件人和接收日期,然后是邮件标题,然后是邮件正文。
基本上,您可以循环文件检测此类发件人行并提取每条消息,然后使用 cpan 中的 python smtp 模块或 perl Net::SMTP 模块等工具发送它们。
如果目标是另一个本地邮箱,您只需将邮件(包括发件人行)附加到其中即可。如果您不介意获取真正针对根邮箱的邮件,甚至可以将整个根邮箱附加到另一个邮箱。
我应该有一些可以做到这一点的脚本,如果你需要的话我会发布一些例子。
问题可能在于获取消息的真正目标,因为如果它们以根邮箱结束,那么它们可能从一开始就以根邮箱为目标?