如何通过UNIX的mailx命令发送电子邮件?

104

我如何通过UNIX mailx 命令发送电子邮件?

10个回答

116

一个例子

$ echo "something" | mailx -s "subject" recipient@somewhere.com

发送附件

$ uuencode file file | mailx -s "subject" recipient@somewhere.com

并且发送附件并编写邮件正文

$ (echo "something\n" ; uuencode file file) | mailx -s "subject" recipient@somewhere.com

4
我尝试了一下,但没有任何反应。它既没有给出错误消息,也没有将邮件发送到myname@gmail.com。是否需要进行服务器配置? - user269484
2
不需要任何配置。请检查您的互联网连接。我通过电缆直接连接到互联网,不使用代理或其他任何东西,因此在我的端上可以正常工作。 - ghostdog74
3
你还应该检查收件箱中的错误消息。即运行mail命令。 - hafichuk
3
请注意,uuencode是一种过时的技术,来自一个已经过去的千年,它不能产生我们今天所说的“附件”。它基本上在消息文本末尾放置了一段机器可读的混乱代码。在当今这个时代,您最好使用一个正确支持MIME的邮件客户端。不幸的是,没有一种通用支持MIME功能的mailx替代品,但如果您有mutt,那可能是最简单的解决方案。 - tripleee
5
Gmail不接受未经授权的IP地址发送的电子邮件。请阅读https://support.google.com/mail/answer/10336。 - user2065736

35

给你:

echo "Body" | mailx -r "FROM_EMAIL" -s "SUBJECT" "To_EMAIL"

注意:邮件主体和收件人应该放在双引号中。 在替换电子邮件地址时,请从FROM_EMAILTo_EMAIL中删除引号。


1
在 Mac 上,如果您使用 -r 选项,则会从 mailx 命令收到错误。mailx: illegal option -- r Usage: mailx [-EiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [-F] to-addr ... mailx [-EHiInNv] [-F] -f [name] mailx [-EHiInNv] [-F] [-u user] mailx -e [-f name] mailx -H - jcpennypincher
你可以使用-S选项,来自a@b.com - Kalpesh Soni

9
mailx -s "subjec_of_mail" abc@domail.com < file_name

通过mailx实用程序,我们可以从unix发送文件到邮件服务器。 在上面的代码中,我们可以看到: 第一个参数是-s“邮件主题” 第二个参数是邮件ID,最后一个参数是我们要附加的文件名。


2
这不是附加文件,而是将文件内容放入正文中。 - Guus
mailx:无法发送消息:进程以非零状态退出 - Tomas

6
mail [-s subject] [-c ccaddress] [-b bccaddress] toaddress

-c和-b是可选的。

-s:指定主题;如果主题包含空格,请使用引号。

-c:将副本发送给以逗号分隔的用户列表。

-b:将暗送副本发送给以逗号分隔的用户列表。

希望我的回答解决了您的疑问。


6

MUTT命令可以使其更快

echo "Body Of the Email"  | mutt -a "File_Attachment.csv" -s "Daily Report for $(date)"  -c cc_mail@g.com to_mail@g.com -y
  1. -c 邮件抄送列表
  2. -s 主题列表
  3. -y 发送邮件

我必须使用“--”来分离附件,以便将其工作如下:echo "" | mutt -s "test" -a ./file -- name@mail.com -y - subtleseeker

4

从手册页中可以看到:

发送邮件

要向一个或多个人发送消息,可以使用 mailx 带有收件人名称的参数来调用。然后用户需要输入他的消息,紧接着在行首输入“control-D”。

换句话说,mailx 从标准输入读取要发送的内容,并且可以像正常情况下一样进行重定向。例如:

ls -l $HOME | mailx -s "The content of my home directory" someone@email.adr

3
echo "Sending emails ..."
NOW=$(date +"%F %H:%M")
echo $NOW  " Running service" >> open_files.log
header=`echo "Service Restarting: " $NOW`


mail -s "$header" abc.xyz@google.com,   \
              cde.mno@yahoo.com, \ < open_files.log

2
这里有一个多功能函数,可以处理带有多个附件的邮件发送:
enviaremail() {
values=$(echo "$@" | tr -d '\n')
listargs=()
listargs+=($values)
heirloom-mailx $( attachment=""
for (( a = 5; a < ${#listargs[@]}; a++ )); do
attachment=$(echo "-a ${listargs[a]} ")
echo "${attachment}"
done) -v -s "${titulo}" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://$1 \
-S from="${2}" \
-S smtp-auth-user=$3 \
-S smtp-auth-password=$4 \
-S ssl-verify=ignore \
$5 < ${cuerpo}
}

函数调用: enviaremail "smtp.mailserver:port" "from_address" "authuser" "'pass'" "destination" "list of attachments separated by space"

注意:在调用中删除双引号

此外,请记得在使用该函数之前,外部定义电子邮件的$titulo(主题)和$cuerpo(正文)


1
自定义发件人地址。
MESSAGE="SOME MESSAGE"
SUBJECT="SOME SUBJECT"
TOADDR="u@u.com"
FROM="DONOTREPLY"

echo $MESSAGE | mail  -s "$SUBJECT" $TOADDR  -- -f $FROM

man mail 中的一段摘录: -f [文件] 读取用户的mbox(或指定的文件)内容进行处理;当mailx退出时,它会将未删除的邮件写回到该文件中。字符串文件的处理方式与下面的folder命令描述的相同。 - ZJ Lyu
这取决于您使用的版本。有多个不兼容的竞争性mailmailx命令,具有不同的选项。 - tripleee

0

如果您想发送超过两个人或分发列表:

echo "Message Body" | mailx -s "Message Title" -r sender@someone.com receiver1@someone.com,receiver_dl@.com

这里:

  • -s = 主题或邮件标题
  • -r = 发件人邮件或分发列表

请问为什么要使用echo来传递消息正文?如果我省略它并从MailX执行,光标会闪烁,就像在等待输入一样。 - LonelyRogue
它正在等待您的输入。 - tripleee

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