在Linux终端中一行命令发送邮件

170

我知道在Linux中有一个名为mail的命令,可以通过命令行发送电子邮件。但是我如何从终端发送一行简单的电子邮件呢?

例如:

mail user@gmail.com [subject] [body]

不需要向用户发送任何确认或提示,直接发送电子邮件?

原因是,当特定事件在Java程序中发生时,我想通过电子邮件向自己发送简短的消息。我的想法是,我将使用Runtime.getRuntime()……等等从我的Java程序发送mail命令

我以前使用cron做过类似的事情,但当前的实现不使用cron,所以我需要尝试这个方法。

7个回答

232

邮件在Linux系统中可以代表多个程序。你需要使用的是sendmailpostfix。我建议使用后者。

你可以通过你喜欢的软件包管理器安装它。然后你需要配置它,一旦完成配置,就可以像这样发送电子邮件:

 echo "My message" | mail -s subject user@gmail.com

请查看手册以获取更多信息。

就配置 postfix 而言,在互联网上有很多文章介绍如何操作。 除非您在一个注册的公共服务器上拥有一个域名,否则通常希望将电子邮件转发到可以发送电子邮件的 SMTP 服务器。

例如,对于 Gmail,请按照http://rtcamp.com/tutorials/linux/ubuntu-postfix-gmail-smtp/ 或任何其他类似的教程进行操作。


4
如果你只需要发送电子邮件,那么 "ssmtp" 是一个更小、不像 Postfix 那样运行守护进程的强大包。它支持安全协议并可以与 Gmail 一起使用。 - oᴉɹǝɥɔ
8
"邮件程序'mail'当前未安装。您可以通过输入命令来进行安装:apt-get install mailutils" - Tom
更轻量级:nullmailerbsd-mailx包。对于大多数工作站来说已经足够了 :) 由于nullmailer包含一个sendmail接口,您甚至可以跳过bsd-mailx包并使用Hengjie的方法 - Izzy
2
@oᴉɹǝɥɔ ssmtp已经过时。请使用msmtp代替。 - Mattwmaster58
邮件-s "您的主题" dunn@mycompany.com <<< "正文消息在此处。" - Dung
echo "主题:sendmail 测试" | sendmail -f 发件人邮箱地址 -v 收件人邮箱地址 - Mihir Bhatt

41
echo "Subject: test" | /usr/sbin/sendmail user@domain.com

这使您可以在一个命令行中完成而无需回显文本文件。此答案基于 @mti2935 的答案,因此功劳归于他。


3
关于主题和正文的答案,补充一点:echo -e "Subject: test \n\n Body content here\n" | sendmail user@domain.com - emvidi

40

使用管道和echo命令可以避免提示或确认框。

echo "This is the body" | mail -s "This is the subject" user@gmail.com

https://dev59.com/fGsy5IYBdhLWcg3w3h2I#8260951 - rpax

15

对于Ubuntu用户:首先,您需要安装mailutils。

sudo apt-get install mailutils

如果您正在使用Gmail或SMTP,请设置一个电子邮件服务器。请按照此链接的说明进行操作。然后使用以下命令发送电子邮件。

echo "this is a test mail" | mail -s "Subject of mail" username@domain.com
如果您正在使用 Gmail,但仍然遇到某些身份验证错误,则需要更改 Gmail 的设置: 打开访问不安全应用程序的权限,请从此处进行操作。

14

你也可以使用sendmail:

/usr/sbin/sendmail user@domain.com < /file/to/send

注意:我使用Postfix+S-Nail。这是对我有效的方法。首先,我使用了“Rohit Gupta”的答案并下载了邮件实用程序,然后使用了你的方法,一切都正常工作了。 - Mohammed Baashar

6

这个答案真的太糟糕了。 - undefined

-2

发送简单邮件:

$ mail -s "test message from centos" recipient@example.com
hello from centos linux command line

Ctrl+D 完成操作


2
他正在在线命令中询问。 - Rohit Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接