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


Answers:


107

一个例子

$ 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

2
无需任何配置。检查您的互联网连接。我通过电缆直接连接到Internet,我不使用代理服务器或任何代理服务器,因此它可以正常工作。
ghostdog74

2
您还应该在收件箱中检查错误消息。即跑mail
hafichuk

2
但是请注意,这uuencode是过去千年的遗留技术,它不能产生我们今天所说的“附件”。基本上,它在消息文本的末尾添加了一个机器可读的杂物。在当今时代,正确识别MIME的邮件程序将为您提供更好的服务。不幸的是,目前还没有普遍支持的mailxMIME功能替代,但是如果您有mutt,那可能是阻力最小的途径。
2014年

5
@ user269484 Gmail不接受来自未经授权IP地址的电子邮件。阅读support.google.com/mail/answer/10336
Manas Jayanth

33

这个给你 :

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

PS。正文和主题应使用双引号引起来。从取出的报价FROM_EMAILTo_EMAIL而替代电子邮件地址。


1
在Mac上,如果您使用-r mailx:非法选项-r,您会从mailx命令收到错误消息:用法:mailx [-EiInv] [-s主题] [-c cc-addr] [-b bcc-addr] [ -F] to-addr ... mailx [-EHiInNv] [-F] -f [f] [name] mailx [-EHiInNv] [-F] [-u用户] mailx -e [-f name] mailx -H
jcpennypincher

您可以在-S from=a@b.com上做
Kalpesh Soni,

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

通过mailx实用程序,我们可以从发送文件unixmail server。在上面的代码中,我们可以看到第一个参数是-s "subject of mail" 第二个参数mail ID,最后一个参数是我们要附加的文件名


1
这不会附加文件,而是将文件的内容放入正文中
Guus18 '18

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

-c和-b是可选的。

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

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

-b:将密件抄送发送给以逗号分隔的用户列表。

希望我的回答能澄清您的疑问。


5

使用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发送邮件

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

1

自定义发件人地址

MESSAGE="SOME MESSAGE"
SUBJECT="SOME SUBJECT"
TOADDR="u@u.com"
FROM="DONOTREPLY"

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

man邮件中的一个例外:-f [file]读入用户mbox(或指定文件)的内容以进行处理;退出mailx时,它将未删除的消息写回到该文件。字符串文件的处理方法如下文中的folder命令所述。
ZJ Lyu

这取决于您使用的版本。有多个不兼容的竞争mailmailx带有不同选项的命令。
三人房

1

这是处理带有多个附件的邮件发送的多功能功能:

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”“”目标“”用空格分隔的附件列表“

注意:删除通话中的双引号

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


0

如果要发送两个以上的人或DL:

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

这里:

  • -s =主题或邮件标题
  • -r =发件人邮件或DL

您能否解释为什么使用echo来传递消息正文?如果我忽略了这一点并从MailX执行,则光标闪烁,就像等待输入一样。
LonelyRogue
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.