如何再次发送/ var / mail / root?


12

通过一些错误的配置,我在/ var / mail / root和/ var / mail / www-data中有很多电子邮件

我如何“循环”这些文件并再次发送每封邮件?

Answers:


17

formail,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

3
克里斯(kriss)也这样说:该解决方案假定您已经修复了本地别名或将消息发送回/ var / mail / root以外的其他位置的方法。例如,您可以执行“ formail -s / usr / sbin / sendmail -oi you@somewhere.else”来重定向所有消息。
larsks

假设现在已经正确配置了www-data和root,则类似“ for foo in ls /var/mail; do formail -s / usr / sbin / sendmail -oi $ foo <./$foo; done”的操作应循环每个文件并本地传递。
Tom

3
mutt -f /var/mail/www-data

然后在杂物间...

T.*
;b

T将其置于标记模式,。*标记所有消息。分号将下一个命令应用于所有已标记的消息,最后b将消息“反弹”到将提示输入的地址。

从记忆中,我认为

D.*

要么

T.*
;d

然后将清空邮箱。


0

/ var / spool / mail / xxx UNIX邮箱文件是简单的文本文件,其中邮件按顺序保留。每封邮件均以“发件人”行(不是邮件的一部分)开头,并带有发件人和接收日期,然后您将收到邮件标题,然后是邮件正文。

基本上,您可以循环检测文件中的From行,提取每条消息,然后使用python smtp模块或cpan的perl Net :: SMTP模块将其发送。

如果目标是另一个本地邮箱,则可以将邮件(包括“发件人”行)附加到该邮箱。如果您甚至不在乎真正针对root的邮件,甚至可以将整个根邮箱附加到另一个邮箱。

我应该有一些执行此操作的脚本,如果需要的话,将发布示例。

问题可能是获得消息的真正目标,因为如果它们以根邮箱结尾,则很可能从一开始就以根为目标?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.