本文主要介紹如何在Linux下使用msmtp+mutt發送郵件,固然Linux下發送郵件的工具不少,好比sendmail+dovecot等。可是它們的配置通常都比較複雜,所以咱們來使用配置比較簡單的msmtp+mutt組合來發送郵件。
linux
msmtp+mutt組合配置很簡單,只須要幾步就能夠完成。下面咱們來分步驟介紹如何配置。c++
PS:本篇文章在ubuntu server 14.04和centos6.6上已經所有測試經過,其相關命令和配置文件能夠直接使用。ubuntu
同時ubuntu系統的話,建議在root用戶下進行操做。vim
1、什麼是msmtpcentos
msmtp是一款專門負責郵件發送的SMTP客戶端軟件,基於GPL發佈。支持TLS/SSL、DNS模式、IPv六、服務器端認證、多用戶等特性。服務器
在默認狀況下,msmtp把郵件送給負責發郵件的SMTP服務器(如:免費郵箱供應商)。網絡
而在使用msmtp發送郵件以前,須要你手工創建一個包含郵件帳號和密碼等相關的信息msmtp配置文件,而且讓MUA(郵件用戶代理客戶端,在此咱們使用的是mutt這個郵件用戶代理客戶端)來啓用msmtp程序,而不是/usr/sbin/sendmail,這樣才能使郵件客戶端軟件與msmtp更好的協同工做。編輯器
msmtp支持的特性:ide
兼容sendmail的交互方式(命令行選項以及退出代碼)。工具
多種驗證方式。
TLS加密鏈接(包含了服務器證書驗證,以及可能須要發送給客戶端證書的驗證)。
支持IDN(國際化域名)、支持DSN(投遞狀態通知)、支持RMQS(開啓遠程消息隊列)(僅ETRN支持的關鍵詞)、支持PIPELINING(流水線操做)以提升發送郵件的速度、支持IPv六、支持LMTP、支持多郵件帳號。
msmtp也能在類UNIX、Windows以及DOS等系統上運行。
可選的特性支持(依賴於額外的庫,看看INSTALL中的使用說明)。
msmtp的主頁位於http://msmtp.sourceforge.net/
2、安裝msmtp
上文介紹了msmtp的相關特性,如今咱們來介紹下如何安裝msmtp。
msmtp的安裝咱們根據平時使用的平臺不一樣分爲centos和ubuntu平臺的安裝,以及根據安裝方式的不一樣分爲yum、apt-get和源碼安裝,下面分別介紹下。
2.1 yum方式安裝
yum方式安裝的話,咱們須要安裝額外的epel源。以下:
rpm -ivh http://mirrors.aliyun.com/epel/6/x86_64/epel-release-6-8.noarch.rpm
ll /etc/yum.repos.d
開始安裝msmtp,以下:
yum -y install msmtp
msmtp安裝完畢後,咱們來查看下msmtp幫助信息,以下:
msmtp --help
經過上圖,咱們能夠很明顯的看出msmtp有不少的選項。
2.2 apt-get安裝
在ubuntu下安裝msmtp就很簡單了,直接使用apt-get進行安裝。以下:
sudo apt-get -y install msmtp
msmtp安裝完畢後,咱們選擇來查看下起幫助,以下:
msmtp --help
經過上圖,咱們能夠很明顯的看出msmtp有不少的選項。
2.3 源碼安裝
不管是yum仍是apt-get方式安裝的msmtp都不是最新版本,若是要使用最新版本的msmtp的話,咱們只能使用源碼方式安裝。
msmtp最新版本爲1.6.2,在此是以ubuntu平臺爲例,下載源碼以下:
wget http://nchc.dl.sourceforge.net/project/msmtp/msmtp/1.6.2/msmtp-1.6.2.tar.xz
解壓msmtp-1.6.2.tar.xz,以下:
xz -d msmtp-1.6.2.tar.xz
tar -xf msmtp-1.6.2.tar
cd msmtp-1.6.2/
在開始編譯安裝msmtp以前,咱們還要安裝相應的軟件包。以下:
sudo apt-get -y install gcc libglib2.0-dev
注意:ubuntu下源碼安裝msmtp的話,上述的軟件包libglib2.0-dev必定要安裝不然沒法進行編譯。
若是是centos平臺的話,須要安裝以下的軟件包:
yum -y install gcc gcc-c++ gnutls gnutls-devel gnutls-utils openssl openssl-devel libidn libidn-devel
下載開始編譯安裝msmtp,以下:
./configure --bindir=/usr/bin/
sudo make
sudo make install
安裝完畢後,咱們來查看下。以下:
which msmtp
msmtp --help
能夠看到msmtp已經安裝成功。
3、使用msmtp
msmtp安裝完畢後,咱們來測試下其發送郵件的功能。
3.1 建立msmtp配置文件
在測試msmtp以前,咱們先要配置msmtp發送郵件的配置文件。以下:
sudo vi /etc/msmtprc
defaults
tls on
logfile /var/log/msmtp.log
account ilanni
host smtp.126.com
port 25
from duanzhanling@126.com
auth login
tls off
user duanzhanling@126.com
password 123456
account default : ilanni
如今來解釋下在上述命令的各個選項的含義。
logfile表示記錄日誌。
account ilanni定義一個ilanni的發送郵件名稱。
host smtp.126.com表示SMTP的服務器地址。
port 25表示SMTP服務器的端口。
from duanzhanling@126.com表示發送的郵件地址。
auth login使用login驗證方式。
tls off表示不使用tls。
passwordeval表示duanzhanling@126.com這個郵箱的登陸密碼,在此咱們使用的是通過加密處理後的密碼。在此咱們使用的是password,直接使用密碼。
若是定義多個郵箱賬號的話,咱們可使用account default來指定默認的發送郵件名稱。
有關gpg加密解密的能夠參考這篇文章《爛泥:gpg加解密軟件學習》。
3.2 測試msmtp發送郵件
在前面咱們介紹過了,msmtp也是一個SMTP客戶端軟件,也是能夠用來發送郵件的,如今咱們來測試下。
測試msmtp,咱們可使用以下命令:
echo "Subject: test msmtp\r\n\r\nThis is a test for ilanni." |msmtp -d -C /etc/msmtprc -t duanzhanling@126.com
參數Subject指定主題,\r\n\r\n後接的是郵件內容,-d指明打印debug信息,-C指明配置文件,-t指定收件人的郵件地址。
以上命令執行完畢後,咱們能夠查看 logfile 裏面的發送日誌記錄。以下:
cat /var/log/msmtp.log
經過上圖,咱們能夠很明顯的看到郵件已經發送成功。
下面咱們來登陸郵件客戶端查看下,是否收到剛剛發送的郵件,以下:
經過上圖,咱們能夠很明顯的看到剛剛發送的郵件,咱們已經接收到了。
4、什麼是mutt
mutt是linux下的一個email程序,它跟通常的Windows郵件程序不一樣,它不是一個一應俱全的大雜燴。你甚至會發現它根本不直接發出郵件,它歷來不本身編輯郵件,它歷來不本身對郵件進行加密和數字簽名。mutt更像一個文件管理器,只不過它管理的是email。它的功能是藉助各個最強大的程序來實現的,這符合UNIX的設計思想:
當mutt須要編輯郵件時,它有可能調用vi、vim、emacs等編輯器。
當mutt須要發信時,它把須要發出的信件放到sendmail的隊列裏,其餘的就什麼都無論了。
當須要數字簽名時,mutt會把信件交給GnuPG之類的程序處理一下,而後再發出去。
怎麼收郵件呢?mutt是不會本身到POP服務器去取郵件,你須要一個fetchmail程序,幫你把email從POP服務器取回來,而後轉發到本身的sendmail的郵箱裏。這樣看起來就是你的主機成爲了一個完整的UNIX網絡工做站。
mutt支持絕大多數郵件格式,包括mbox、Maildir和協議。例如:POP三、IMAP等。它也支持MIME,PGP/GPG和S/MIME集成。
mutt設計爲擔當郵件用戶代理(MUA),所以它不能夠單獨使用來發送郵件。若是要發送郵件的話,它須要結合郵件傳輸代理來實現。,例如:流行的sendmail、exim四、postfix等。同時它也依賴其餘工具來撰寫和過濾郵件。
mutt有成百的配置項和命令。它容許改變全部的鍵綁定和設定keyboard macros來完成複雜任務, 以及配置顏色和界面佈局。經過所謂hooks的變量,許多配置能夠基於條件改變,例如當前郵箱或者外發郵件接受者。有不少加強功能的補丁和擴展,例如NNTP。
mutt徹底由鍵盤控制,支持mail threading。所以用戶可輕鬆自如瀏覽冗長討論。mutt的新郵件撰寫由外部文本編輯器完成。這與其餘郵件客戶端工具內置編輯器大相徑庭。
5、安裝mutt
mutt的安裝咱們能夠分爲yum、apt-get和源碼安裝。在此咱們不使用源碼安裝了,直接使用yum和apt-get方式。
ubuntu下安裝mutt,以下:
sudo apt-get install -y mutt
centos下安裝mutt,以下:
yum -y install mutt
安裝完畢後,咱們來查看mutt都安裝了什麼文件,以下:
dpkg -L mutt |tac
經過上圖,咱們能夠看到mutt的配置文件爲Muttrc。如今來查看年下mutt的配置文件Muttrc,以下:
grep -vE '^#|^$' /etc/Muttrc
經過上圖,咱們能夠看到mutt的配置文件Muttrc有不少選項。在此,咱們只配置必須的選項。以下:
sudo vi /etc/Muttrc
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="爛泥雲監控平臺"
set editor="vi"
set copy=no
mutt的copy變量,默認:yes,這個變量控制是否備份你發出的郵件。
在zabbix的yum安裝中,zabbix會去執行mail.sh這個腳本,使用的是zabbix用戶,運行mutt使用的也是zabbix用戶。可是mutt默認配置會先進行郵件的本地備份,而後再進行郵件的發出動做。
可是mutt進行郵件本地備份時只能是經過root用戶進行的,而zabbix用戶沒這個權限,因此會致使zabbix中能看到發送郵件的動做,可是實際上郵箱中確沒有收到郵件的現象。
如今咱們禁用了該變量,zabbix會直接執行mail.sh腳本,進行發送郵件,而不進行郵件的備份操做。
注意:mail.sh咱們如今賦予的權限是777,zabbix用戶是有權限執行該腳本的。
對於msmtp程序來講建議必定要使用yum或者apt-get方式進行安裝!!!
以上配置選項中sendmail設置發送郵件的客戶端程序,editor設置mutt調用的編器輯。
6、使用mutt
mutt安裝及配置完畢後,咱們就可使用mutt來發送郵件了。如今使用以下命令進行測試:
echo "這裏是正文" |mutt -s "ilanni-test" duanzhanling@126.com
cat /var/log/msmtp.log
上述命令的意思是發送一封內容是這裏是正文的,主題是ilanni-test的郵件給duanzhanling@126.com這個用戶。
經過上圖,咱們能夠很明顯的看到mutt已經成功的經過調用msmtp發送一封郵件給duanzhanling@126.com這個用戶。
如今咱們在登錄duanzhanling@126.com這個郵箱進行查看下這封郵件,以下:
經過上圖,咱們能夠很明顯的看出mutt確實已經成功的發送郵件了。
除了能夠經過上述命令發送郵件外,咱們還能夠把郵件的內容保存到一個文件中,而後使用以下的形式進行發送。
cat testmutt|mutt -s "ilanni-test" duanzhanling@126.com
7、mutt的其餘用法
在第六章節中,咱們能夠看到mutt確實經過調用msmtp發送郵件。如今咱們再來看看mutt的其餘使用方法。
7.1 郵件羣發
mutt能夠羣發郵件,在此咱們已兩個郵件爲例進行測試。
使用mutt同時向lanni654321@126.com和duanzhanling@126.com這兩個郵箱發送郵件,命令以下:
echo "lanni --這裏是正文" |mutt -s "ilanni-test" lanni654321@126.com duanzhanling@126.com
經過上圖,咱們能夠看到mutt確實能夠支持郵件羣發。
7.2 發送附件
使用mutt同時向lanni654321@126.com和duanzhanling@126.com這兩個郵箱發送郵件,並添加附件testilanni1,testilanni2。其中附件testilanni1和testilanni2內容均爲this is a test。以下:
mutt命令以下:
echo "lanni --這裏是測試附件" |mutt -s "ilanni-test" lanni654321@126.com duanzhanling@126.com -a testilanni1 testilanni2
mutt發送附件功能須要參數-a的配合。
經過上圖,咱們能夠很明顯的看出mutt已經成功的發送附件。
7.3 抄送郵件
使用mutt向duanzhanling@126.com這個郵箱發送郵件,同時抄送把郵件抄送給lanni654321@126.com,並添加附件testilanni1,testilanni2。命令以下:
echo "lanni --這裏是測試抄送功能" |mutt -s "ilanni-test" duanzhanling@126.com -c lanni654321@126.com -a testilanni1 testilanni2
mutt抄送功能須要參數-c的配合。
經過上圖,咱們能夠看到郵件已經成功抄送給lanni654321@126.com這個用戶。
7.4 密送郵件
使用mutt向lanni654321@126.com這個郵箱發送郵件,同時密送給duanzhanling@126.com,並添加附件testilanni1,testilanni2。命令以下:
echo "lanni --這裏是測試密送功能" |mutt -s "ilanni-test" lanni654321@126.com -b duanzhanling@126.com -a testilanni1 testilanni2
mutt密送功能須要參數-b的配合。
經過上圖,咱們能夠看到郵件在發給lanni654321@126.com的同時,也確實祕密發送給了duanzhanling@126.com這個用戶。