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

来源:https://www.cnblogs.com/suhaha/archive/2018/03/27/8655033.html
-Advertisement-
Play Games

一、前言 首先,得明白髮送一封郵件的流程,下麵一段理論摘抄自廖雪峰的官網網站https://www.liaoxuefeng.com/article/00137387674890099a71c0400504765b89a5fac65728976000 """ 我們通常使用Email都很容易,但是Int ...


一、前言

首先,得明白髮送一封郵件的流程,下麵一段理論摘抄自廖雪峰的官網網站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,當然了,機器得能聯網。

 

二、安裝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 [email protected]      //按照實際情況填寫真實的163郵箱

auth login

tls off

user  xxx          //郵箱用戶名,是xxx而不是[email protected]             

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安裝已經完成了。

 

 

三、安裝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 [email protected] 

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 [email protected]

 

1.3 配置完畢,測試:

(1)簡單測試(發給自己):echo  "TEST測試test"|mutt -s "DT_ZABBIX_SERVER_TEST"  [email protected]

 

(2)添加附件測試(發給自己):echo  "內容:TEST測試test"|mutt -s "主題:DT_ZABBIX_SERVER_TEST" -a /data/suxy_remark.txt [email protected]

發送錯誤,報錯:Can't stat [email protected]: No such file or directory

如下圖所示,這是因為[email protected]在-a命令後面,所以mutt把[email protected]也當成附件了,因此將-a命令調換個位置,放到末尾(事實上該命令的用法也確實要求-a參數放到命令的最末尾):

echo  "內容:TEST測試test"|mutt   -s "主題:DT_ZABBIX_SERVER_TEST"    [email protected] -a /data/suxy_remark.txt

發送成功!

事實上還可以使用如下命令,即mutt後面先寫郵箱,將-s、-a等參數都放到後面去

echo  "內容:TEST測試test"|mutt [email protected] -s "主題:DT_ZABBIX_SERVER_TEST" -a /data/readme.txt

 

(3)當然也可以發送郵件給其他的類型的郵箱,比如qq郵箱,公司郵箱等

echo  "內容:TEST測試test"|mutt -s "主題:DT_ZABBIX_SERVER_TEST"  [email protected] -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 [email protected]

set envelope_from=yes

 

測試Mutt

echo "hello,world"|/usr/local/mutt/bin/mutt –s "test mail" [email protected]#上述語句將發送一封標題為"test mail",內容為"hello,world",收件人為[email protected]的郵件,可檢查該郵箱能否收到郵件

實際測試時使用的命令:

echo "Test from Zabbix Server"|/usr/local/mutt/bin/mutt –s "zabbixTest" [email protected]

但是若是使用上面的命令發送的話則會給[email protected][email protected][email protected]都各發一封郵件,改為如下的命令則會只給182發送,但是沒有主題

echo "Test from Zabbix Server"|/usr/local/mutt/bin/mutt [email protected]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述 前面一篇 Microsoft AI - Custom Vision 中,我們介紹了 Azure 認知服務中的自定義影像服務:Custom Vision,也介紹瞭如果通過這個線上服務,可視化的完成項目創建、數據集上傳和標註、模型訓練、模型評估和測試。我們也提到,除了可以使用可視化線上操作的方式, ...
  • .NET Core的出現使得ASP.NET應用在Linux環境下使用變得更加普及。而配合上Docker容器,令ASP.NET應用的佈署與管理也變得更加方便。在新的項目中運用ASP.NET Core無可非議,但對於既有項目,比如構建於傳統的ASP.NET Web Forms以及後來的ASP.NET M ...
  • 環境:操作系統: centos 7.net core: 2.1.101 官方網站的示例地址: https://docs.microsoft.com/zh-cn/dotnet/core/linux-prerequisites?tabs=netcore2x 首先,在windows 下的VS 2017新建 ...
  • 事情是這樣的,在一個新項目中引入了fastdfs,用這玩意做一些小數據的存儲還是很方便的,然後在nuget上就找到了一個FastDFS的sdk,如下圖: 一眼就看到了這個top1的sdk,應該會比較靠譜。。。簡單的在項目中應用了一下沒啥問題就忽悠上線了,然後就悲劇了,測試那邊反饋說上傳了一個 人群, ...
  • 此次又新增了一些新的功能,直接接著上次的介紹吧 上次博客介紹地址:http://www.cnblogs.com/Liyuting/p/8540592.html 這次新增了三個功能,具體如下: 一、網路聊天室 此功能涉及了Socket通信,運用服務端連接各個客戶端,並實現客戶端之間的溝通交流。 二、天 ...
  • 首先搞清楚兩個概念(ASP.NET Core 與 .NET Core):.NET Core 與 .NET Framework是對等的,前者跨平臺,後者不跨平臺。ASP.NET Core 主要是一個跨平臺的高性能開源框架,主要用來建立web應用程式和服務等,可以在 .NET Core 或 .NET F ...
  • go程式的基本結構 一個可以最簡單的可運行的go程式需要滿足下麵兩個條件: 有一個main()函數 main()函數在main包中 例如: 在go語言中的 hello world 程式如下: 程式中的 關鍵字,用來聲明文件所屬的包(文件所屬的包跟文件名是沒有關係的),每一個go文件都需要有一個包聲明 ...
  • 本文章主要說明asp.net core中靜態資源處理方案: 一、靜態文件服務 首先明確contentRoot和webroot這兩個概念 contentRoot:web的項目文件夾,其中包含webroot和其他bin等其他文件夾 webroot:webroot是站點文件夾,可用url訪問的文件夾。預設 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...