Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
inux 提供了幾個(gè)可以讓你通過(guò)終端發(fā)送電子郵件的命令,下面來(lái)展示一些有趣的方法。
-- Sandra Henry-stocker(作者)
Linux 可以用多種方式通過(guò)命令行發(fā)送電子郵件。有一些方法十分簡(jiǎn)單,有一些相對(duì)會(huì)復(fù)雜一些,不過(guò)仍舊提供了很多有用的特性。選擇哪一種方式取決于你想要什么 —— 向同事快速發(fā)送消息,還是向一批人群發(fā)帶有附件的更復(fù)雜的信息。接下來(lái)看一看幾種可行方案:
發(fā)送一條簡(jiǎn)單消息最便捷的 Linux 命令是 mail。假設(shè)你需要提醒老板你今天得早點(diǎn)走,你可以使用這樣的一條命令:
$ echo "Reminder: Leaving at 4 PM today" | mail -s "early departure" myboss
另一種方式是從一個(gè)文件中提取出你想要發(fā)送的文本信息:
$ mail -s "Reminder:Leaving early" myboss < reason4leaving
在以上兩種情況中,你都可以通過(guò) -s 來(lái)為郵件添加標(biāo)題。
使用 sendmail 命令可以發(fā)送一封不包含標(biāo)題的快信。(用目標(biāo)收件人替換 recip):
$ echo "leaving now" | sendmail recip
你可以用這條命令發(fā)送一條只有標(biāo)題,沒(méi)有內(nèi)容的信息:
$ echo "Subject: leaving now" | sendmail recip
你也可以用 sendmail 發(fā)送一條包含一條標(biāo)題行的完整信息。不過(guò)使用這個(gè)方法時(shí),你的標(biāo)題行會(huì)被添加到要發(fā)送的文件中,如下例所示:
Subject: Requested lyrics I would just like to say that, in my opinion, longer hair and other flamboyant affectations of appearance are nothing more ...
你也可以發(fā)送這樣的文件(lyric 文件包含標(biāo)題和正文):
$ sendmail recip < lyrics
sendmain 的輸出也可以很冗長(zhǎng)。如果你感到好奇并希望查看發(fā)送系統(tǒng)和接收系統(tǒng)之間的交互,請(qǐng)?zhí)砑?-v (verbose)選項(xiàng)。
$ sendmail -v recip@emailsite.com < lyrics
mutt 是通過(guò)命令行發(fā)送郵件的一個(gè)很好的工具,在使用前你需要安裝它。mutt 的一個(gè)很方便的優(yōu)勢(shì)就是它允許你在郵件中添加附件。
使用 mutt 發(fā)送一條快速信息:
$ echo "Please check last night's backups" | mutt -s "backup check" recip
從文件中獲取內(nèi)容:
$ mutt -s "Agenda" recip < agenda
使用 -a 選項(xiàng)在 mutt 中添加附件。你甚至可以添加不止一個(gè)附件 —— 如下一條命令所示:
$ mutt -s "Agenda" recip -a agenda -a speakers < msg
在以上的命令中,msg 文件包含了郵件中的正文。如果你沒(méi)有其他補(bǔ)充的內(nèi)容,你可以這樣來(lái)代替之前的命令:
$ echo "" | mutt -s "Agenda" recip -a agenda -a speakers
mutt 另一個(gè)有用的功能是可以添加抄送(-c)和密送(-b)。
$ mutt -s "Minutes from last meeting" recip@somesite.com -c myboss < mins
如果你想深入了解發(fā)送電子郵件的細(xì)節(jié),你可以使用 telnet 來(lái)進(jìn)行電子郵件交互操作。但正如所說(shuō)的那樣,你需要“學(xué)習(xí)術(shù)語(yǔ)”。郵件服務(wù)器期望一系列命令,其中包括自我介紹(EHLO 命令)、提供發(fā)件人(MAIL FROM 命令)、指定收件人(RCPT TO 命令),然后添加消息(DATA)并以 . 結(jié)束消息。并不是所有的電子郵件服務(wù)器都會(huì)響應(yīng)這些請(qǐng)求。此方法通常僅用于故障排除。
$ 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 <== 指定發(fā)件人 250 2.1.0 shs@mysite.org... Sender ok RCPT TO: recip <== 指定收件人 250 2.1.5 recip... Recipient ok DATA <== 郵件內(nèi)容開(kāi)始 354 Enter mail, end with "." on a line by itself This is a test message. Please deliver it for me. . <== 內(nèi)容結(jié)束 250 2.0.0 x5CKWDds029287 Message accepted for delivery quit <== 結(jié)束交互
如果你希望通過(guò) Linux 命令行向一大組收件人發(fā)送電子郵件,你可以使用一個(gè)循環(huán)來(lái)幫助你完成任務(wù),如下面應(yīng)用在 mutt 中的例子:
$ for recip in `cat recips` do mutt -s "Minutes from May meeting" $recip < May_minutes done
有很多方法可以從 Linux 命令行發(fā)送電子郵件。有些工具提供了相當(dāng)多的選項(xiàng)。
via: https://www.networkworld.com/article/3402027/how-to-send-email-from-the-linux-command-line.html
作者: Sandra Henry-Stocker 選題: lujun9972 譯者: Modrisco 校對(duì): wxy
本文由 LCTT 原創(chuàng)編譯, Linux中國(guó) 榮譽(yù)推出
oaccess了,它是一個(gè)日志分析工具,并不只是為nginx使用的,你也可以用它來(lái)分析apache,具有解析速度快,使用簡(jiǎn)單,能生成json,html,csv等特點(diǎn)。
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默認(rèn)使用common log format日志格式
2.日志分析結(jié)果的輸出的城市顯示
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
其中l(wèi)og format依實(shí)際nginx的格式自己設(shè)定,如果nginx的log format為默認(rèn),可以使用goaccess中推薦的common log format日志格式設(shè)置,如果nginx的日志中有使用引號(hào),在命令行中須使用\進(jìn)行轉(zhuǎn)義
如果nginx格式自己有變動(dòng),可以依據(jù)https://goaccess.io/man對(duì)命令行中的格式進(jìn)行自定義
goaccess命令中的相關(guān)參數(shù)命令可以閱讀https://github.com/allinurl/goaccess中的詳細(xì)解釋
--geoip-database=/usr/local/goaccess-1.1/GeoLiteCity.dat此條參數(shù)為輸出時(shí)加載GeoLiteCity.dat的數(shù)據(jù),goaccess中默認(rèn)使用的geoip數(shù)據(jù)不全,只能顯示到country,不能顯示到city。
3.使用mutt和msmtp將生成的html文件自動(dòng)發(fā)送至郵箱
配置msmtp,只需要在用戶(hù)根目錄下創(chuàng)建.msmtprc 文件添加如下配置文件即可,msmtp主要配置發(fā)件的服務(wù)器地址,以及認(rèn)證信息
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端口可能不一樣,自行去郵箱官網(wǎng)查詢(xún)
from marility@126.com //發(fā)件人的郵箱
auth login //授權(quán)選擇login就可以
tls off
user marility@126.com //郵箱用戶(hù)
password PASSWORD //這處PASSWORD密碼為郵箱smtp的授權(quán)碼,不是網(wǎng)頁(yè)郵件登陸密碼,此處密碼為明文,也可以使用gpg2進(jìn)行加密,詳細(xì)設(shè)定可以查看文尾
[root@iZ25b31bdp0Z tmp]# cat /root/.muttrc
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="marility" //郵件發(fā)送時(shí)顯示的用戶(hù)名
set from=marility@126.com //發(fā)件人的郵箱
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 "郵件內(nèi)容" | mutt –s "郵件標(biāo)題" 收件人郵箱 –a 附件的路徑
4.自動(dòng)化發(fā)送生成的日志分析文件
寫(xiě)一個(gè)腳本,在腳本中執(zhí)行如上兩條命令,然后加入到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密碼加密
因?yàn)?root/.msmtprc中用戶(hù)郵箱的smtp的授權(quán)碼在上述示例中使用的明文,在此不安全。
在msmtp中除了將密碼放置于配置文件中,還可以讀取gpg2加密文件
5.1生成密鑰對(duì)
在主機(jī)A.B兩邊各種生成自己的gpg2密鑰對(duì)
gen –gen-key
依次選擇1>0>4096>輸入用戶(hù)信息及解密密碼(解密密碼很重要,后期解密文件使用)>o
之后提示移動(dòng)鼠標(biāo)鍵盤(pán),在tty中無(wú)法使用,在此可以使用dd命令隨機(jī)寫(xiě)入
dd if=/dev/zero of=/dev/null bs=10 count=10000
5.2查看密鑰對(duì)并導(dǎo)出自己的公鑰
gen2 –K
其中下圖中黑色部分為密鑰ID
導(dǎo)出密鑰格式為gpg2 –a –o 公鑰文件名稱(chēng) –-export 密鑰ID
5.3將A機(jī)器(A必須為msmtp主機(jī))公鑰傳給B機(jī)器
5.4在B機(jī)器上導(dǎo)入A機(jī)器公鑰
5.5在B機(jī)器上將存有密碼的文件進(jìn)行加密
gpg2 –e –r marility msmpasswd
其中marility為A機(jī)器上生成密鑰時(shí)的用戶(hù),msmpasswd為存有密碼的文件,
執(zhí)行之后會(huì)生成一個(gè)msmpasswd.gpg的文件,使用cat查看得出亂碼,到達(dá)加密效果
5.6將B機(jī)器上的加密文件回傳到A主機(jī)
5.7對(duì)加密文件進(jìn)行解密測(cè)試
使用格式為gpg2 –no-tty –-passphrase=A機(jī)器上解密密碼 –q –d 加密文件
5.8更改/root/.msmtprc中配置,如下
ail命令是Linux系統(tǒng)中常用的命令之一,用于向指定用戶(hù)或組發(fā)送郵件。
語(yǔ)法:
mail [選項(xiàng)] [收件人]
常用選項(xiàng):
1. -s 主題:指定郵件主題;
2. -a 文件名:附加文件;
3. -c 抄送給其他收件人;
4. -b 密送給其他收件人;
5. -r 發(fā)件人:指定發(fā)件人。
使用示例:
1. 發(fā)送純文本郵件:
echo "郵件內(nèi)容" | mail -s "郵件主題" 收件人
2. 發(fā)送帶附件的郵件:
mail -s "郵件主題" -a 文件名 收件人
3. 抄送給其他收件人:
mail -s "郵件主題" -c 其他收件人 收件人
4. 密送給其他收件人:
mail -s "郵件主題" -b 其他收件人 收件人
5. 指定發(fā)件人:
mail -s "郵件主題" -r 發(fā)件人 收件人
注意事項(xiàng):
1. 如果沒(méi)有指定收件人,則需要在命令行中輸入收件人,并按下Ctrl+D鍵結(jié)束輸入;
2. 發(fā)送HTML格式的郵件需要使用其他工具,如mutt命令;
3. 發(fā)送郵件需要在系統(tǒng)中安裝郵件服務(wù),如sendmail、postfix等。
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。