L05-Linux部署msmtp+mutt發送郵件

1、前言 
首先,得明白髮送一封郵件的流程,下面一段理論摘抄自廖雪峯的官網網站https://www.liaoxuefeng.com/article/00137387674890099a71c0400504765b89a5fac65728976000 
""" 
咱們一般使用Email都很容易,可是Internet的郵件系統是經過幾個複雜的部分鏈接而成的,對於最終用戶而言,咱們熟悉的Outlook,Foxmail等都是用來收信和發信的,稱之爲MUA:Mail User Agent,郵件用戶代理。 
MUA並不是直接將郵件發送至收件人手中,而是經過MTA:Mail Transfer Agent,郵件傳輸代理代爲傳遞,Sendmail和Postfix就是扮演MTA的角色。 
一封郵件從MUA發出後,可能經過一個或多個MTA傳遞,最終到達MDA:Mail Delivery Agent,郵件投遞代理,郵件到達MDA後,就存放在某個文件或特殊的數據庫裏,咱們將這個長期保存郵件的地方稱之爲郵箱。 
一旦郵件到達郵箱,就原地不動了,等用戶再經過MUA將其取走,就是用Outlook,Foxmail等軟件收信的過程。 
因此一封郵件的流程是: 
發件人:MUA --發送--> MTA -> 若干個MTA... -> MTA -> MDA <--收取-- MUA:收件人 
MUA到MTA,以及MTA到MTA之間使用的協議就是SMTP協議,而收郵件時,MUA到MDA之間使用的協議最經常使用的是POP3或IMAP。 
須要注意的是,專業郵件服務商都有大量的機器來爲用戶服務,因此一般MTA和MDA並非同一臺服務器,所以,在Outlook等軟件裏,咱們須要分別填寫SMTP發送服務器的地址和POP3接收服務器的地址。 
""" 
  
一樣對發郵件流程介紹的很清楚的還有這篇博文:https://www.cnblogs.com/DLHe/p/8457393.html 
由上面可知,一般咱們所熟悉的Outlook、Foxmail等是郵件客戶端,提供了MUA的功能;而一些Email服務提供商,如網易、QQ等,則提供了MTA的功能。 
必須弄清楚的一點是,本次部署的msmtp+mutt實際上是相似於Foxmail那樣的MUA郵件客戶端,只不過它是在linux上運行的。而若是在linux上部署的是sendmail或者postfix,那纔是郵件服務器,起到的是MTA的功能。 
  
接下來是實施步驟。 
實測成功的部署環境:RHEL6.5和CentOS6.5,固然了,機器得能聯網。 
  
2、安裝msmtp 
msmtp是一個SMTP客戶端,可將郵件發送至SMTP服務端,官網地址爲http://msmtp.sourceforge.net/index.html  。 
1.下載msmtp文件 
cd /usr/local/src 
wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download 
  
2.解壓文件 
tar jxvf msmtp-1.4.32.tar.bz2 
  
3.進入到解壓的文件內,而後就是典型的源碼安裝的3個步驟./configure,make和make install 
3.1執行./configure,生成 Makefile,爲下一步的編譯作準備,--prefix=後面接的是想要將msmtp安裝到的路徑,跟當前mstmp源碼所在目錄無關 
cd msmtp-1.4.32 
./configure --prefix=/usr/local/msmtp 
 
 
3.2 make && make install,編譯並安裝,這兩步也能夠分開執行 
 
 
  
4. 在安裝目錄/usr/local/msmtp/下新建etc目錄,並在etc目錄下建立msmtp文件,該文件用於配置郵件發送的一些基本信息。 
mkdir –p /usr/local/msmtp/etc 
vim /usr/local/msmtp/etc/msmtprc 
#添加以下內容: 
account default  
host smtp.163.com                     
port 25 
from xxx@163.com      //按照實際狀況填寫真實的163郵箱 
auth login 
tls off 
user  xxx          //郵箱用戶名,是xxx而不是xxx@163.com              
password xxx     //須要注意的是這裏的密碼有多是受權碼,好比163郵箱的話這裏就必須填受權碼,以下圖           
logfile /var/log/mmlog 
 
  
注:正如前面所說的,msmtp+mutt的組合跟Foxmail同樣,是郵件客戶端。咱們知道,Windows下利用Foxmail發送郵件的話,固然首先須要用你的某個帳號登陸上Foxmail了,而後才能在該客戶端下新建郵件發送。那麼這一步該文件配置的做用,個人理解就是在linux下用你的某個帳號登陸msmtp客戶端。這裏我用的是163網易郵箱,如果想用QQ郵箱,則須要另行修改。 
  
測試時的配置以下: 
 
(注:截圖當中的目錄有點混亂,是實際生產環境中部署的安裝目錄,不是上面執行./configure命令時--prefix參數指定的/usr/local/msmtp,不過不要緊,只要記住,該文件實際是在prefix參數指定的安裝目錄下的!) 
  
5. 給日誌文件賦權限: 
chmod 777 /var/log/mmlog 
  
6.給配置文件msmtprc文件賦權限,由於該文件中有郵箱的明文密碼,因此要設置成非可讀的。 
chmod 600 msmtprc 
  
7.此時能夠 /usr/bin/目錄作一個關於/usr/local/msmtp/bin/msmtp的軟鏈接,這樣在服務器上任意位置均可以直接敲msmtp命令來執行msmtp 
ln -s /usr/local/msmtp/bin/msmtp /usr/bin/msmtp 
  
8.測試msmtp(一樣的,郵箱地址視實際狀況而定,不過必須得跟上面的/usr/local/msmtp/etc/msmtprc配置文件中的郵箱相同 
(1)若沒作第7步的軟鏈接,則是: 
/usr/local/msmtp/bin/msmtp  xxx@163.com hello,test  ctrl d 
(2)若作了軟鏈接,那麼測試的命令能夠爲: 
msmtp  xxx@163.com hello,test  ctrl d 
查看日誌有無成功 cat /usr/local/msmtp/msmtp.log 
查看163郵箱,看看信收到沒有。 
以下圖,這時候能收到郵件,可是郵件是沒有內容的,這是沒有問題的。 
至此,msmtp安裝已經完成了。 
 
  
  
3、安裝Mutt 
Mutt是一個Email客戶端,它不能直接發送郵件,更多的是承擔對email的管理功能,與msmtp可搭配使用。官網地址爲http://www.mutt.org/  
若想了解更多Mutt與msmtp的搭配使用,可查看以下地址:http://msmtp.sourceforge.net/doc/msmtp.html#Using-msmtp-with-Mutt  
  
1.Mutt安裝方法一:yum方式安裝配置mutt(實測成功) 
1.1yum install -y mutt 
  
1.2編輯/etc/Muttrc文件 注,/etc目錄下應該已經存在Muttrc文件,只是在文件末尾追加下面內容) 
vim /etc/Muttrc 
#輸入以下內容: 
set sendmail="/usr/bin/msmtp"     #注:之因此能這麼寫是由於在配置msmtp時作了軟鏈接 #ln -s  /usr/local/msmtp/bin/msmtp /usr/bin/msmtp 
set use_from=yes 
set realname="YOURNAME"         #realname能夠任意設置,這樣當你發郵件給別人的時候,收件人看到發件人的title就是你這裏設置的,具體能夠看下面的設置和最後圖片展現的結果 
set from=user@163.comset  
envelope_from=yes 
auto_view text/html 
set charset="utf-8" 
set send_charset="utf-8" 
set locale ="zh_CN.UTF-8" 
set content_type = "text/html\;charset=utf-8" 
  
set rfc2047_parameters=yes 
實測時的配置以下: 
 
可是作發送郵件測試時粗錯了,確實能發郵件,可是執行完發送命令以後報錯:source: errors in /etc/Muttrc,所以改爲下面 
set sendmail="/usr/bin/msmtp" 
set use_from=yes 
set realname="Zabbix Server" 
set editor="vim" 
set from=182xxxx7782@163.com 
 
  
1.3 配置完畢,測試: 
(1)簡單測試(發給本身):echo  "TEST測試test"|mutt -s "DT_ZABBIX_SERVER_TEST"  182xxxx7782@163.com 
 
  
(2)添加附件測試(發給本身):echo  "內容:TEST測試test"|mutt -s "主題:DT_ZABBIX_SERVER_TEST" -a /data/suxy_remark.txt 182xxxx7782@163.com 
發送錯誤,報錯:Can"t stat 182xxxx7782@163.com: No such file or directory 
以下圖所示,這是由於182xxxx7782@163.com在-a命令後面,因此mutt把182xxxx7782@163.com也當成附件了,所以將-a命令調換個位置,放到末尾(事實上該命令的用法也確實要求-a參數放到命令的最末尾): 
echo  "內容:TEST測試test"|mutt   -s "主題:DT_ZABBIX_SERVER_TEST"    182xxxx7782@163.com -a /data/suxy_remark.txt 
發送成功! 
事實上還可使用以下命令,即mutt後面先寫郵箱,將-s、-a等參數都放到後面去 
echo  "內容:TEST測試test"|mutt 182xxxx7782@163.com -s "主題:DT_ZABBIX_SERVER_TEST" -a /data/readme.txt 
 
  
(3)固然也能夠發送郵件給其餘的類型的郵箱,好比qq郵箱,公司郵箱等: 
echo  "內容:TEST測試test"|mutt -s "主題:DT_ZABBIX_SERVER_TEST"  98xxxx3649@qq.com -a /usr/local/suxy_remark.txt 
 
  
  
2.Mutt安裝方法二:源碼方式安裝Mutt(測試時沒有成功,不過應該是測試作法不對。。) 
cd /usr/local/src 
wget ftp://ftp.mutt.org/pub/mutt/mutt-1.5.24.tar.gz 
tar xvf mutt-1.5.24.tar.gz 
cd mutt-1.5.24 
./configure --prefix=/usr/local/mutt 
 
 
  
make && makeinstall 
 
  
  
配置Mutt 
vim /usr/local/mutt/etc/Muttrc 
#在最後添加以下幾行: 
set sendmail="/usr/local/msmtp/bin/msmtp" 
set use_from=yes 
set realname="xxx" 
set from=xxx@163.com 
set envelope_from=yes 
  
測試Mutt 
echo "hello,world"|/usr/local/mutt/bin/mutt –s "test mail" xxx@163.com#上述語句將發送一封標題爲"test mail",內容爲"hello,world",收件人爲xxx@163.com的郵件,可檢查該郵箱可否收到郵件 
實際測試時使用的命令: 
echo "Test from Zabbix Server"|/usr/local/mutt/bin/mutt –s "zabbixTest" 182xxxx7782@163.com 
可是如果使用上面的命令發送的話則會給-s@zabbix.localhost和zabbixtest@zabbix.localhost和182xxxx7782@163.com都各發一封郵件,改成以下的命令則會只給182發送,可是沒有主題 
echo "Test from Zabbix Server"|/usr/local/mutt/bin/mutt 182xxxx7782@163.comhtml

相關文章
相關標籤/搜索