您的位置:首页 > 运维架构 > Linux

如何用 Linux 命令行发电子邮件 | Linux 中国

2019-06-26 18:18 1111 查看
Linux 提供了几个可以让你通过终端发送电子邮件的命令,下面来展示一些有趣的方法。-- Sandra Henry-stocker

Linux 可以用多种方式通过命令行发送电子邮件。有一些方法十分简单,有一些相对会复杂一些,不过仍旧提供了很多有用的特性。选择哪一种方式取决于你想要什么 —— 向同事快速发送消息,还是向一批人群发带有附件的更复杂的信息。接下来看一看几种可行方案:
mail发送一条简单消息最便捷的 Linux 命令是 

mail
。假设你需要提醒老板你今天得早点走,你可以使用这样的一条命令:
$ echo "Reminder: Leaving at 4 PM today" | mail -s "early departure" mybossecho "Reminder: Leaving at 4 PM today" | mail -s "early departure" myboss
另一种方式是从一个文件中提取出你想要发送的文本信息:
$ mail -s "Reminder:Leaving early" myboss < reason4leaving-s "Reminder:Leaving early" myboss < reason4leaving
在以上两种情况中,你都可以通过 
-s
 来为邮件添加标题。sendmail使用 
sendmail
 命令可以发送一封不包含标题的快信。(用目标收件人替换 
recip
):
$ echo "leaving now" | sendmail recipecho "leaving now" | sendmail recip
你可以用这条命令发送一条只有标题,没有内容的信息:
$ echo "Subject: leaving now" | sendmail recipecho "Subject: leaving now" | sendmail recip
你也可以用 
sendmail
 发送一条包含一条标题行的完整信息。不过使用这个方法时,你的标题行会被添加到要发送的文件中,如下例所示:
Subject: Requested lyrics: Requested lyrics
I would just like to say that, in my opinion, longer hair and other flamboyant, in my opinion, longer hair and other flamboyant
affectations of appearance are nothing more ...more ...
你也可以发送这样的文件(
lyric
 文件包含标题和正文):
$ sendmail recip < lyrics< lyrics
sendmain
 的输出也可以很冗长。如果你感到好奇并希望查看发送系统和接收系统之间的交互,请添加 
-v
 (verbose)选项。
$ sendmail -v recip@emailsite.com < lyrics-v recip@emailsite.com < lyrics
mutt
mutt
 是通过命令行发送邮件的一个很好的工具,在使用前你需要安装它。
mutt
 的一个很方便的优势就是它允许你在邮件中添加附件。使用 
mutt
 发送一条快速信息:
$ echo "Please check last night's backups" | mutt -s "backup check" recipecho "Please check last night's backups" | mutt -s "backup check" recip
从文件中获取内容:
$ mutt -s "Agenda" recip < agenda-s "Agenda" recip < agenda
使用 
-a
 选项在 
mutt
 中添加附件。你甚至可以添加不止一个附件 —— 如下一条命令所示:
$ mutt -s "Agenda" recip -a agenda -a speakers < msg-s "Agenda" recip -a agenda -a speakers < msg
在以上的命令中,
msg
 文件包含了邮件中的正文。如果你没有其他补充的内容,你可以这样来代替之前的命令:
$ echo "" | mutt -s "Agenda" recip -a agenda -a speakersecho "" | mutt -s "Agenda" recip -a agenda -a speakers
mutt
 另一个有用的功能是可以添加抄送(
-c
)和密送(
-b
)。
$ mutt -s "Minutes from last meeting" recip@somesite.com -c myboss < mins-s "Minutes from last meeting" recip@somesite.com -c myboss < mins
telnet如果你想深入了解发送电子邮件的细节,你可以使用 
telnet
 来进行电子邮件交互操作。但正如所说的那样,你需要“学习术语”。邮件服务器期望一系列命令,其中包括自我介绍(
EHLO
 命令)、提供发件人(
MAIL FROM
 命令)、指定收件人(
RCPT TO
 命令),然后添加消息(
DATA
)并以 
.
 结束消息。并不是所有的电子邮件服务器都会响应这些请求。此方法通常仅用于故障排除。
$ telnet emailsite.org 25.org 25
Trying 192.168.0.12... 192.168.0.12...
Connected to emailsite. to emailsite.
Escape character is '^]'. character is '^]'.
220 localhost ESMTP Sendmail 8.15.2/8.15.2/Debian-12; Wed, 12 Jun 2019 16:32:13 -0400; (No UCE/UBE) logging access from: mysite(OK)-mysite [192.168.0.12] localhost ESMTP Sendmail 8.15.2/8.15.2/Debian-12; Wed, 12 Jun 2019 16:32:13 -0400; (No UCE/UBE) logging access from: mysite(OK)-mysite [192.168.0.12]
EHLO mysite.org                <== introduce yourself.org                <== introduce yourself
250-localhost Hello mysite [127.0.0.1], pleased to meet you-localhost Hello mysite [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES-ENHANCEDSTATUSCODES
250-PIPELINING-PIPELINING
250-EXPN-EXPN
250-VERB-VERB
250-8BITMIME-8BITMIME
250-SIZE-SIZE
250-DSN-DSN
250-ETRN-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5-AUTH DIGEST-MD5 CRAM-MD5
250-DELIVERBY-DELIVERBY
250 HELP HELP
MAIL FROM: me@mysite.org       <== 指定发件人: me@mysite.org       <== 指定发件人
250 2.1.0 shs@mysite.org... Sender ok 2.1.0 shs@mysite.org... Sender ok
RCPT TO: recip             <== 指定收件人: recip             <== 指定收件人
250 2.1.5 recip... Recipient ok 2.1.5 recip... Recipient ok
DATA                   <== 邮件内容开始<== 邮件内容开始
354 Enter mail, end with "." on a line by itself Enter mail, end with "." on a line by itself
This is a test message. Please deliver it for me. is a test message. Please deliver it for me.
.                  <== 内容结束                  <== 内容结束
250 2.0.0 x5CKWDds029287 Message accepted for delivery 2.0.0 x5CKWDds029287 Message accepted for delivery
quit                   <== 结束交互<== 结束交互
向多个收件人发送电子邮件如果你希望通过 Linux 命令行向一大组收件人发送电子邮件,你可以使用一个循环来帮助你完成任务,如下面应用在 
mutt
 中的例子:
$ for recip in `cat recips`for recip in `cat recips`
do
mutt -s "Minutes from May meeting" $recip < May_minutes-s "Minutes from May meeting" $recip < May_minutes
done
总结有很多方法可以从 Linux 命令行发送电子邮件。有些工具提供了相当多的选项。

via: https://www.networkworld.com/article/3402027/how-to-send-email-from-the-linux-command-line.html作者:Sandra Henry-Stocker 选题:lujun9972 译者:Modrisco 校对:wxy本文由 LCTT 原创编译,Linux中国 荣誉推出


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: