如何从命令行通过电子邮件发送附件


25

是否可以通过命令行通过电子邮件发送附件?

如果可能的话,我想简单一些:

mail -a myfile.txt -t me@example.com -s "Here's my file"

缺省的ubuntu命令行邮件用户代理mail(aka mailx)是MIME忽略的,因此无法以非1980年代的任何方式处理附件。这是一个很好的问题,我正在寻找规范的Canonical MUA。还有更多。
msw

Answers:


18

在Ubuntu存储库中的所有邮件用户代理中,mutt似乎是受长期支持支持的命令行MUA。

根据手册,您可以执行以下操作:

mutt -a myfile.txt -s "Here's my file" -- me@example.com

因为它也需要一个邮件传输代理,所以它不会随处可见。最受欢迎的是:

  • 古老的sendmail
  • 后缀
  • exim4
  • 邮箱
  • 空邮件

Canonical似乎唯一支持的是postfix(感谢Steve的更正)和exim4

也可以说xdg-email也是一种适当的Ubuntu MUA,但这是一个准系统前端,仅代表您执行首选的MUA

如果您需要哪种MTA可能适合您的建议,请在此处打开另一个问题。


好问题,谢谢。您提示我让邮件在我的盒子上工作。我使用nullmailer MTA盲目地中继到我的ISP,并且示例mutt命令按宣传的方式工作。顺便说一句,nullmailer的前端有一个伪造的sendmail,因此,大多数希望与sendmail进行对话的程序在我的零努力下被改组为真正的MTA。
msw

MSW,我不太确定为什么您声称exim4是唯一的规范支持,后缀也很重要,如果从ubuntu-server安装中选择“邮件服务器”任务选择,则启用了postfix。我相信exim4是debian的默认MTA,在过去,打包首选项可能导致默认情况下将其拉入,但有一段时间,后缀肯定是Ubuntu中首选的MTA。
史蒂夫·比蒂

哦,还要注意,如果您将bsd mail / mailx用作您的(不支持MIME)MUA,则仍然需要某种MTA才能实际发送邮件。但是无论如何,杂种羊还是对你更好的。:-)
史蒂夫·比蒂

11

我在发送附件文件时也遇到了麻烦。当我发送不带附件的电子邮件时,它成功了,但没有附件。这个问题是存在有sendemailmuttmailmailxuuencode的命令。

幸运的是,它很有趣地解决了。我使用Gmail发送电子邮件。您可以配置gmail,以便通过终端上的命令发送电子邮件,如http://www.linuxandlife.com/2013/01/send-email-from-linux-terminal.html所声明 。

您可以使用以下方式发送文本电子邮件:

mail -s "hello" RECEIVE@mail.com < /home/masoud/YOURFILE.txt 

但是您不能发送与附件相同的文件,如下所示:

mail -s "hello" RECEIVE@mail.com -a /home/masoud/YOURFILE.txt

要么:

mail -s "hello" -a /home/masoud/YOURFILE.txt RECEIVE@mail.com

最终,我了解到只有这种格式才能发送附件:

echo "your message here" | mail -s "title" -a /home/masoud/YOURFILE.txt RECEIVE@mail.com

有趣的是,不同之处在于存在“ echo”命令。

更新时间:201808

似乎该-a选项已被大写 更改-A为附件。的-a似乎是根据不断变化的报头的文档


优秀!谢谢。我试图将.zshrc文件发送给某人,尽管我花mail了很多时间发送快速消息,但尝试发送附件却没有用。我只需要确认就可以认识到论证顺序非常重要。这对我有用:mail -s "zshrc" -a ~/.zshrc username@example.com...当然,我仍然必须键入消息正文并单击ctrl+d最后一个空白行。
Karl Wilbur 2015年

使用mail username@example.com -a ~/.zshrc做了“工作”,因为它发送了消息,但没有发送文件。如果我尝试过mail username@example.com -a ~/.zshrc -s 'zshrc',收件人地址后面的参数将被忽略是显而易见的。
Karl Wilbur 2015年

@Masoud lnk损坏了…想对其进行更新,但是您知道您提供了什么文档,所以我让您知道了
Philippe Gachoud

6

我发现命令和参数最近已更改。

如果要使用此命令发送附件:

mail -s "your subject" you@gmail.com -A /your/attachment/absolute/path < /home/you/message.txt

选项attachment应该-A是CAPITAL A


3

您可能要从外壳发送文件,否则请使用Thunderbird

在这种情况下,尝试thunderbird -remote ...很有用-假设通常运行雷鸟:

该命令将打开正在运行的雷鸟实例的邮件撰写窗口。
“发件人”地址是您在雷鸟中配置的默认地址
此外,使用现有的帐户设置,不需要单独的设置。

对于地址为you@example.com,主题为“ S”,正文为“ B”和附件的邮件/some/absolute/file.txt,命令为

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='you@example.com',body='B',attachment='/some/absolute/file.txt')"

有两个问题:

附件文件必须由绝对路径指定,这在实践中很繁琐。可以通过使用readlink -f解析相对路径来处理:

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='you@example.com',body='B',attachment='$(readlink -f file.txt)')"

另外,命令太长。使用带有四个参数的shell脚本或shell函数:

thunderbird-compose () {
    thunderbird -remote "xfeDoCommand(composeMessage,subject='$1',to='$2',body='$3',attachment='$(readlink -f $4)')"
}

使用此功能,该命令变得可读:

thunderbird-compose 'Some Subject' test@example.com 'Body of message' file1

将会打开一个雷鸟“写” 窗口,其中带有附件,并且填写了“从”,“到”,“主题”和正文文本。可以在发送前对其进行编辑


2

heirloom-mailxdebian中的package提供了mailx轻松发送mime附件的命令。为我工作

 mailx -a attachment.zip -s subject rctp@domain.to

1
这是我需要的缺少的东西;RH-alikes中的mailmailx包含-a用于文件附件,但Debian-alikes中包含的文件没有。
DopeGhoti

0

我希望添加另一个答案,该答案用于添加正文和附件。干杯!!

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- recipient@domain.com
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.