如何用 Linux 命令列發電子郵件

2019-06-26 17:42:00

Linux 提供了幾個可以讓你通過終端傳送電子郵件的命令,下面來展示一些有趣的方法。

Linux 可以用多種方式通過命令列傳送電子郵件。有一些方法十分簡單,有一些相對會複雜一些,不過仍舊提供了很多有用的特性。選擇哪一種方式取決於你想要什麼 —— 向同事快速傳送訊息,還是向一批人群發帶有附件的更複雜的資訊。接下來看一看幾種可行方案:

mail

傳送一條簡單訊息最便捷的 Linux 命令是 mail。假設你需要提醒老闆你今天得早點走,你可以使用這樣的一條命令:

$ echo "Reminder: Leaving at 4 PM today" | mail -s "early departure" myboss

另一種方式是從一個檔案中提取出你想要傳送的文字資訊:

$ mail -s "Reminder:Leaving early" myboss < reason4leaving

在以上兩種情況中,你都可以通過 -s 來為郵件新增標題。

sendmail

使用 sendmail 命令可以傳送一封不包含標題的快信。(用目標收件人替換 recip):

$ echo "leaving now" | sendmail recip

你可以用這條命令傳送一條只有標題,沒有內容的資訊:

$ echo "Subject: leaving now" | sendmail recip

你也可以用 sendmail 傳送一條包含一條標題行的完整資訊。不過使用這個方法時,你的標題行會被新增到要傳送的檔案中,如下例所示:

Subject: Requested lyricsI would just like to say that, in my opinion, longer hair and other flamboyantaffectations of appearance are nothing more ...

你也可以傳送這樣的檔案(lyric 檔案包含標題和正文):

$ sendmail recip < lyrics

sendmain 的輸出也可以很冗長。如果你感到好奇並希望檢視傳送系統和接收系統之間的互動,請新增 -v (verbose)選項。

$ sendmail -v [email protected] < lyrics

mutt

mutt 是通過命令列傳送郵件的一個很好的工具,在使用前你需要安裝它。mutt 的一個很方便的優勢就是它允許你在郵件中新增附件。

使用 mutt 傳送一條快速資訊:

$ echo "Please check last night's backups" | mutt -s "backup check" recip

從檔案中獲取內容:

$ mutt -s "Agenda" recip < agenda

使用 -a 選項在 mutt 中新增附件。你甚至可以新增不止一個附件 —— 如下一條命令所示:

$ mutt -s "Agenda" recip -a agenda -a speakers < msg

在以上的命令中,msg 檔案包含了郵件中的正文。如果你沒有其他補充的內容,你可以這樣來代替之前的命令:

$ echo "" | mutt -s "Agenda" recip -a agenda -a speakers

mutt 另一個有用的功能是可以新增抄送(-c)和密送(-b)。

$ mutt -s "Minutes from last meeting" [email protected] -c myboss < mins

telnet

如果你想深入了解傳送電子郵件的細節,你可以使用 telnet 來進行電子郵件互動操作。但正如所說的那樣,你需要“學習術語”。郵件伺服器期望一系列命令,其中包括自我介紹(EHLO 命令)、提供發件人(MAIL FROM 命令)、指定收件人(RCPT TO 命令),然後新增訊息(DATA)並以 . 結束訊息。並不是所有的電子郵件伺服器都會響應這些請求。此方法通常僅用於故障排除。

$ telnet emailsite.org 25Trying 192.168.0.12...Connected to emailsite.Escape 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]EHLO mysite.org                <== introduce yourself250-localhost Hello mysite [127.0.0.1], pleased to meet you250-ENHANCEDSTATUSCODES250-PIPELINING250-EXPN250-VERB250-8BITMIME250-SIZE250-DSN250-ETRN250-AUTH DIGEST-MD5 CRAM-MD5250-DELIVERBY250 HELPMAIL FROM: [email protected]       <== 指定發件人250 2.1.0 [email protected]... Sender okRCPT TO: recip             <== 指定收件人250 2.1.5 recip... Recipient okDATA                   <== 郵件內容開始354 Enter mail, end with "." on a line by itselfThis is a test message. Please deliver it for me..                  <== 內容結束250 2.0.0 x5CKWDds029287 Message accepted for deliveryquit                   <== 結束互動

向多個收件人傳送電子郵件

如果你希望通過 Linux 命令列向一大組收件人傳送電子郵件,你可以使用一個迴圈來幫助你完成任務,如下面應用在 mutt 中的例子:

$ for recip in `cat recips`do    mutt -s "Minutes from May meeting" $recip < May_minutesdone

總結

有很多方法可以從 Linux 命令列傳送電子郵件。有些工具提供了相當多的選項。