Linux使用mailx通過第三方SMTP發送郵件,帶附件操作


https://blog.csdn.net/FJDJFKDJFKDJFKD/article/details/87867969

驗證通過

Ubuntu 18.04 上已經移除了 heirloom-mailx 這個安裝包,有新需求的可參看這篇文章 Ubuntu 18.04 中使用 Postfix 發送郵件。

mail 默認是調用本機 MTA 發送郵件的,這意味着需要在本機上安裝 sendmail 或 postfix 等 MTA,配置比較麻煩,而且會帶來不必要的資源占用。通過修改配置文件,可以達到不使用 sendmail 而用外部 smtp 服務器發送郵件的目的。

安裝mailx

$ sudo apt-get install heirloom-mailx

配置mailx

如果你不確定你的系統中的 mail/mailx 的配置文件的文件名,可以在終端執行下面的命令來查看:

strings `which mail` | grep '\.rc'
  • 1

我的系統版本是Ubuntu 16.04
/etc/s-nail.rc中加入配置文本

set from=User@163.com
set smtp=smtp.163.com
set smtp-auth-user=User
set smtp-auth-password=password
set smtp-auth=login

---說明
from:對方收到郵件時顯示的發件人
smtp:指定第三方發郵件的smtp服務器地址
set smtp-auth-user:第三方發郵件的用戶名
set smtp-auth-password:用戶名對應的密碼,有些郵箱填的是授權碼
smtp-auth:SMTP的認證方式,默認是login,也可以改成CRAM-MD5或PLAIN方式
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

測試

關閉系統的 sendmail 服務,如果開啟了的話。
mail [option] [-a file] [-s subject] [-c c_adress] [-b b_adress] to-address ...

常用命令:
n:不讀入設置文件(本系統中是/etc/s-nail.rc)(這個文件允許用戶使用外部郵件傳輸代理而不是使用系統自帶的sendmail發送郵件)。
s:設置郵件的主題信息。
c:使用一個抄送列表。
b:使用一個密送列表。
  • 1
  • 2
  • 3
  • 4
  • 5
無郵件正文

mail -s "主題" 收件地址
可以把當前shell當成編輯器來用,編輯完內容后按Ctrl-D結束。

有郵件正文

文件內容發送
mail -s "主題" 收件地址 < 文件路徑文件名

  • mail -s "test" xxx@xxx.com < ./xxx/xxx.txt
  • cat 郵件正文.txt | mail -s 郵件主題 xxx@xxx.com

單內容發送

  • echo "郵件正文內容" | mail -s "郵件主題" xxx@xxx.com
帶附件

注意-a的位置放置有講究。
mail -a 附件 -s "主題" 收件地址 < 文件(郵件正文.txt)

  • mail -a /data/xxx.tar.gz -s "Linux mail test" xxx@xxx.com < ./xxx/xxx.txt

對於擔心郵件內容被非8-bit clean的機器污染,可以使用uuencode進行binary-to-text的轉換進行發送。
首先安裝$ sudo apt-get install sharutils

參數第一個 attachment 是需要編碼的文件名,第二個 attachment 是解碼時得到的文件名。
uuencode attachment attachment > attachment_uu 
mail -a attachment_uu -s "Linux mail attachment" xxx@xxx.com < ./xxx/xxx.txt
  • 1
  • 2
  • 3

接收方接收后使用
uudecode attachment_uu即可解壓得到文件名為 attachment 的文件 (編碼時的第二個參數)。

uuencode 可以使用 -m 選項選擇base64的編碼方式,對具體原理感興趣的請自行查閱。

在 Winows 中,用 Outlook、Foxmail 等客戶端能自動識別經過 uuencode 編碼的附件。如果附件被收取到 Linux/Unix 等系統下,如果 Linux 下的 MUA 或者客戶端不識別,可以手工處理郵件提取相應的部分,用 uudecode 解碼即可。

查看郵件

mail

常用命令(郵件命令提示符中常用命令)
h: 查看郵件標題。
d: 使用該命令加序號可以刪除指定的郵件。
f: 查看當前光標指向的郵件。
n: 跳轉到指定序號的郵件。
w: 保存郵件信息到文件,保存附件到單獨的文件。
q: 退出並將已閱讀的郵件存入文件~/mbox中。
x: 退出不保持之前的操作,如刪除郵件等。
!: 允許使用shell命令。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

sendmail

mailq或者sendmail -bp
可以查看當前仍在隊列里待發送的郵件,如何刪除該隊列呢?
刪除下面文件夾下的文件即可
/var/spool/postfix/deferred/
再次運行檢查隊列得到: Mail queue is empty
/var/log/syslog文件中也會保存發送失敗的信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
sendmail安裝
$ sudo apt-get install sendmail 
$ sudo apt-get install sendmail-cf 

其他附件:
spamassassin, 提供郵件過濾
  • 1
  • 2
  • 3
  • 4
  • 5
sendmail配置
根據.mc文件生成配置.cf文件
m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
  • 1
  • 2

輸入ps aux | grep sendmail查看是否安裝成功,看到信息sendmail: MTA: accepting connections

關閉並重啟sendmail服務

/etc/init.d/sendmail stop
ps -ef | grep sendmail | awk '{print $2}' | xargs kill -5 
/etc/init.d/sendmail start
  • 1
  • 2
  • 3
  • 4
  • 5

郵件內容、附件處理

sudo apt-get install mpack 用於解析 MIME 類型的信息,使用 munpack 即可用於消息里的附件和內容分離。
sudo apt-get install procmail 用於 MDA,過濾消息等。
sudo apt-get install getmail4,並配置好 getmail,抓取 mail。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM