每个人生的当口,都是会有一个孤独的时刻,四顾无人,只有自己,于是不得不看明白自己的脆弱,自己的欲望,自己的念想,自己的界限,还有,自己真正的梦想。
分类: LINUX
2016-05-11 11:17:13
原文地址:LINUX:系统自动发邮件,监控系统时用。 作者:szxsztszk
|
现在我向大家详细介绍一下我用 MUTT 收发电子邮件的具体的操作过程。
MUTT 是一个典型的 UNIX 程序,所以说它收发邮件并不确切。我的意思是确立一个以 MUTT 为中心的电子邮件收发环境。用简单的话来说就是用 esmtp 发邮件, fetchmail 收邮件、而用 procmail 过滤邮件以后,再传到 MUTT 中,给您处理。一言难尽,我就用下面的一张图片示意一下:
好了,知道了原理,我们工作起来就有目的了。其中,MUTT 和 fetchmail 以及 procmail 在一般的发行版本里都有的,所以我并不提倡你去网络上下载。(当然,除非你是狂热的自由软件爱好分子)配置 MUTT 我具体的在这里就不多说了。现在我们一步一步的来配置。
很多人喜欢用 sendmail 、postfix、exim 等等的 MTA 发邮件。但是它们都有一个弊端,就是配置烦杂、占用的系统资源巨大(相对于我的 Pentium 166 来说),而且配置不好的话,可能让人家使用你的机子发邮件,造成一定的安全性问题,所以我选择 esmtp 发邮件。estmp 仅仅是一个发邮件的协议,它直接向你指定的 SMTP 邮件服务器上发邮件。所以你可以随时知道你的邮件是否已经发出去,而不是在邮件队列里几天了还不知道。这里要说的是:esmtp 仅仅是完成发邮件的任务,而不提供向外部发邮件的功能,所以不要指望用它来作你的邮件服务器。
最重要的是,对于我来说就是系统的资源问题。你当然可以想象一个 MMX 的芯片所能处理的能力是有限的。所以选择一个小型的程序对于我来说是非常重要的事情。当然,对于你奔N的芯片来说,我想保持系统快速运行是你所希望的。
好了,说了那么多的废话,我们来看具体的操作过程吧。首先你从 esmtp 的网站上面下载 esmtp 程序。然后编译和安装(既然你会看这篇文章,我想这对于你来说并没有什么问题,所以我偷懒略过。)顺便说一句,如果编译不成功的话,或许你没有安装 libesmtp 库,安装一下就可以了。
好了,接下来的就是设置的问题了。
我们先告诉 esmtp 用哪个 SMTP 服务器发邮件。编辑或者建立 .esmtprc 文件,并且输入下面相关的信息:
hostname = smtp.163.com:25
username = "myname"
password = "mypassword"
mda = "/usr/bin/procmail -d %T"
其中,hostname 就是你的 ISP 的 SMTP 服务器的地址和端口(我用的是 163 的邮箱,所以是 smtp.163.com:25 )。而 username 和 password 自然就是你的用户名和密码了。mda 就是定义你的 MDA 了,一般我们都喜欢用 procmail ,所以这样就可以了,一般用不着修改的。esmtp 有很多参数,具体的你可以参考相应的文档。
好了,semtp 现在知道了从那里发送你的邮件了,下面我们告诉 MUTT 用 esmtp 发邮件。esmtp 支持 sendmail 的语法结构,所以你可以这样设置你的 MUTT 用“sendmail”(其实就是 esmtp )发邮件,在 .muttrc 中加入:
set sendmail = "/usr/bin/esmtp -v -X ~/.esmtplog"
对,就是那么简单的一行就可以了。是不是很简单?呵呵。现在启动 MUTT 发一封邮件看看,是不是成功了?
现在我们来解决收邮件的问题。我喜欢用 fetchmail 收邮件,具体的配置其实很简单:在你的 .fetchmail 中加入:
poll pop3.163.com
protocol POP3
user "myname"
password "mypassword"
就可以了。poll 后面的是你的的 POP3 服务器的地址、protocol 你的 POP3 服务器的协议,一般是 pop3 就可以了,user 和 password 是分别是你的用户名和密码。同时要设置你的 .fetchmailrc 的属性为 600 否则 fetchmail 不予启动(处于安全的考虑)。然而我本人通常也是那么做的,但?? fetchmail 就是收不到信件。这个问题我搞了很久,得以解决。
其原因就是 MTA 的问题。从原理上说就是 fetchmail 从你的 POP3 服务器上收到邮件以后传到你的本地 MTA 上,而此时本地 MTA 自然是没有安装,所以当然传不到你的邮件池里。这个问题改如何解决呢?呵呵,这时,又该我们的 esmtp 出面了,现在它不是担当发邮件的责任了,而是伪装成一个 MTA 让 fetchmail 通过它把你的邮件传到你的个人邮件池里。我们只要简单的定义下面的语句在你的 .fetchmailrc 中就可以了:
defaults
mda "/usr/bin/esmtp -f %F %T"
注意,上面的语句一定要在 .fethmailrc 的最前面的位子。否则仍然可能要出错误!
现在执行:
$ fetchmail -avk
看看,是不是收到邮件了?呵呵,祝贺你了。你快要成功了!
下面我们来看看常见的问题。由于现在在 SMTP 服务器普遍实行了 SMTP 认证的。所以它们在转发你的邮件的时候要扫描一下你的邮件头是不是和你的用户名下一致。如果不一致的话将拒绝转发你的邮件。而问题在 于 MUTT 所定义的邮件头都是本地的用户的登陆名和本地的主机名,如 root@localhost 这样的名字,所以 SMTP 服务器当然不予转发。要解决这个问题其实很简单,只需在 .muttrc 中加入:
my_hdr From: AMD-K6
my_hdr Reply-To: AMD-K6
就可以了,第一行定义的是你的发邮件的地址,下面这行定义的是回复邮件的地址。通常是同一个邮箱,所以都是相同的就可以了。
好了,现在你已经大致上掌握了用 MUTT 收发邮件了具体的操作过程了。或许你有很多不明白的地方,但是我想你多看看 man 、多用 google 、肯定能找到答案的。我的邮箱是 posuring@163.com 如果你有任何的问题的话,可以发邮件给我,我尽力帮你解决。
***********************************************************************
三:
在Linux下收发电子邮件问题补遗
mutt+fetchmail+esmtp的文章网上已经有了。王垠的和AMD的文章对我帮助很大!但参照他们的文章仍然会有一些小问题。
首先esmtp的日志问题。按照两文中的设置:
#.muttrc
set sendmail = "/usr/bin/esmtp -v
-X ~/.esmtplog"
意思是使用esmtp发送邮件,但这个语句在我的机器上无论如何也不能在我的HOME下产生日志!而且我的邮件还发不出去!后来我把它改成了:
set
sendmail = "/usr/bin/esmtp -v -X $HOME/.esmtplog"
这样终于看到了日志。通过日志我发现登陆是成功的!但是还是不能够发邮件。通过日志判断是MAIL
FROM居然为空!而我已经设置了my_hdr的内容。通过阅读esmtprc的手册页,和在网上搜索电子邮件协议的资料。我推断my_hdr的内容只能
影响到From:的值。而From:位于向服务器传送的DATA部分。所以我将.esmtprc中的相关内容改为:
identity =
myself@somewhere.com
hostname = smtp.somewhere.com:25
username = "myself"
password = "secret"
这样终于发送成功了!
"All mail clients suck. This one just sucks less." -me, circa 1995
你也许听说过这句话?这不是危言耸听,我还没有遇到一个令我满意的 email 程序,直到我遇到 mutt。它不是图形界面的,但是它非常强大和方便。我曾经把它忽略,但是后来我发现其它 email 程序都有某种我不喜欢的怪毛病。最后我选择了 Mutt。
有人说 Gnus 才是最好的 email 客户端,可是 Gnus 要达到 Mutt 这种效果和方便程度,你需要付出太多代价。所以我宁愿使用 Mutt 调用 Emacs 来编辑 email 而不愿把 Gnus 配置来处理 email.
mutt 具有以下特点:
你可以设置几乎任意的条件来从一堆信件里找到你所需要的那封。比如,你可以说:“只显示一个月之类,不是清华大学发来的,内容包含‘光盘’两个字的 信件”,“把从 fvwm 邮件列表一个星期以前发来的,而且还没有看过的信件全部移到叫 old-fvwm 的信箱”……
你可以给你的信件打分,比如我说:
信件最后的得分就是它的这些分数相加的结果。这样处理之后,你最想看的信件肯定就在最上面了。
你看我的 Mutt 可以变成这个样子。当然这太花了,我不会设置这么多颜色的 :)
这个功能类似 Emacs。你可以把几乎任意的功能绑定到键盘。你可以让 Mutt 的行为变成你喜欢的编辑器。比如我习惯了 VIM 的控制方式,我就把 "gg" 绑定到 "first-entry", 把 "G" 绑定到 "last-entry", 把 "Ctrl-F" 绑定到 next-page, 把 "Ctrl-B" 绑定到 previous-page.
你可以对满足不同条件的信件,信箱采取不同的设置。比如,对于用来收邮件的那些信箱,显示邮件时只显示 from, date, subject, x-mailer 这几个邮件头,而对 sent-mail 信箱还显示 to 这个邮件头;发给我家人,朋友的信件都存到一个特别的信箱中保存。
你可以把一些邮件作上标记(tag),然后对它们进行同意操作,比如删除,存到其它文件,删除附件,……
用一个强大的编辑器来编辑你的 email 你才能高效的完成编辑。一般 email 客户端都是用的自己内嵌的编辑器,这些编辑器一般功能很弱。mutt 并没有试图自己写一个编辑器,因为它明显不可能超过 VIM 和 Emacs, 所以 mutt 可以让你自己选择你喜欢的编辑器,它会去调用它,并且设置很多方便编辑 email 的参数。编辑器编辑完毕后 mutt 会从编辑器得到编辑好的文本,然后你可以加附件什么的。我现在在 mutt 里使用 Emacs 编辑器。
Mutt 不像一般的 email 程序那样直接支持打开某些种类的附件。因为附件的种类实在太多,一个 email 客户端没有可能自己实现所有的功能。所以 Mutt 提供了 .mailcap 的设置。你可以启用你最喜欢的程序来打开某种特定类型的附件。比如,我可以让 lynx 帮我把含有 HTML 附件的信件都转成文本在 Mutt 里显示,我让 ImageMagick 的 display 程序帮我显示图片……
Mutt 可以利用 GnuPG 这样的程序来对信件进行 PGP 加密和数字签名。别人可以用你的公用密钥给你发一封只有你才能看到的信件。你也可以用你的私有密钥给信件“签名”,收到信的人可以用你公布的公钥验证这封 信确实是你发出来的。
听了上面那么多好处之后,还有比这更好的消息吗?
Mutt 的主页在 。上面有所有源程序和说明文档。
Mutt 显然是一个 Unix 的邮件程序,它跟一般的 Windows 邮件程序不同,它不是一个包罗万象的大杂烩。你甚至会发现它根本不直接发出邮件,它从来不自己编辑邮件,它从来不自己对邮件进行加密和数字签名……
Mutt 更像一个文件管理器,只不过它管理的是email。它的功能是借助各个最强大的程序来实现的。这符合 UNIX 的设计思想。
是不是觉得挺麻烦?其实有些 patch 可以使 Mutt 不依赖于这些程序,而自己处理收发工作。但是,强烈建议你使用这些外部程序!到时候你就知道这些东西的好处了。首先,VIM, sendmail, fetchmail 这些程序都是经过千锤百炼的质量信得过的程序,用它们编辑,发送,收取邮件你绝对放心。其次,你得到了一个 UNIX 网络工作站的功能:
Mutt 的用法类似 VIM。你的每一个键都是一个命令,你可以在配置文件~/.muttrc设置很多选项来改变 Mutt 的行为。我没有太多时间写一个入门的介绍。你可以自己看看 。我下面只解决一些中国人用 Mutt 常常遇到的问题。
你一开始看到 Mutt 说明书上说的配置方法可能不知所措。现在我把你开始用的时候需要的一些必要的配置说一下。
这个变量应该设置为一个正则表达式,它是你有可能收到信件的地址。比如我的很简单,只有一个地址:
set alternates="wang-y01@mails.tsinghua.edu.cn"
这个变量有助于 Mutt 显示邮件的地址特征。一般 Mutt 会在index中显示几种不同的邮件地址特征,它们是由 $to_chars 变量指定的。
一般 $to_chars 的定义为 " +TCFL".
你看看下面这幅图,就是mutt 有可能出现的一种列表,你看到地址特征没有?实际上地址特征出现在列表中的位置是可以改变的。待会儿在 $index_format 里你会看到的。
这是一个格式字符串,用来控制你的index的列表显示。它的缺省定义是:
set index_format="%4C %Z %{%b %d} %-15.15L (%4l) %s"
显示出来就是这个样子:
这里有一个简单的对应关系,%4C表示4位数的序号,%Z是邮件状态,你看到那个 "r" 了吗?也就是说我已经回了这封信。%Z 还包含那个 "T", 也就是说这封信不只是寄给我一个人的,我爸爸每次寄信都会CC他自己一份 :) %{%b %d} 是日期格式,它是由 strftime() 函数的格式定义的。这里 %b 就是根据当前的 locale 设置的月份简称,“12月”。%d 就是十进制表示的每月的日号,“31”。后面的……你自己看看manual吧,我不罗嗦了。
指定你有那些信箱文件。当你按 "c" 切换信箱时,再按 Tab 键,这些信箱就可供你选择。
mailboxes Mailbox sent-mail
这是一个 bool 型变量。它表明你在回信时引用原文是否加入原文的邮件头。
set header=no
可以设置为 yes, no, ask-yes, 或者 ask-no. 这是说,当你按q退出时,是否提示你(ask-yes,ask-no),还是直接就退出了(yes),还是根本不理你(no)。
set quit=ask-yes
那些类型的附件是允许直接通过 .mailcap 浏览的?
auto_view text/html
这也是一个提示性变量。它是确定当你退出时,是否提示你把信件从 spool 移动到的 mbox 文件。
set move=no
当 Mutt 用 thread 方式显示时,是否用纯 ascii 表示树状列表。
set ascii_chars=yes
如果设置了就是这个样子:
回信时是否包含原文。
set include
回信的引文之前插入那个符号?
set indent_str="> "
设置你自己的邮件头。比如我想让信件看上去是从 wang-y01@mails.tsinghua.edu.cn 发出的,而不是从 wy@wangyin.com 发出的。因为 wangyin.com 是我自己设置的主机名,不是注册的合法域名。我想让别人看到我的信是从我的清华信箱发出的,让他们直接回信到我的清华信箱,就这么干:
my_hdr From: wang-y01@mails.tsinghua.edu.cn
新信件+4分,爸爸(w2r007)发来的 +2,主题包含“通知”的+2,主题包含 “Circulation” +3, 已经标记删除的 -5,上次没有读的 +1,包含 “believe”的 -10(垃圾广告!)。
score "~N" +4
score "~f w2r007" +2
score "~s 通知" +2
score "~s Circulation" +3
score "~D" -5
score "~O" +1
score "~s believe" -10
排序方式。可以是
date几种方式,每种方式可以在前面加一个 "reverse-" 前缀表示反方向排序。我一般按分数排序:
date-sent
date-received
from
mailbox-order (unsorted)
score
size
subject
threads
to
set sort=score
当用 thread 排序方式时,我们对各个 thread 的相对排序顺序。
set sort_aux=date
如果设置,那么你在pager(就是你看信的内容的窗口里)翻页时,如果翻到最后,再按往下翻也不会翻到下一封信件。如果不设置就会自动翻到下一封 信。
set pager_stop
如果设置,当你按 "r" 回信时,就不会再提示你输入回信地址和主题,直接进入编辑模式。
set fast_reply
当你按 "t" 或者 "D" 之类的标记操作时,是否自动把光标移动到下一封信件。
set resolve=yes
当你在 index 里按 "a" 为来信者取别名时,使用哪一个别名文件保存这个别名。
set alias_file=/home/wy/.mutt.alias
你发出的邮件保存到那个信箱文件?比如可以像我这样每个月发出的信件放在不同的文件里。
set record="~/Mail/=sent-mail-`date +%Y-%m`"
你的终端支持哪一种编码的显示?这个必须和你的终端编码一样。
set charset="gb2312"
发信时可以使用的字符集。只有当前面的字符集不能正确表示信件内容时才会使用后面的。比如,如果你像下面这样设置,你的信件如果全是英文,那么信件 就会被设置为 us-ascii 编码,如果出现了法语字符,那么就会用 iso-8859-1,如果出现了汉字就会用 gb2312,如果以上都不是,那么就用 utf-8。
set send_charset="us-ascii:iso-8859-1:gb2312:utf-8"
当外部程序退出时,是否要求用户按一个键才返回。这在察看某些shell命令输出时是比要的,否则它们一下就消失了。
set wait_key=yes
当你要把信件存到另一个信箱,而这个信箱已经存在时,是否提示附加?
set noconfirmappend
是否把邮件头也放在编辑器里可以修改?
set edit_headers=no
当你在用 pager 看信件时,在 index 留出多少行显示邮件列表?
set pager_index_lines=4
比如我留下4行显示列表,其它的用来显示正文:
告诉 Mutt 你已经订阅了那些邮件列表(mailing-list). 这有助于 Mutt 判断那些信件是邮件列表转过来的,避免你错误的回复到别人的私人信箱。也避免别人回复到你的私人信箱。
subscribe fvwm@fvwm.org
之后,收到的 To: 是 fvwm@fvwm.org 的信件看起来是这样:
地址前面那个 "L" 表示这是一个邮件列表转过来的。你看到以后就不要按 "r" 回信,这样会回到别人的私人信箱去。按 "L",就可以回复到邮件列表地址,这里就是 fvwm@fvwm.org。
以下是一些常见问题和解决方法。很多是我遇到的一些不能直接连接国外网络,没有自己的域名和邮件服务器的人遇到的问题。
用 my_hdr 把你的 From: 设置为你想要的地址就行了。比如我是这样设置的:
my_hdr From: wang-y01@mails.tsinghua.edu.cn
注意 From: 的冒号之后有空格!
set locale="zh_CN"
把 gb2312 编码加到你的 send_charset. 就像这样最好:
set send_charset="us-ascii:iso-8859-1:gb2312:utf-8"
这是因为某些 email 客户端,比如清华大学 mails.tsinghua.edu.cn 的WWW界面客户端 没有设置字符编码,你看看邮件头(按h),是不是有个
Content-Type: text/plain
但是后面没有说 charset="GB2312"? Mutt 遇到这种没有设置 charset 的邮件就会使用 "us-ascii",所以如果你想让这种信件可以正确显示,就把 "us-ascii" 设置为 "gb2312" 的别名:
charset-hook ^us-ascii$ gb2312
注意 "us-ascii" 中间的连字号!
看看你的 $spool 里那个乱码的信件是不是有类似如下内容:
Subject: =?iso8859-1?B?U29oddCj09HCvDq587Dg09DQwrPJ1LG808jro6E=?=
Chinaren 等服务器发出来的信件使用了 quoted-printable 的 subject,而且设置编码为 "iso8859-1",这显然是错误的。
对付这个错误的办法是把 iso-8859-1 变成 gb2312 的别名:
charset-hook ^iso-8859-1$ gb2312
注意 "iso-8859-1" 中间的连字号!
如果仍然有信件乱码。干脆用
charset-hook .* gb2312
把所有信件都用 gb2312 显示。
那就把不是 utf-8 的编码都映射到 gb2312:
charset-hook !utf-8 gb2312
fetchmail 的配置非常简单。如果只是一个人用的话,可以这样设置:比如,我在我的 $HOME 目录编辑了一个 .fetchmailrc:
set daemon 60
poll mails.tsinghua.edu.cn
protocol POP3
user "wang-y01"
password "wang-y01的密码"
poll smth.org
....
....
然后把 fetchmail 写到我的shell启动脚本里:
! ps aux | grep -q fetchmail && fetchmail &
fetchmail 启动后成为一个 daemon, 每分种帮我检查所有邮箱里的邮件,收回来,并且转发到本地信箱。修改上面那个 "60" 就可以改变检查时间间隔。
如果不想让 fetchmail 删除服务器上的文件,而且每次只取新的信。就在配置文件里加上:
keep
uidl
如果你的 Mutt 编译时加入了 POP 功能,那么你可以直接从 POP 服务器收邮件而不用借助于 fetchmail. 把类似这些行加入 ~/.muttrc
set pop_user=wang-y01
set pop_pass="wang-y01的密码"
set pop_host="pop://mails.tsinghua.edu.cn"
也可以一次性输入所有内容:
set pop_host="pop://wang-y01:wang-y01的密码@smth.org"
在 Mutt 里按一下 "G" 就可以取邮件了。
如果你有多个POP信箱,你可以设置一些方便的宏把POP信件收到你信箱里。举个例子,就像我这样:
macro index ,shredder ":set pop_host=\
\"pop://shredder:shredder的密码@smth.org\"\r\
"
macro index ,sk8er ":set pop_host=\
\"pop://sk8er:sk8er的密码@smth.org\"\r\
"
macro index ,ts ":set pop_host=\
\"pop://wang-y01:wang-y01的密码@mails.tsinghua.edu.cn\"\r\
"
macro index ,g ",shredder,sk8er,ts"
这样,我只要按 ,shredder 就可以收我在 smth 上 shredder 的信件,只要按 ,sk8er 就可以收我在 smth 上 sk8er 的信件,只要按 ,ts 就可以收 mails.tsinghua.edu.cn 的信件,只要按 ,g 就可以收取我所有 POP 信箱的信件了。
除了上面的方法,你还可以直接访问 POP3 信箱。比如,我可以直接按 "c" 切换到信箱 pop://sk8er:sk8er的密码@smth.org
就可以浏览 pop 的信件了。切换到其它信箱就浏览不同的 pop。如果你嫌按键太多可以自己定义一个宏。这是同步操作,你如果在这个信箱里删除一封信件,mutt 就会删除你 pop3 服务器上的信件。你不删它也不删。
邮件太多时这样效率很低,每次都要取所有邮件头,就像 Foxmail 的“远程邮件管理”。所以最好在那种不想取回信件,而想直接删除垃圾邮件的时候用这个办法。
参看命令。
你只要把信件用 save-message 函数保存到你的垃圾箱,比如 ~/Mail/Trash,信件会被自动做上 "D"(删除) 标志。为了让 "d" 可以保存到垃圾箱,你可以把 "d" 键绑定到一个 宏。但是如果你要删除垃圾箱里的邮件,这个宏会再次把垃圾箱的邮件存储到垃圾箱,产生循环。所以你应该使用 folder-hook 在垃圾箱里把 "d" 恢复到原来的 delete-message 函数,而在其它信箱使用那个宏。
现在你可以用以下设置得到一个“垃圾箱”的功能。第一次按 "d" 时有可能会被讯问是否建立这个信箱(Trash).
folder-hook . 'macro index d "~/Mail/Trash\r"'
folder-hook ~/Mail/Trash 'bind index d delete-message'
你可以用 ignore 忽略你不想看到的邮件头,如果 ignore *,你就可以忽略所有邮件头。用 unignore 可以恢复显示被忽略的邮件头。所以一个简单的办法就是先把所有邮件头忽略,然后放出你想看的那几个。
看下面的设置。我的 sent.*(发件箱) 里只显示 To: Subject: Date: 三项。而在其它信箱就显示 From: Subject: X-Mailer: Date: 这几项。
folder-hook . "ignore *; unignore from subject X-mailer date"
folder-hook sent.* "ignore *; unignore to subject date"
你还可以指定邮件头显示的顺序:
hdr_order from to subject date
你可以用 alias 来实现一个地址簿。alias 命令的形式是这样的,举个例子:
alias wy Wang Yin
alias 是命令,wy 是别名,Wang Yin
在 To: 的提示下按 Tab 就可以显示联系人列表,然后你可以移动光标选择联系人。
如果你有很多 alias 要写,最好把它们写到另外一个文件,比如叫 .mutt.alias. 然后在 .muttrc 里加上:
source ~/.mutt.alias
你还可以设置一个变量:
set alias_file=~/.mutt.alias
这样你在 index 里按 "a",就可以把来信人加入到这个 alias 文件了。
Mutt 可以处理任何类型的附件。因为它可以调用合适的程序来处理它们。为了直接在 mutt 的窗口里显示 HTML,你只需要在 ~/.mailcap 文件加入:
text/html; lynx --dump %s; nametemplate=%s.html; copiousoutput在 ~/.muttrc 加入:
auto_view text/html
清华大学总是喜欢发送含有 doc 附件的通知。真是让人ft。现在有一个完美的解决方案了:使用 wvware 把 doc 转成 HTML 嵌入mutt里。
wvware 可以在 免 费得到。
wvHtml --charset=gb2312 your.doc your.html就可以把doc转成 HTML。经测试,能够正确处理汉字和图片。
你可以让调用 wvHtml 在自己的窗口里直接显示转换的 doc 文档。只需要在 ~/.mailcap 文件加入:
application/msword; wvHtml --charset=gb2312 %s - | lynx --dump -stdin;在 ~/.muttrc 加入:
nametemplate=%s.html; copiousoutput
text/html; lynx --dump %s; nametemplate=%s.html; copiousoutput
auto_view text/html application/msword这样你的 mutt 看一个 doc 的时候就像这个样子:
Emacs 是一个非常强大的编辑器,所以你肯定会希望能在 Mutt 里使用 Emacs。你可以选择两种方式:
你只需要在 .muttrc 设置:
set editor="emacs -nw"这样会启动一个新的 Emacs。如果你的 Emacs 配置加入了大量扩展,这个启动时间是相当长的,你不希望每回一封email就等上10秒等Emacs启动吧?
有一个办法可以跳过冗长的 Emacs 扩展。只需要把你的 .emacs 里耗时的部分放在一个条件语句里。比如,我就把 desktop 和 session 放在了一个条件语句里启动。如果知道编辑的文件名叫做 "/tmp/mutt-..." 那我们就知道是 mutt 在调用 Emacs,所以我就不加载 desktop 和 session 这种费时间又没用的东西。
(unless
(catch 'found
(dolist (arg command-line-args)
(if (string-match "^/tmp/mutt-" arg)
(throw 'found t))))
;; load desktop
(load "desktop")
(desktop-load-default)
(desktop-read)
;; load session
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
(setq desktop-globals-to-save '(desktop-missing-file-warning))
;; start server
(server-start)
)
这种方式可以使用一个已经启动的 Emacs,启动非常快速。但是我不是很喜欢这种方式,因为我不想离开 Mutt 的终端到 Emacs 的窗口,编辑完了还要切换窗口。看这幅图。
先来看看 Emacs 的设置,启动 Emacs 后,你可以使用 server-start 启动 Emacs 服务器。你也可以把
(server-start)加入到你的 .emacs 文件,这样 Emacs 启动时自动就启动了服务器。
在 .muttrc 里加入
set editor=emacsclient这样 Mutt 在要发送邮件时,就把需要编辑的东西送到已经启动的 Emacs 里。编辑完了之后你按 C-x #,控制会转回到 Mutt.
由于清华大学网络中心的限制,一般同学不能直接连接国外的服务器。这样 sendmail 就不能直接将邮件发送到目的地。我们需要依赖国内的 邮件服务器来转发到目的地。但是现在国内的smtp邮件服务器通常需要 SMTP 验证才能帮你转发邮件。比如 mails.tsinghua.edu.cn, 这是一种防止别人利用自己主机发送垃圾邮件的办法。
sendmail 怎样才能通过 SMTP 身份验证呢?sendmail 的网页上说有办法。可是我搞了一天还是没有搞定。而且 sendmail 是以安全漏洞著称的。所以我决定换用 Postfix。qmail 也很好,但是我不知道怎么让 qmail 通过 AUTH SMTP 转发, 如果有人知道请告诉我。
postfix 是一个可以取代 sendmail 的邮件服务器。它在普通机器上可以达到 sendmail 3 倍的吞吐率。而且相当安全。它可以在 下载安装过程如下:
% make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include" \然后安装
AUXLIBS="-L/usr/local/lib -lsasl"
% make; make install
myhostname = tu140066.tsinghua.edu.cn
mydestination = wangyin.com, $myhostname, localhost.$mydomain
$myhostname 指明了你的主机域名,清华大学的网络给了每个人一个域名,其实就是 tuxxxxxx.tsinghua.edu.cn, xxxxxx 就是你的 IP 后面的数字,比如我的IP是166.111.140.66, 所以我的域名是 tu140066.tsinghua.edu.cn.
$mydestination 指出哪些地址是认为是你自己的地址。你应该把你的机器名(我的是 wangyin.com),$myhostname, $localhost.$mydomain 加进去。
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
relayhost = mails.tsinghua.edu.cn
Your.Relay.Server your_auth_login_name:Your_PassWord
比如我的口令文件是这样的:
mails.tsinghua.edu.cn wang-y01:aDF2m@3d$q=+
当然密码不是那个 :P
#postmap hash:sasl_passwd
postfix start
mutt+msmpt+shell:
脚本格式:
echo -e "文字描述,可以带参数$allname" | mutt -a "附件(写好路径)" -a "附件2(写好路径)" aa@163.com,bb@yahoo.com.cn(收信人) -c cc@163.com,dd@163.com(抄送)
---------------------------------------------
# ~/.msmtprc
#
# The SMTP server of the provider.
account accountName
host smtp.163.com
from account@163.com
auth plain
user account
password password
# echo “$content” | msmtp -a accountName recepient@destDomain.com 即可。
跟sendmail -t的功能差不多,区别在于sendmail把MUA和MTA集为一身,而msmtp只是一个小小的MUA,它需要借助外部的MTA才能完成邮件的发送。
同样,可以不用.msmtprc文件,直接在命令行下执行:
# echo “$content” | msmtp –host=smtp.163.com –auth=plain –from=account@163.com recepient@destDomain.com
可能是出于安全的考虑,直接在命令行上执行不能通过任何参数进行设置密码,只能实时输入。
需要注意的是,也可以通过-C configFile参数来指定配置文件。同时,无论是~/.msmtprc文件还是自己指定的配置文件,都需要设置成600的owner access only权限。
--------------------------------
mutt配置记述 :
http://blog.chinaunix.net/u/24274/showart_373838.html