linux下用mail發送郵件

利用外部郵箱發送郵件的方法

 

bin/mail會默認使用本地sendmail發送郵件,這樣要求本地的機器必須安裝和啓動Sendmail服務,配置非常麻煩,而且會帶來不必要的

資源佔用。而通過修改配置文件可以使用外部SMTP服務器,可以達到不使用sendmail而用外部的smtp服務器發送郵件的目的:

修改/etc/nail.rc (/etc/mail.rc)

set [email protected] smtp=smtp.domain.comset smtp-auth-user=username smtp-auth-password=passwordset smtp-auth=login
說明:

from是發送的郵件地址

smtp是發生的外部smtp服務器的地址

smtp-auth-user是外部smtp服務器認證的用戶名

smtp-auth-password是外部smtp服務器認證的用戶密碼

smtp-auth是郵件認證的方式

配置成功後,就可以使用了

可以發送一封郵件測試一下:

mail -s "test" [email protected] <content.txt 其中-s後面的是郵件標題,[email protected]是收件人地址,content.txt裏面是郵件正文

 

以上內容轉自: http://www.diybl.com/course/6_system/linux/Linuxjs/20091119/182839.html

 

我試了一把,2006年之前註冊的163郵箱可以的,tom郵箱都是可以的

 

postfix

postfix是Wietse Venema在IBM的GPL協議之下開發的MTA(郵件傳輸代理)軟件,想成爲sendmail替代產品,它試圖成爲更快、更容易管理、更安全的MTA,

  安裝:

  rpm -ivh /mnt/cdrom/Server/postfix-2.3.3-2.i386.rpm postfix主程序

  rpm -ivh /mnt/cdrom/Server/postfix-pflogsumm-2.3.3-2.i386.rpm postfix日誌工具

  rpm -ivh /mnt/cdrom/Server/dovecot-1.0-1.2.rc15.el5.i386.rpm POP程序

  首先查看是否安裝過postfix服務,用rpm –qa |grep postfix ,

  

  我這裏是裝過的,在這裏先用rpm –e postfix刪除postfix,然後再安裝

  

  同樣,需查看是否有安裝過POP,這個服務用的是dovecot服務器,這裏我也裝過,刪除後重新安裝即可

  

  

  安裝後是不是就可以直接運行了呢?

  

顯然是不行的,它的一些必要的參數沒有生效是不能運行的,下面修改幾個常用的選項:

  Hostname 郵件主機的FQDN

  Mydomain 地機郵件主機所在的域

  Myorigin 本地郵件發送時的域名

  Mydestinatin 本地郵件接收是域名

  Inet_interface 郵件主機監聽的端口號

  Mynetworks 本地郵件服務器信賴的網絡

  Relay_domain 本地郵件服務器傳遞的域

  Smtpd_banner 登錄時顯示的標題,最好是把具體的版本號給隱藏起來(增加安全性)

  

  

  

  

  

  

  

  

這樣就完成了一個最基本的smtp的服務器了,當然還要做很多事情,如限制收、發郵人,別名,虛擬域等等,下面重啓看看效果如何

  

  當然不要忘記了修改我們的POP服務設置,直接修改/etc/dovecot.conf ,把#protocols = imap imaps pop3 pop3s前面的#去掉即可,重啓看看:

  

  

  然後用我們最熟悉的Outlook登錄,

  

  奇怪了?不會是postfix設置錯了吧?先看看日誌:

  Tail –f /var/log/maillog

  

  出現這個錯就是dovecot的配置問題了?明明以前直接修改dovecot支持的郵件接收方法就行了,這次爲什麼不行呢?試試telnet wudionline.com 25和telnet wudionline.com 110 看看

  

  

也都沒問題啊,想想前兩天裝的時候這樣配置明明是可以在outlook登錄的啊,但前兩天是這種情況:

  可以用outlook登錄,但outlook接收不到郵件,可以發郵件,收郵件可以在/var/spool/mail裏看到,就是接收不到本地 outlook來,經網上參考,最好把#mail_location = mbox:~/mail:INBOX=/var/mail/%u前的#去掉,就可以在本地收郵件了,經分析那裏因爲dovecot設置的郵件接收路徑不 對,所以改一點就OK了,但這次是登錄不上去啊,網上找了半天也沒有答案,於是試試把 #mail_location = mbox:~/mail:INBOX=/var/mail/%u,前的#去掉,

  

  重啓看看

  

  真的登錄成功了。試了一下收、發郵件都沒有問題了。

  平時由於root賬號默認接收系統各種錯誤日誌,但是用root登錄個人覺得不太方便,於是想用一個普通用戶也接收發給root的郵件,看了一下配置幫助文檔,按這樣的格式就可以用別名的方式接收其它用戶的郵件:

  root: wuzh

  當然得寫入/etc/aliases文件裏,這樣當系統出錯錯誤或其它的事件日誌的時候,就會把日誌附加一份發給wuzh這個普通用戶了這個就不截圖了:),改了過後直接發一封郵件給root,然後在wuzh這個賬號裏就可以看到郵件原文了

  還有一個功能:虛擬域利用一個虛擬域名來代表實際域來收發郵件(以我這樣的低水平來說,我感覺我用不上,它只能用於內部交流,如果與外界收發郵 件的時候虛擬域就無法在廣域網上實行解析,也就是根本就接收不到郵件,)如圖:我把我的域名wudionline.com改成 wudionline.net發信給我的另一個郵箱

  

  發送人地址是變了,可是要回復那就難了…….看

  

  他的好處就是隱藏自己的域名,好讓別人找不到他(如果擔心別人找他的話….),當然還有其它的好處的,我的水平菜還不知道怎麼用.等學會了再來更新……

  這裏還是演示一下如何設置吧:

  在main.cf里加入virtual_maps = hash:/etc/postfix/virtual, 這個是虛擬域的位置,還要往這個文件里加入內容,格式爲:

  Wudionline.net anything

  [email protected] wuzh

  之後,用postmap命令生成虛擬域數據庫:

  postmap /etc/postfix/virtual

  前面是虛擬用戶,後面是系統用戶,其實收郵件還是系統用戶收發的,只是允許虛擬用戶對其操作而已

 

postfix部分轉自:http://www.webjx.com/server/linux-14673.html

 

自動發送郵件的腳本

 

記得在學校的時候,有一次和老師討論問題,有一些不明白的地方,他說,你可以編個程序驗證一下。我差點沒有暈過去。因爲那時的我非常害怕編程。不過還好,有很多事情我們不需要編程就可以實現。

比如最近,我開始厭煩在桌子上面的兩條電腦之間轉來轉去,於是我打算寫一小段shell腳本,當linux/unix下面的工作完成的時候,系統自動發送一個郵件到windwos下面通知我。

在Linux和Unix下面發送郵件非常方便,如果只是要發送一個消息,那麼需要的命令就更簡單了,只不過不同的系統郵件服務器命令稍有不同。對於我,經常工作的電腦是HP的C8000工作站,它的系統是HP-UX,還有一臺也是HP,安裝的是redhat AS系統。

HP-UX的郵件程序需要在terminal下面輸入:mail命令,然後進去寫信,而redhat的郵件發送程序就比較方便,只要一條命令就可以指定主題、附件、內容:

echo "Content:The work is done" | mail -s "This is subject" [email protected]

下面這一段腳本就是通過某一個文件是否已經生成進行判斷,如果生成了就發送通知郵件到指定郵箱。否則就每30秒鐘檢查一次,有完成的就發送通知郵件,有沒有完成的就休眠後繼續循環,一直到全部完成再退出。

#!/bin/csh
set arrayA = ($*)
set i=1
set SysInfo = `uname`
set arrayB = ()
while ( $i <= $#arrayA )
if ( -f ${arrayA[$i]}/result_data.txt) then
if ($SysInfo == HP-UX ) then
mail [email protected] << !
Subject:'${arrayA[$i]} is finished'
'${arrayA[$i]} is finished'
.
!
else
echo "${arrayA[$i]} is finished" | mail -s "${arrayA[$i]} is finished" [email protected]
endif
echo "${arrayA[$i]} is finished, a mail is sent to mwang"
else
set arrayB = ( $arrayB $arrayA[$i] )
endif

if ( ( $i >= $#arrayA ) && $#arrayB) then
set arrayA = ($arrayB)
echo "$arrayA is under calculation, please wait. Now: " `date`
set arrayB = ()
set i = 0
sleep 30
endif
@ i++

end


轉自 http://www.veryword.com/2008/11/10/auto-send-mail-script.html
   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章