admin avatar

「Linux」- 使用 exim4和mail 命令發送郵件安装配置教程

🕤 by admin

使用mail命令發送郵件

當你需要定時獲取伺服器上的資訊,又或者在滿足一定條件后對你進行通知時,使用命令行發送郵件會非常有用。 我的個人伺服器上就配置了定時任務,每小時會自動匯總伺服器的資源資訊,然後發到我的郵箱裡。

本文將會介紹在Linux中如何使用mail命令用163郵箱給126的郵箱發送郵件。

命令mail是如何工作的?

在使用mail命令發送郵件之前,最好是先瞭解以下mail命令是如何工作的。 如果不知道的話,就會像我當初一樣,花了很長時間才搞明白為什麼郵件總是發送不成功。 我在網上看了很多教程,很多教程都可以概括為一句話:在某個配置檔里加點東西,然後執行以下mail命令,嗒嗒,郵件就發送成功了。 然而我測試了半天都不好用。 當我弄明白mail命令是如何工作的以後,我才知道我最初的理解是錯誤的。

實際上,mail命令調用標準的sendmail程式(通常是/usr/sbin/sendmail),sendmail又連接到本地的郵件傳輸代理(MTA)以將郵件發送到目的位址。 本地郵件傳輸代理(MTA)是一個在本地運行的smtp伺服器,它接受埠25上的郵件。 大致的原理如下圖:

1
「mail command」 -> 「/usr/sbin/sendmail」 -> 「local MTA (smtp server)」 -> 「recipient MTA」

這就表示本地必須運行一個SMTP伺服器,比如Postfix、Exim4等等。 如果沒有運行,使用mail命令時,會得到一個“send-mail: Cannot open mail:25”的錯誤提示。

這就表示,使用mail命令的第一步是應該先搭建本地郵件傳輸代理。 本教程使用的Exim4。

系統環境

操作系統 Kali GNU/Linux Rolling

使用的mail命令 本文使用的mail命令來自於mailutils軟體包。 當然使用heirloom-mailx、bsd-mailx等等其他的軟體包也是可以的,他們都提供了mail命令,再用法上大同小異,只有細微的差別。

郵件傳輸代理(MTA) 如上說述,本地需要配置郵件傳輸代理(MTA)。 本文使用的Exim4。 當然你也可以使用Postfix,又或者其他的郵件傳輸代理,雖然配置上不同,但是原理上是相同的。

配置本地的郵件傳輸代理

安裝本地的郵件傳輸代理

執行下面命令來安裝Exim4服務:

Bash:
1
2
3
#!/bin/bash

apt-get install exim4 exim4-base exim4-config exim4-daemon-light

配置Exim4服務

再提一次,Exim4在這裡提供的是本地郵件傳輸代理的功能。 一共需要三步。 如下所述。

(第一步)執行dpkg-reconfigure exim4-config命令來配置Exim4服務:

1
2
3
4
5
6
7
8
9
10
11
* 选择"mail sent by smarthost; received via SMTP or fetchmail"选项;
	* 将"System mail name:"设置为“localhost”;
	* 设置"IP-addresses to listen on for incoming SMTP connections"为"127.0.0.1"来拒绝外部的连接;
	* 不要填写"Other destinations for which mail is accepted:"选项,值留空;
	* 也不要"Machines to relay mail for:"选项,值留空;
	* 设置"IP address or host name of the outgoing smarthost:"的值为"smtp.gmail.om:25";
	* 设置"Hide local mail name in outgoing mail?"的值为“NO"选项;
	* 设置"Keep number of DNS-queries minimal (Dial-on-Demand)?"的值为”NO“选项;
	* 设置"Delivery method for local mail"的值为"mbox format in /var/mail/"选项;
	* 设置"Split configuration into small files?"的值为"YES"选项;
	* 设置”Root and postmaster mail recipient:“的值为空,不需要填写;

(第二步)在Exim4配置結束后,然後再修改/etc/exim4/passwd.client,添加如下行:

1
smtp.gmail.om:[email protected]:KYkdghbjjfxL

它的結構為<163的SMTP伺服器位址>:<發件者郵箱位址>:<郵箱密碼>。 注意,這裡的郵箱密碼不時網頁郵箱的登錄密碼,而是在郵箱中設置的授權碼(也是在登錄Foxmial之類的郵箱用戶端使用的那個授權碼)。

(第三步)上一步結束后,我們需要在來配置/etc/email-addresses檔。 這個檔的作用是映射本地使用者到寄件者郵箱帳戶。 在該檔案中添加如下行:

上面設定的含義是:當你用root使用者發送郵件時,郵件的寄件者為 [email protected] 。 如果沒有進行配置,則發件者則會成為root@hostname,這時候容易發生的一個情況就是被系統退信,系統會告訴你發件者帳號與發件者不符合。

(最後一步)重啟Exim4服務。 執行下面的命令進行重啟:

1
systemctl restart exim4.service

安裝mail命令來發送郵件

安裝mail命令

執行下面的命令安裝mail命令:

1
apt-get install mailutils

使用mail命令發送郵件

執行下面的命令來傳送信件:

1
echo "This is test mail." | mail -s "Test Mail From Command Line" [email protected]

上面的This is test mail.是郵件的正文。 mail的-s選項指定了郵件的主題。 執行完上面的命令之後,你就可以到收件者的郵箱裡查看郵件了。

如果要檢視郵件傳送紀錄,可以執行:

1
tail -f /var/log/exim4/mainlog

有關mail命令的更多選項、發送附件、抄送等等功能可以查看官方文檔,或者mail命令的手冊。

via:https://blog.k4nz.com/90e62adac2b9bdee8c8fb2692d759a25/

參考文獻

Linux mail command examples – send mails from command line DebianWiki/mailAndExim4 ArchWiki/Exim Sendmail/Exim Error Mailing to Remote Domains Not Supported [How to get rid of “defer (-52): Retry time not yet reached” exim4 logs?](

💘 相关文章

写一条评论