FreeBSD/Linux 使用Mutt + procmail + fetchmail +msmtp +Gmail

这篇文章是参考引用以下网站和自己的实践完成:
http://wiki.freebsdchina.org/doc/m/mutt_gmail_usage
http://www.marksanborn.net/freebsd/using-fetchmail-to-backup-gmail-with-freebsd/
http://www.andrews-corner.org/mutt.html#download
http://hi.baidu.com/yunpengwu/blog/item/e4cc88547ef6901c3a29353b.html/cmtid/2f7d6309b4a087c93bc76383

在这里的这种方法虽然是当今时代的“多此一举”, 但是也算是一种风味。

  • openssl:用于和gmail的邮件服务器建立ssl连接,只有建立了ssl连接,才能接受或者发送电子邮件;
  • fetchmail:用来从gmail的邮件服务器上(pop.gmail.com)取回电子邮件(首先和服务器建立SSL连接);
  • procmail:由fetchmail取会来的电子邮件,通过procmail进行分拣工作,分发的各自的邮箱去,比如你可以给freebsd-doc邮件列表单独制定一个邮箱,这样可以方便对邮件进行管理;
  • msmtp:用于发送电子邮件到gmail的邮件服务器(smtp.gmail.com)上去(首先和服务器建立SSL连接);
  • gnupg:用于对电子邮件进行加密,这样只有某个人才能察看文件的内容;或者是对电子邮件进行数字签名,这样别人可以通过你的gpg公钥开验证你的电子 邮件是否被编辑过,如果被别人编辑过,数字签名验证就会失败。关于gnupg的加密模型或者说加密机制可以参考其主页:gnupg
  • vim:用于编辑邮件
  • mutt:用于把上面的几个合并起来。

安装OpenSSL:

# cd /usr/ports/security/openssl
# make install clean

推荐这种方式:
# cd mail/.certs/
# axel-o Equifax_Secure_Certificate_Authority.pem https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.cer
# openssl x509 -in Equifax_Secure_Certificate_Authority.pem -fingerprint -subject -issuer -serial -hash -noout
# c_rehash mail/.certs/
# file mail/.certs/594f1775.*

也可以使用这种方式。
$ touch Thawte_Premium_Server_CA.pem

—–BEGIN CERTIFICATE—–
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
UCemDaYj+bvLpgcUQg==
—–END CERTIFICATE—–

$ touch Equifax_Secure_CA.pem

—–BEGIN CERTIFICATE—–
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
70+sB3c4
—–END CERTIFICATE—–

现在:已经取得了邮件服务器认证,但是还需要让系统知道认证文件在哪。告诉系统第三方认证的位置, 我放在$HOME/mail/.certs/下面。
然后,运行下述命令:

$ c_rehash $HOME/mail/.certs

现在:系统已经知道了第三方认证在哪,邮件服务器的认证问题解决了。


安装并配置msmtpmsmtp用于发送电子邮件到gmail的邮件服务器)

由于FreeBSD的ports team里面这个port的maintainer并没有把SSL这个编译选项加到默认的编译设置中去,所以需要用户手工添加,或者是直接添加到/etc /make.conf中去

$ cd /usr/ports/mail/msmtp
$ vim Makefile

用vim打开以后搜索一下ssl,发现下述内容:

26 .if defined(WITH_GNUTLS)
27 LIB_DEPENDS+= gnutls.26:${PORTSDIR}/security/gnutls
28 CONFIGURE_ARGS+= –with-ssl=gnutls
29 .elif defined(WITH_OPENSSL)
30 USE_OPENSSL= yes
31 CONFIGURE_ARGS+= –with-ssl=openssl
32 .else
33 CONFIGURE_ARGS+= –without-ssl
34 .endif

所以,在安装的时候应该这样:

# cd /usr/ports/mail/msmtp
# make WITH_OPENSSL=yes configure 

然后注意看最后的输出,你应该看到tls/ssl后面的内容了吧,这个是必须有的,没有发送不出去邮件。

Install prefix ……… : /usr/local
TLS/SSL support …….. : yes (Library: OpenSSL)
GNU SASL support ……. : no
GNU Libidn support ….. : yes
NLS support ………… : yes
GNOME Keyring support .. : no
MacOS X Keychain support : no

然后:

# make install clean

配置 .msmtprc

account default
host smtp.gmail.com
port 587
from yourname@gmail.com
tls on
tls_starttls on
tls_trust_file /home/username/Mail/.certs/Thawte_Premium_Server_CA.pem
auth on
user yourname@gmail.com
password 123456
logfile /home/username/Mail/.msmtp.log

注意,写好配置文件以后要修改文件的权限:
$ chmod 600 .msmtprc
发邮件的问题解决了。


安装并配置fetchmail

# cd /usr/ports/mail/fetchmail
# make install clean

配置 .fetchmailrc

poll pop.gmail.com
port 995
proto POP3
user ‘yourname@gmail.com’
password 123456     你可以不添加这行,这样在你收信的时候系统会问你要password
options
no keep
ssl
sslcertck
sslcertpath /home/username/Mail/.certs/

修改文件的权限
$ chmod 600 .fetchmailrc
收邮件的问题解决了。


安装并配置procmail

# cd /usr/ports/mail/procmail
# make install clean

procmail 主要是接收各种订阅的电子邮件列表,通过procmail来进行分拣工作,.procmailrc配置文件如下,使用时注意调整目录设置:

#######################################
PATH=$HOME/bin:/usr/bin:/usr/local/bin:

MAILDIR=$HOME/Mail/

LOGFILE=/home/username/Mail/.procmaillog

#######################################
# FreeBSD mailing list:    (这里是把邮件分类到不同的邮箱)
#:0
#* ^List-Id:.*freebsd-announce  (有id 关于reebsd-announce的主题邮件
#1_freebsd-announce                    分配到这个文件里面)

#:0
#* ^List-Id:.*freebsd-security-notifications
#1_freebsd-security-notifications

#:0
#* ^List-Id:.*freebsd-amd64
#1_freebsd-amd64

#:0
#* ^List-Id:.*freebsd-doc
#1_freebsd-doc

#:0
#* ^List-Id:.*freebsd-gnome
#1_freebsd-gnome

#:0
#* ^List-Id:.*freebsd-performance
#1_freebsd-performance

#:0
#* ^List-Id:.*freebsd-security
#1_freebsd-security

#:0
#* ^List-Id:.*cnproj-cvs
#1_cnproj-cvs

#:0
#* ^List-Id:.*cnproj-submit
#1_cnproj-submit

#######################################
# Gnu Octave mailing list:

#:0
#* ^List-Id:.*bug-octave
#2_bug-octave
#:0
#* ^List-Id:.*help-octave
#2_help-octave
#:0
#* ^List-Id:.*octave-maintainers
#2_octave-maintainers

#######################################
:0                 (未分类的邮件)
* .*
inbox           (放到inbox文件里)
#######################################

分拣邮件的问题解决了。


安装并配置mutt

# cd /usr/ports/mail/mutt
# make install clean

这是我的 .muttrc

# Personal information
set hostname=olo.FreeBSD (随便取名)
set realname=olo (随便取名)

my_hdr From: yourname@gmail.com

# sendmail
set sendmail="/usr/local/bin/msmtp"

# fetchmail and procmail 这里的 i 就是,在mutt里使用i键开始收信。
macro index i "!fetchmail -a -m ‘procmail -d %T’r"  

# GnuPG
#source usr/local/share/examples/mutt/gpg.rc

#默认目录为#
set mbox= +inbox
set spoolfile= +inbox

set editor="vim"

#设置index和folder的格式#
set index_format="| %4C | %Z | %{%b %d} | %-15.15L | %s"
set folder_format="| %2C | %t %N | %8s | %d | %f"

#添加颜色#
color normal white default
color attachment blue default
color bold brightwhite default
color underline default blue
color error brightwhite default
color indicator white blue
color message brightblue default
color status white blue

mutt也搞定了。
现在在终端中,输入mutt 收信就可以了。

mutt的具体使用请参考资料。

Mutt

联系人列表
保存在一个单独的文件中:
~/.mutt.alias

#vi .muttrc
set alias_file = ~/mail/mutt_aliases  # In their own file
source ~/mail/mutt_aliases           # Source them
set sort_alias=alias                 # Sort alphabetically

在mutt的邮件列表里面
a 将当前邮件的发件人加入列表
在输入收件人地址时,只需要输入别名的前几个字母,tab即可。

邮件加不同标志
邮件状态标志说明:
在index_format中用%Z表示。
一般 $to_chars 的定义为 " +TCFL".
" "(空): 表示这封邮件不是给你的,也就是说 To: 和 Cc: Bcc: 都没有你的地址,很多转发的邮件,未确认的邮件列表邮件,垃圾邮件都有这个特征。
+: 表示你是收件人(To: 是你的地址之一),而且是唯一的收件人。
T: 表示你是收件人(To: 包括了你的地址之一),但是你不是唯一的收件人。这是一封群体信件。
C: 表示你的地址出现在 CC:,但是你不是唯一的被抄送的人。
F: 表示这封邮件是你发出去的。
L: 表示这是一封你已经加入的邮件列表寄来的。

!: 表示重要邮件,用F键来切换
*: 表示加标志的邮件,用t键来切换
N: 表示未读新邮件,用N键来设定
O: 表示未读旧邮件
r: 表示回复过的邮件

设置不同的颜色
#颜色设置
color error red white   #错误提示栏
color status white blue #状态栏
color hdrdefault magenta default

color index     yellow         default ~N      # New
color index     yellow         default ~O      # Old
color index     red            default ~F      # Flagged
color index     cyan           default ~T      # Tagged
color index     blue           default ~D      # Deleted

# 删除到trash目录
folder-hook . ‘macro index d "s~/Mail/trashr"’
folder-hook ~/Mail/trash ‘bind index d delete-message’

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s