前記
- linux下sendmail服務(wù)經(jīng)常會被郵箱認(rèn)為是垃圾郵件颅筋,基本上都不會被郵件服務(wù)器接受,我曾經(jīng)使用過阿里云的郵箱測試過输枯,郵件發(fā)過去直接被拒收了议泵,去收信記錄查詢,顯示“發(fā)信頻率超過限制”.....所以這里介紹一種新的方法發(fā)郵件桃熄,使用騰訊的smtp服務(wù)器發(fā)送郵件
- 還有一點(diǎn):我自己嘗試配置mailx出現(xiàn)了很多問題先口,google好久才有答案,所以想在這里發(fā)這篇文章來幫助那些后面的人瞳收,少走一些彎路碉京。
- 這里需要兩個(gè)郵箱,一個(gè)作為自己服務(wù)器發(fā)送郵件用(簡稱郵箱1)螟深,一個(gè)作為測試發(fā)送郵件是否發(fā)送成功使用(簡稱郵箱2)
centos7下mailx默認(rèn)已經(jīng)安裝谐宙,我們只需要配置,就可使用
yum install mailx #沒有mailx可以使用這個(gè)安裝
yum install postfix
配置文件/etc/mail.rc
<pre>
set bsdcompat
set smtp-use-starttls #啟用ssl加密
set ssl-verify=ignore
set nss-config-dir=/etc/ssl/certs #ssl的加密證書
set smtp=smtp.qq.com #smtp服務(wù)器地址
set smtp-auth-user=********* #登錄郵箱帳號界弧,不用加@qq.com或者@aliyun.com凡蜻,等,如此類推
set smtp-auth-password=********* #smtp服務(wù)器的授權(quán)密碼
set smtp-auth=login #需要登錄認(rèn)證
set from=**********@qq.com #發(fā)件人
</pre>
- ssl的證書的獲得可以在ubuntu的操作系統(tǒng)的 ~/.mozilla/firefox/*****.default/(我的是在.mozilla/firefox/r42hpmof.default/(ubuntu16.04.1LTS))垢箕,拷貝三個(gè)文件cert8.db划栓,key3.db,secmod.db到centos7下的/etc/ssl/certs目錄下即可舰讹,至于傳輸文件茅姜,可以使用winscp(~是普通用戶的根目錄,如果沒有那3個(gè).db文件月匣,可以試試用那個(gè)用戶使用自帶的火狐瀏覽器登錄一次qq郵箱)
- smtp的地址可百度钻洒,比如說阿里云的就是smtp.aliyun.com,端口如果有啟用ssl加密的設(shè)置的話可以不寫,如果不啟用ssl加密锄开,要寫素标,比如說smtp.aliyun.com非加密就是smtp.aliyun.com:25。
- smtp服務(wù)器的授權(quán)碼需要登錄自己的郵箱(即郵箱1)進(jìn)行設(shè)置那里獲得萍悴,并非郵箱密碼头遭!
- 簡單談一下ssl加密,如果沒有ssl加密癣诱,所有的一切郵件數(shù)據(jù)幾乎都是明文發(fā)送的计维,包括發(fā)送給smtp服務(wù)器的授權(quán)碼,有點(diǎn)危險(xiǎn)撕予,就是為了自己的郵箱帳號的安全鲫惶,也最好啟用ssl加密
弄好之后可以嘗試發(fā)送郵件了
發(fā)送郵件有兩種方式
第一種
<pre><code>mailx test@test.com</code></pre>
無主題郵件
第二種
<pre><code>mailx -s "title" test@test.com</code></pre>
帶主題郵件
- 第一種和第二種都需要這樣操作:然后回車第一行輸入抄送(可空),再回車輸入第二行內(nèi)容(可空)实抡,再回車輸入第三行接著ctrl+d發(fā)送郵件
- 可以加-v 選項(xiàng)來查看執(zhí)行過程信息欠母,注意:-v要寫在-s之前,否者會提示語法錯(cuò)誤欢策,其實(shí)就是-s 后必須接title,就像這樣(smtp-server: 501 Bad address syntax)
第三種
<pre><code>echo "test" | mailx -s "title" test@test.com</code></pre>
利用echo輸出的內(nèi)容作為郵件內(nèi)容發(fā)送赏淌,直接就可以發(fā)送踩寇。
第四種
<pre><code>mailx -s "title" < test.txt test@test.com</code></pre>
或
<pre><code>mailx -s "title" test@test.com < test.txt</code></pre>
利用文件作為內(nèi)容發(fā)送
第五種
<pre><code>echo "test" | mailx -a "filename" -s "title" test@test.com</code></pre>
發(fā)送附件
問題
Error initializing NSS: Unknown error -8015.
這個(gè)錯(cuò)誤一開始弄得我很頭疼,百度,google都無法搜出解決方案六水,結(jié)果來一個(gè)sudo就解決了問題,汗...俺孙,就像這樣
<pre><code>sudo mailx -s "title" test@test.com < test.txt</code></pre>
后來終于明白了,這個(gè)問題是因?yàn)闆]辦法讀取證書文件導(dǎo)致的缩擂,因?yàn)閺?fù)制文件的時(shí)候需要訪問/etc/ssl/certs鼠冕,需要root權(quán)限,所以復(fù)制過來的文件的擁有者也是root胯盯,而且這幾個(gè)證書db文件的權(quán)限是-rw-------,復(fù)制過來擁有者變成root计露,普通用戶連讀的權(quán)限都沒有博脑,所以解決辦法有幾個(gè)
- 加sudo運(yùn)行
- 給普通用戶加上讀權(quán)限(chmod +r ...)
- 改變證書擁有者(chown 普通用戶名:普通用戶名 ....)
附加:一個(gè)監(jiān)控用戶登錄的腳本,并登陸者的ip票罐、登錄方式叉趣,登錄用戶名發(fā)送到test@test.com
<pre><code>
#!bin/bash loginCO=0 loginCL=
who | wc -l#獲取已登錄用戶列表 while true do if [[ "$loginCL" -gt 0 ]];then if [[ "$loginCL" -gt "$loginCO" ]];then #當(dāng)新獲取的用戶數(shù)比舊用戶數(shù)要多時(shí) user=$(who | sed -n -e '$p' | awk '{print $1}') #取已登錄用戶列表的最后一個(gè)用戶信息 clientNumber=$(who | sed -n -e '$p' | awk '{print $2}') time=$(who | sed -n -e '$p' | awk '{print $3"-"$4" "$5}') ip=$(who | sed -n -e '$p' | awk '{print $6}' | cut -d "(" -f2 | cut -d ")" -f1) echo -e "someone is logging! \nhere are some imformation for it :\n\nUser:$user \nClientNumber: $clientNumber\nTime: $time\nIP:$ip" > /tmp/mail/loginmail mailx -s "logging status" test@test.com < /tmp/mail/loginmail #test@test.com為接受郵件的郵箱 fi fi sleep 3 #等待3秒再次獲取已登錄用戶數(shù),這個(gè)時(shí)間越短檢測成功率越高 loginCO=$loginCL loginCL=\
who | wc -l`
done
`</pre></code>