copyright(c) 李雪白 2007年
本文遵從自由軟件基金會(huì)發(fā)布的GNU自由文檔許可證(GNU Free Document License), 任何組織和個(gè)人都有在此條款下的復(fù)制,轉(zhuǎn)載,修改的權(quán)限。
我用的操作系統(tǒng)是Debian或者Ubuntu GNU/linux
這里的組合是mutt+msmtp+getmail+procmail
mutt是作為客戶(hù)端,msmtp是郵件發(fā)送mta,getmail收取郵件,procmail過(guò)濾郵件。
在Debian中默認(rèn)安裝的mta是exim4,在Ubuntu中默認(rèn)安裝的mta是postfix, 它們當(dāng)然可以用,但是足夠用于郵件服務(wù)器了,如果你是個(gè)人電腦使用,就不需要 用這么好的mta了,況且exim4或者postfix占用系統(tǒng)資源很大,沒(méi)有必要開(kāi)機(jī)自動(dòng)運(yùn)行。
msmtp是為mutt寫(xiě)的,很簡(jiǎn)單輕便的. 另外,還有些人用esmtp等都可以。
收取郵件,從前大家都使用比較著名的fetchmail. fetchmail是收取信件,但不是直接放在本地硬盤(pán)中,而是需要本地mta投遞,所以 需要procmail
看到有人建議不用fetchmail,而是用getmail, 據(jù)說(shuō)fetchmail問(wèn)題太多,而getmail則沒(méi)有那些問(wèn)題, 你可以在aptitude中看getmail4 包的介紹,就說(shuō)是為了替代fetchmail的
作者為什么要寫(xiě)getmail的說(shuō)明在 http://pyropus.ca/software/getmail/faq.html#faq-about-why
當(dāng)然可能有人喜歡exim或者postfix,喜歡fetchmail,我會(huì)放在后面講述。 分別是MuttConfig:exim MuttConfig:postfix MuttConfig:fetchmailrc
現(xiàn)在我來(lái)說(shuō)怎么配置
首先aptitude
可以先卸載exim4或者postfix,這時(shí)候會(huì)遇到其他包的關(guān)聯(lián)問(wèn)題,因?yàn)椴淮嬖趍ta了 嘛,所以選中msmtp-mta
再選中msmtp,mutt,getmail4,procmail
再選中l(wèi)ynx(這是一個(gè)文本話(huà)瀏覽網(wǎng)頁(yè)的工具),wv (wvware是用于把MS doc文檔 轉(zhuǎn)化為html或者tex文檔的工具), 這兩個(gè)在后面配置mutt中用的著。
$ mkdir ~/Mail $ cd ~/Mail
新建三個(gè)文件
$ vim inbox $ vim sent $ vim postponed
空文件,存盤(pán)退出就可以了。
新建~/.muttrc
# lixuebai #編輯器 直接在 Mutt 的終端里使用非圖形界面的 Emacs (emacs -nw) set editor="emacs -nw" #設(shè)置郵件發(fā)送程序 set sendmail="/usr/bin/msmtp" #建立信箱 set folder="~/Mail" set mbox="~/Mail/inbox" #set mbox_type=maildir set spoolfile="~/Mail/inbox" set postponed="~/Mail/postponed" set record="~/Mail/sent" # 讓mutt監(jiān)視下面幾個(gè)郵箱,并隨時(shí)報(bào)告新郵件 mailboxes "=inbox" mailboxes "=USTCstudent" mailboxes "=USTCteacher" mailboxes "=ustcbbs mailboxes "=Gmail" set check_new = yes set timeout = 600 #set alternates="xxx@mail.ustc.edu.cn" #這是一個(gè)格式字符串,用來(lái)控制你的index的列表顯示。它的缺省定義是 set index_format="%4C %Z %{%b %d} %-15.15L (%4l) %s" #指定你有那些信箱文件。當(dāng)你按 "c" 切換信箱時(shí),再按 Tab 鍵,這些信箱就可供你選擇 mailboxes Mailbox sent-mail #這是一個(gè) bool 型變量。它表明你在回信時(shí)引用原文是否加入原文的郵件頭。 set header=no #可以設(shè)置為 yes, no, ask-yes, 或者 ask-no. 這是說(shuō),當(dāng)你按q退出時(shí),是否提示你(ask-yes,ask-no), #還是直接就退出了(yes),還是根本不理你(no)。 set quit=ask-yes #html類(lèi)型的附件是允許直接通過(guò) .mailcap 瀏覽的? #doc類(lèi)型的附件通過(guò)wvware轉(zhuǎn)成html 瀏覽 auto_view text/html application/msword #這也是一個(gè)提示性變量。它是確定當(dāng)你退出時(shí),是否提示你把信件從 spool 移動(dòng)到的 mbox 文件。 set move=no #當(dāng) Mutt 用 thread 方式顯示時(shí),是否用純 ascii 表示樹(shù)狀列表。 set ascii_chars=yes #回信時(shí)是否包含原文。 set include #回信的引文之前插入那個(gè)符號(hào)? set indent_str="> " #設(shè)置你自己的郵件頭。 my_hdr From: xxx@mail.ustc.edu.cn #打分 #新信件+4分,主題包含“通知”的+2,主題包含 “Circulation” +3, 已經(jīng)標(biāo)記刪除的 -5,上次沒(méi)有讀的 +1,包含 “believe”的 -10(垃圾廣告!)。 score "~N" +4 score "~s 通知" +2 score "~s Circulation" +3 score "~D" -5 score "~O" +1 score "~s believe" -10 #排序方式。 set sort=score #當(dāng)用 thread 排序方式時(shí),我們對(duì)各個(gè) thread 的相對(duì)排序順序。 set sort_aux=date #如果翻到最后,再按往下翻也不會(huì)翻到下一封信件 set pager_stop #如果設(shè)置,當(dāng)你按 "r" 回信時(shí),就不會(huì)再提示你輸入回信地址和主題,直接進(jìn)入編輯模式。 set fast_reply #當(dāng)你按 "t" 或者 "D" 之類(lèi)的標(biāo)記操作時(shí),是否自動(dòng)把光標(biāo)移動(dòng)到下一封信件。 set resolve=yes #地址簿 source ~/.mutt.alias #當(dāng)你在 index 里按 "a" 為來(lái)信者取別名時(shí),使用哪一個(gè)別名文件保存這個(gè)別名。 set alias_file=/home/lixuebai/.mutt.alias #你發(fā)出的郵件保存到那個(gè)信箱文件?比如可以像我這樣每個(gè)月發(fā)出的信件放在不同的文件里。 set record="~/Mail/=sent-mail-`date +%Y-%m`" #你的終端支持哪一種編碼的顯示?這個(gè)必須和你的終端編碼一樣。推薦用utf8 set charset="utf8" #send_charset set send_charset="us-ascii:iso-8859-1:gb2312:utf-8" #外部程序退出時(shí),是否要求用戶(hù)按一個(gè)鍵才返回。這在察看某些shell命令輸出時(shí)是比要的, #否則它們一下就消失了。 set wait_key=yes #當(dāng)你要把信件存到另一個(gè)信箱,而這個(gè)信箱已經(jīng)存在時(shí),是否提示附加? set noconfirmappend #是否把郵件頭也放在編輯器里可以修改? set edit_headers=no #當(dāng)你在用 pager 看信件時(shí),在 index 留出多少行顯示郵件列表? set pager_index_lines=4 #告訴 Mutt 你已經(jīng)訂閱了那些郵件列表(mailing-list). #subscribe fvwm@fvwm.org #mutt顯示日期為中文 set locale="zh_CN" #有些沒(méi)有設(shè)置字符編碼時(shí) charset-hook ^us-ascii$ gb2312 #Chinaren 等服務(wù)器發(fā)出來(lái)的信件使用了 quoted-printable 的 subject, #而且設(shè)置編碼為 "iso8859-1",這顯然是錯(cuò)誤的。 #對(duì)付這個(gè)錯(cuò)誤的辦法是把 iso-8859-1 變成 gb2312 的別名 charset-hook ^iso-8859-1$ gb2312 # evolution 發(fā)過(guò)來(lái)的 subject 為 utf-8 編碼的郵件標(biāo)題亂碼! #那就把不是 utf-8 的編碼都映射到 gb2312 charset-hook !utf-8 gb2312 # mutt進(jìn)行pop3收信,當(dāng)然之前要查看$ mutt -v 編輯情況的確編輯了pop3了。 # 以后進(jìn)入mutt按G就可以收信了。 #set pop_user=xxx@mail.ustc.edu.cn #set pop_pass="xxxxxx" #set pop_host=202.38.64.8 #現(xiàn)在不用mutt直接收信了。 #把mutt發(fā)送的from域作為sendmail發(fā)送郵件的sender(否則會(huì)用user@localdomian) set envelope_from=yes macro index G "!getmail\n" "Invoke getmail" macro pager G "!getmail\n" "Invoke getmail"
新建~/.msmtprc
# xxx@mail.ustc.edu.cn account xxx@mail.ustc.edu.cn host 202.38.64.8 from xxx@mail.ustc.edu.cn auth plain user xxx@mail.ustc.edu.cn password xxxxxx
科大郵件服務(wù)器是采用明碼密碼的,所以有auth plain
注意一點(diǎn),~/.msmtprc權(quán)限不能過(guò)高,
$ chmod -v 600 ~/.msmtprc
就可以了。
新建文件夾~/.getmail/ 并在這個(gè)文件夾中新建文件getmailrc
$ mkdir ~/.getmail $ cd ~/.getmail/ $ vim getmailrc
[options] verbose = 1 read_all = false message_log = ~/.getmail/log [retriever] type = SimplePOP3Retriever server = 202.38.64.8 username = xxx@mail.ustc.edu.cn password = xxxxxx [destination] type = MDA_external path = /usr/bin/procmail unixfrom = true
使用crontab定時(shí)自動(dòng)收信
$ crontab -e
每隔10分鐘收一次信,只收未讀的信件。
0,10,20,30,40,50 * * * * getmail -n
新建文件~/.procmailrc
PATH=/bin:/sbin:/usr/bin:/usr/sbin SHELL=/bin/bash MAILDIR=$HOME/Mail DEFAULT=$MAILDIR/inbox LOGFILE=$MAILDIR/.procmaillog :0 * ^From.*@mail.ustc.edu.cn USTCstudent :0 * ^From.*@ustc.edu.cn USTCteacher :0 * ^From.*@bbs.ustc.edu.cn ustcbbs :0 * ^From.*@gmail.com Gmail :0 #最后的這個(gè)配置就是指如果上面分類(lèi)剩下的信件全扔到inbox里 * .* inbox # 黑名單(垃圾郵件) :0: * ^From.*badguy /dev/null
用 alias 來(lái)實(shí)現(xiàn)一個(gè)地址簿。alias 命令的形式是這樣的,舉個(gè)例子:
alias ab Xx X <xxx@mail.ustc.edu.cn>
alias 是命令,ab 是別名,Xx X <xxx@mail.ustc.edu.cn> 是一個(gè)標(biāo)準(zhǔn) 的 email 地址。這樣,如果你在 index 里按 "m",在 To: 的提示下輸入 "ab",就可 以發(fā)信給 Xx X <xxx@mail.ustc.edu.cn>。
在 To: 的提示下按 Tab 就可以顯示聯(lián)系人列表,然后你可以移動(dòng)光標(biāo)選擇聯(lián)系人。
如果你有很多 alias 要寫(xiě),最好把它們寫(xiě)到另外一個(gè)文件,比如叫 .mutt.alias. 然后 在 .muttrc 里加上:
source ~/.mutt.alias
在里面寫(xiě)諸如
alias music Music <music@ustc.edu.cn> alias video 科大影視 <video@ustc.edu.cn> .........
你還可以設(shè)置一個(gè)變量:
set alias_file=~/.mutt.alias
這樣你在 index 里按 "a",就可以把來(lái)信人加入到這個(gè) alias 文件了。
mutt(和gnus一樣)默認(rèn)的附件格式是rfc2231, 但實(shí)際上大多數(shù)郵件客戶(hù)端卻是rfc2047。據(jù)說(shuō)rfc2231才是標(biāo)準(zhǔn)的。 為了迎合其他人,需要改變mutt的附件格式,要打補(bǔ)丁,詳見(jiàn) brep的主頁(yè),可以使用brep打的包。
然后在.muttrc中增加
set rfc2047 parameter=yes
mutt 可以處理任何類(lèi)型的附件。因?yàn)樗梢哉{(diào)用合適的程序來(lái)處理它們。為了直接在 mutt 的窗口里顯示 HTML,先aptitude安裝lynx, 你需要在 ~/.mailcap 文件加入:
text/html; lynx --dump %s; nametemplate=%s.html; copiousoutput
在 ~/.muttrc 加入:
auto_view text/html
許多人喜歡發(fā)送微軟的doc文檔作為附件,使用wvware可以轉(zhuǎn)化成為html文檔或者 latex文檔。mutt窗口可以顯示html,先aptitude安裝wv,然后在~/.mailcap中 加入
application/msword; wvHtml --charset=gb2312 %s - | lynx --dump -stdin; nametemplate=%s.html; copiousoutput
在~/.muttrc中加入
auto_view text/html application/msword
OK,mutt已經(jīng)配置好了,運(yùn)行試試吧,
$ mutt
下面是說(shuō)明配置exim4的配置和postfix的配置(MuttConfig:postfix), 還有fetcmail的使用(MuttConfig:fetchmailrc)。 喜歡它們的人可以看。
$ su # dpkg-reconfigure exim4-config
根據(jù)你的信箱的情況,如果你的信箱是要求smtp認(rèn)證的,(不需要smtp認(rèn)證的跳過(guò)MuttConfig:nosmtp1)
按照如下的流程,比如科大信箱mail.ustc.edu.cn現(xiàn)在就是要smtp認(rèn)證的, 那么就要按照下面所示.
(1)將配置文檔拆分成小文件么? 否 (2)選擇“用smarthost發(fā)信;通過(guò)smtp或fetchmail接受郵件” (3)系統(tǒng)郵件名稱(chēng),隨意;(可以寫(xiě)xxx@mail.ustc.edu.cn) (4)要監(jiān)聽(tīng)的入站 SMTP 連接的 IP 地址:127.0.0.1 (這樣,就只有本機(jī)可以利用exim4) (5)其它可接受的郵件目的地址:(empty) (6)為這些主機(jī)進(jìn)行郵件轉(zhuǎn)發(fā):(empty) (7)負(fù)責(zé)處理從本機(jī)寄出的郵件的機(jī)器(smarthost): 202.38.64.8 (8)要在寄出的郵件中隱藏本地郵件名稱(chēng)嗎? 是 (9)本地用戶(hù)的可視域名:同3) (10)保持最小 DNS 查詢(xún)量嗎(按需拔號(hào) Dial-on-Demand)? 否
還要修改幾個(gè)配置文件:
(1) /etc/exim4/passwd.client,smtp的賬號(hào)密碼設(shè)置,加入:
202.38.64.8:用戶(hù)名:密碼
對(duì)于學(xué)生要用 用戶(hù)名@mail.ustc.edu.cn
(2) /etc/exim4/exim4.conf.template,exim4配置文件,找到下面的文字
# Because AUTH PLAIN and AUTH LOGIN send the password in clear, we # only allow these mechanisms over encrypted connections by default. # You can set AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS to allow unencrypted # clear text password authentication on all connections.
看懂了就知道了,因?yàn)閑mail服務(wù)器的授權(quán)方式是明文方式驗(yàn)證的,所以要加入:
AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS = 1
對(duì)于沒(méi)有smtp認(rèn)證的郵箱,在dpkg-reconfigure exim4-config的第二步時(shí)候選擇
互聯(lián)網(wǎng)站;直接通過(guò) SMTP 發(fā)送或接收信件
其他的基本上默認(rèn)或者參考上面的列表就可以了,也不需要配置上面的兩個(gè)文件。
配置之后重新啟動(dòng)exim4
# /etc/init.d/exim4 restart
根據(jù)你的信箱的情況,如果你的信箱是要求smtp認(rèn)證的,(不需要smtp認(rèn)證的跳過(guò)MuttConfig:nosmtp2)
$ sudo dpkg-reconfigure postfix
按照提示一步一步做, 修改配置類(lèi)型為internet with smarthost
relayhost 設(shè)置為202.38.64.8
配置修改幾個(gè)文件
1./etc/postfix/master.cf 修改
smtp inet n - - - - smptd
為
smtp inet n - n - - smtpd -v #可以在/var/log/message中找到錯(cuò)誤信息
2, /etc/postfix/main.cf中增加
smtpd_sasl_auth_enable = yes # 允許明文 smtpd_delay_reject=yes smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated permit_auth_destination reject smtpd_client_restrictions = permit_sasl_authenticated broken_sasl_auth_clients =yes smtpd_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/saslpass # smtp認(rèn)證的密碼文件
3,編輯/etc/postfix/saslpass
202.38.64.8 user:password # user應(yīng)該是xxx@mail.ustc.edu.cn
為了加速,用postmap生成數(shù)據(jù)庫(kù):
postmap hash:/etc/postfix/saslpass
為了安全
chown -v root:root /etc/postfix/saslpass* chmod -v 600 /etc/postfix/saslpass*
若是不認(rèn)證的,也是選擇
互聯(lián)網(wǎng)站;直接通過(guò) SMTP 發(fā)送或接收信件
新建~/.fetchmailrc
在里面寫(xiě)類(lèi)似
defaults mda "/usr/bin/procmail -d user" set daemon 60 poll 202.38.64.8 uidl protocol POP3 user "xxx@mail.ustc.edu.cn" password "xxxxxx" keep poll bbs.ustc.edu.cn .... ....
上面user 表示你自己的用戶(hù)名,
uidl表示只收取新的信件,
keep表示不刪服務(wù)器上的郵件。
注意~/.fetchmailrc 的屬性設(shè)為 600 若太高比如超過(guò)710, fetchmail 不予啟動(dòng)(處于安全的考慮)。
1,王垠主頁(yè)的mutt配置的說(shuō)明,
2,jamescsy, [指南]Exim4+fetchmail+mutt在debian下收發(fā)電子郵件
3,lo0ol, postfix+mutt+tsocks配置成功.可以通過(guò)代理認(rèn)證smtp server發(fā)信
4,冷風(fēng), 帶smtp認(rèn)證的postfix配置
5,yixiu, 使用msmpt+mutt+getmail4+procmail處理ustcmail聯(lián)系客服