inux 提供了幾個可以讓你通過終端發送電子郵件的命令,下面來展示一些有趣的方法。
-- Sandra Henry-stocker(作者)
Linux 可以用多種方式通過命令行發送電子郵件。有一些方法十分簡單,有一些相對會復雜一些,不過仍舊提供了很多有用的特性。選擇哪一種方式取決于你想要什么 —— 向同事快速發送消息,還是向一批人群發帶有附件的更復雜的信息。接下來看一看幾種可行方案:
發送一條簡單消息最便捷的 Linux 命令是 mail。假設你需要提醒老板你今天得早點走,你可以使用這樣的一條命令:
$ echo "Reminder: Leaving at 4 PM today" | mail -s "early departure" myboss
另一種方式是從一個文件中提取出你想要發送的文本信息:
$ mail -s "Reminder:Leaving early" myboss < reason4leaving
在以上兩種情況中,你都可以通過 -s 來為郵件添加標題。
使用 sendmail 命令可以發送一封不包含標題的快信。(用目標收件人替換 recip):
$ echo "leaving now" | sendmail recip
你可以用這條命令發送一條只有標題,沒有內容的信息:
$ echo "Subject: leaving now" | sendmail recip
你也可以用 sendmail 發送一條包含一條標題行的完整信息。不過使用這個方法時,你的標題行會被添加到要發送的文件中,如下例所示:
Subject: Requested lyrics I would just like to say that, in my opinion, longer hair and other flamboyant affectations of appearance are nothing more ...
你也可以發送這樣的文件(lyric 文件包含標題和正文):
$ sendmail recip < lyrics
sendmain 的輸出也可以很冗長。如果你感到好奇并希望查看發送系統和接收系統之間的交互,請添加 -v (verbose)選項。
$ sendmail -v recip@emailsite.com < lyrics
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" recip@somesite.com -c myboss < mins
如果你想深入了解發送電子郵件的細節,你可以使用 telnet 來進行電子郵件交互操作。但正如所說的那樣,你需要“學習術語”。郵件服務器期望一系列命令,其中包括自我介紹(EHLO 命令)、提供發件人(MAIL FROM 命令)、指定收件人(RCPT TO 命令),然后添加消息(DATA)并以 . 結束消息。并不是所有的電子郵件服務器都會響應這些請求。此方法通常僅用于故障排除。
$ telnet emailsite.org 25 Trying 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 yourself 250-localhost Hello mysite [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-EXPN 250-VERB 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH DIGEST-MD5 CRAM-MD5 250-DELIVERBY 250 HELP MAIL FROM: me@mysite.org <== 指定發件人 250 2.1.0 shs@mysite.org... Sender ok RCPT TO: recip <== 指定收件人 250 2.1.5 recip... Recipient ok DATA <== 郵件內容開始 354 Enter mail, end with "." on a line by itself This is a test message. Please deliver it for me. . <== 內容結束 250 2.0.0 x5CKWDds029287 Message accepted for delivery quit <== 結束交互
如果你希望通過 Linux 命令行向一大組收件人發送電子郵件,你可以使用一個循環來幫助你完成任務,如下面應用在 mutt 中的例子:
$ for recip in `cat recips` do mutt -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中國 榮譽推出
oaccess了,它是一個日志分析工具,并不只是為nginx使用的,你也可以用它來分析apache,具有解析速度快,使用簡單,能生成json,html,csv等特點。
1.goaccess的基本安裝
wget http://tar.goaccess.io/goaccess-1.1.tar.gz
yum install glib2 glib2-devel GeoIP-devel ncurses-devel
tar xvf goaccess-1.1.tar.gz -C /usr/local
cd /usr/local/
cd goaccess-1.1/
./configure --enable-geoip --enable-utf8 --with-openssl
make && make install
goaccess -f /var/log/nginx/access.log -a
lanmp默認使用common log format日志格式
2.日志分析結果的輸出的城市顯示
wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz
goaccess -f /var/log/nginx/access.log --log-format="%h %^[%d:%t %^] \"%r\" %s %b \"%R\" \"%u\"" --date-format="%d/%b/%Y" --time-format=%H:%M:%S -a --geoip-database=/usr/local/goaccess-1.1/GeoLiteCity.dat > /tmp/nginx-log-`date +%F-%H-%M-%S`.html
其中log format依實際nginx的格式自己設定,如果nginx的log format為默認,可以使用goaccess中推薦的common log format日志格式設置,如果nginx的日志中有使用引號,在命令行中須使用\進行轉義
如果nginx格式自己有變動,可以依據https://goaccess.io/man對命令行中的格式進行自定義
goaccess命令中的相關參數命令可以閱讀https://github.com/allinurl/goaccess中的詳細解釋
--geoip-database=/usr/local/goaccess-1.1/GeoLiteCity.dat此條參數為輸出時加載GeoLiteCity.dat的數據,goaccess中默認使用的geoip數據不全,只能顯示到country,不能顯示到city。
3.使用mutt和msmtp將生成的html文件自動發送至郵箱
配置msmtp,只需要在用戶根目錄下創建.msmtprc 文件添加如下配置文件即可,msmtp主要配置發件的服務器地址,以及認證信息
yum -y install mutt msmtp
[root@iZ25b31bdp0Z tmp]# cat /root/.msmtprc
defaults
tls on
logfile /var/log/msmtp/msmtp.log
account default
host smtp.126.com
port 25 //不同的郵箱的smtp端口可能不一樣,自行去郵箱官網查詢
from marility@126.com //發件人的郵箱
auth login //授權選擇login就可以
tls off
user marility@126.com //郵箱用戶
password PASSWORD //這處PASSWORD密碼為郵箱smtp的授權碼,不是網頁郵件登陸密碼,此處密碼為明文,也可以使用gpg2進行加密,詳細設定可以查看文尾
[root@iZ25b31bdp0Z tmp]# cat /root/.muttrc
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="marility" //郵件發送時顯示的用戶名
set from=marility@126.com //發件人的郵箱
set envelope_from=yes
set charset = "utf-8"
set send_charset = "us-ascii:iso-8859-1:gb18030:utf-8"
chmod +x nginxlogsend.sh
echo " " | mutt -s "nginx-log-`date +%F-%H-%M-%S`" 85362119@qq.com -a /tmp/nginx-log-2016-11-21-14-59-32.html
echo "郵件內容" | mutt –s "郵件標題" 收件人郵箱 –a 附件的路徑
4.自動化發送生成的日志分析文件
寫一個腳本,在腳本中執行如上兩條命令,然后加入到crontab中
vim /root/nginxlogsend.sh
#!/bin/bash
#
#
goaccess -f /var/log/nginx/access.log --log-format="%h %^[%d:%t %^] \"%r\" %s %b \"%R\" \"%u\"" --date-format="%d/%b/%Y" --time-format=%H:%M:%S -a --geoip-database=/usr/local/goaccess-1.1/GeoLiteCity.dat > /data/nginx-log.html
echo " " | mutt -s "nginx-log-`date +%F-%H-%M-%S`" 85362119@qq.com -a /data/nginx-log.html
tar zcf /data/nginx-log-`date +%F-%H-%M-%S`.tar.gz /data/nginx-log.html
crontab –e
1 0 * * * /root/nginxlogsend.sh
5.msmtp密碼加密
因為/root/.msmtprc中用戶郵箱的smtp的授權碼在上述示例中使用的明文,在此不安全。
在msmtp中除了將密碼放置于配置文件中,還可以讀取gpg2加密文件
5.1生成密鑰對
在主機A.B兩邊各種生成自己的gpg2密鑰對
gen –gen-key
依次選擇1>0>4096>輸入用戶信息及解密密碼(解密密碼很重要,后期解密文件使用)>o
之后提示移動鼠標鍵盤,在tty中無法使用,在此可以使用dd命令隨機寫入
dd if=/dev/zero of=/dev/null bs=10 count=10000
5.2查看密鑰對并導出自己的公鑰
gen2 –K
其中下圖中黑色部分為密鑰ID
導出密鑰格式為gpg2 –a –o 公鑰文件名稱 –-export 密鑰ID
5.3將A機器(A必須為msmtp主機)公鑰傳給B機器
5.4在B機器上導入A機器公鑰
5.5在B機器上將存有密碼的文件進行加密
gpg2 –e –r marility msmpasswd
其中marility為A機器上生成密鑰時的用戶,msmpasswd為存有密碼的文件,
執行之后會生成一個msmpasswd.gpg的文件,使用cat查看得出亂碼,到達加密效果
5.6將B機器上的加密文件回傳到A主機
5.7對加密文件進行解密測試
使用格式為gpg2 –no-tty –-passphrase=A機器上解密密碼 –q –d 加密文件
5.8更改/root/.msmtprc中配置,如下
ail命令是Linux系統中常用的命令之一,用于向指定用戶或組發送郵件。
語法:
mail [選項] [收件人]
常用選項:
1. -s 主題:指定郵件主題;
2. -a 文件名:附加文件;
3. -c 抄送給其他收件人;
4. -b 密送給其他收件人;
5. -r 發件人:指定發件人。
使用示例:
1. 發送純文本郵件:
echo "郵件內容" | mail -s "郵件主題" 收件人
2. 發送帶附件的郵件:
mail -s "郵件主題" -a 文件名 收件人
3. 抄送給其他收件人:
mail -s "郵件主題" -c 其他收件人 收件人
4. 密送給其他收件人:
mail -s "郵件主題" -b 其他收件人 收件人
5. 指定發件人:
mail -s "郵件主題" -r 發件人 收件人
注意事項:
1. 如果沒有指定收件人,則需要在命令行中輸入收件人,并按下Ctrl+D鍵結束輸入;
2. 發送HTML格式的郵件需要使用其他工具,如mutt命令;
3. 發送郵件需要在系統中安裝郵件服務,如sendmail、postfix等。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。