`
chenqi210
  • 浏览: 79188 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

手动收邮件

 
阅读更多

       最近想用mutt体验一下作高手的感觉,发现高手这个虚名真是害人不浅。

       引用大家常说的一句话。mutt是一个整合工具,本身的作用并不大。收发都依赖别的程序完成。其实mutt也有一点收发的功能。用mutt -v 看一看有哪些带+号。这些带+号的就说明是有的功能,那些没有的功能就继续怨念吧。       姑且就认为自己的mutt不带收发功能吧。然后我们收发邮件可以分别利用如下一些程序来完成。发送:ssmtp

收取:fetchmail

 

# 这一句可以起到全局配置的作用,但是对is xxx here这类的不能起作用。
# 多说一点,procmail是一个分发邮件的程序。fetchmail之后邮件可以被发到这个
# MDA(Mail Delivery Agent)上,然后由这个mda去发到对应的地方。(其实就
# 是存到不同的地方,比如可以写一些通配的规则来把相应的收到的邮件归到不同的
# mailbox 文件里去),这个procmail 对于有多个邮箱的人来说,特别有用。
# 注意一下,这里用的是双引用。根据man muttrc的说法,*nix环境中,貌似双引号
# 里面的内容可以被eval一次,而单引号里面的内容就是纯文本了,不会被eval。
defaults mda "/usr/bin/procmail -f %F -d %T"

# 虽然不懂什么意思,看别人写了,咱也写上。
set no bouncemail

# 这里貌似没有什么结束符的概念,每一项之间打些空格就可以了
# IMAP 这个可以小写的。貌似关键字都是大小写不敏感的。
# IMAP 默认是143端口,所以对于那些不按套路来的邮箱,一
# 定要写好他们自己的端口号。
poll 'imap.gmail.com' protocol IMAP port 993
        username 'yourusername@gmail.com'
        password 'yourpassword'
        is king.god here keep ssl

# 对于有多个邮箱的,可以像上面那样再写一份,换成新的邮件服务器的配置就行了。
poll 'pop.mail.yahoo.com' protocol POP3 port 995
        username 'yourusername@yahoo.com.cn'
        password 'yourpassword'
        is king.god here keep ssl

 

       好了,这样可以收了,但是有个问题。根据网上流传的说法。收到的邮件默认会被放到/var/spool/mail/$USR这个文件里去。注意看了这个是一个文件!!!不是文件夹!!!这里的$USER是指当前登录的用户名。其实这个文件就是个纯文本,是邮件的原始信息,不是二进制的。用vi/vim打开可以看到内容的。这样所有收到的邮件都会被放到这个文件里面,那么用mutt看的时候,就会所有邮件全挤在一个信箱下面。(mutt里面的信箱就是指的这种包含很多原始邮件内容的纯文本文件。) 看邮件的时候会很不方便,所以我们需要procmail 这个东西来当 MDA(Mail Delivery Agent),由它来把不同的邮箱地址收到的邮件归到不同的地方去。

 

procmail的配置文件

# 文件路径一般都在 ~/.procmailrc

# 这个应该是一个环境变量,不管他了,反正指定好了之后,
# 那些信箱文件都在在这个MAILDIR下面。
MAILDIR=$HOME/Mail/

# 这个 :0 好像是能匹配到邮件头部
:0
# 这个正则,写得不好,反正意思到了。
* ^To:(\s*yourusername1@gmail.com)|((.*)\<yourusername1@gmail.com\>)|((.*)\"yourusername1@gmail.com\")
# 邮件头部符合上面那条正则的邮件都会被放到以下面这个字
# 符串内容为文件名的信箱文件里去
"yourusername1@gmail.com"

# 有多个邮箱的可以继续匹配。反正写到自己高兴为止。
:0
* ^To:(\s*youserusername2@yahoo.com.cn)|((.*)\<yourusername2@yahoo.com.cn\>)|((.*)\"yourusername2@yahoo.com.cn\")
"yourusername2@yahoo.com.cn"

 已经搞定了,现在用fetchmail -avk试试,应该能看到一大堆的刷屏信息了。暂时还不知道怎么只取下来新的,只会一次全拿下来。

 

=================================================================

 2013-8-29: 解决证书问题

=================================================================

用fetchmail的时候通常会发现一个很讨厌的关于证书的调试信息

写道
fetchmail: 服务器证书验证错误: unable to get local issuer certificate

 要解决这个问题,需要把这个域名牵涉到的证书装到cygwin里面。

针对每一个有问题的网站都先用openssl s_client -connect unfixed.domain.com:port -showcerts 观查每一个证书的机构,找到这些机构的证书并装上。

 

首先是gmail的

openssl s_client -connect imap.gmail.com:993 -showcerts 写道
CONNECTED(00000003)
---
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
i:/C=US/O=Google Inc/CN=Google Internet Authority
-----BEGIN CERTIFICATE-----
MIIDfjCCAuegAwIBAgIKVExoXgABAACEMTANBgkqhkiG9w0BAQUFADBGMQswCQYD
VQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZR29vZ2xlIElu
dGVybmV0IEF1dGhvcml0eTAeFw0xMzA0MTUwODQ1MjVaFw0xMzEyMzExNTU4NTBa
MGcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1N
b3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgSW5jMRYwFAYDVQQDEw1wb3Au
Z21haWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJcFLd/CvEAEYb
PComwfh/VJnV4I0AbErRIBztla7KdaOL3SN8a2lnKKZSkX9fhIMQ8mwCyZ8iWzLG
aXaWr64uChCH2lQNA6O5B/kcLeBfWV51Fwqiq6aRQxpYY7sUqOP03oABRLtBiFOq
wCCLLbkeEcjLuWzzebFk2HX6L++02wIDAQABo4IBUDCCAUwwHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBS3kDe0ZShOJvpTHlTbh4fjZtVf
lDAfBgNVHSMEGDAWgBS/wDDr9UMRPme6npH7/Gra42sSJDBbBgNVHR8EVDBSMFCg
TqBMhkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2dsZUludGVybmV0QXV0aG9y
aXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNybDBmBggrBgEFBQcBAQRaMFgw
VgYIKwYBBQUHMAKGSmh0dHA6Ly93d3cuZ3N0YXRpYy5jb20vR29vZ2xlSW50ZXJu
ZXRBdXRob3JpdHkvR29vZ2xlSW50ZXJuZXRBdXRob3JpdHkuY3J0MAwGA1UdEwEB
/wQCMAAwGAYDVR0RBBEwD4INcG9wLmdtYWlsLmNvbTANBgkqhkiG9w0BAQUFAAOB
gQA8MCOlbZZGyLz5byFAq6eFhNw74ahaKVW3QeskRkPUI7hkr37Kmoaq8PE9Oosk
lewH6mgDjheUb6DJJhNhnmcgkAvLfyq0fdDKceSwpTbV5xjcKp3/0G0lzKSMxB7C
oOzEcClsFNLx6EP4FsJS1ELJRGbop7xQF8Wz/5mr88HjFw==
-----END CERTIFICATE-----
1 s:/C=US/O=Google Inc/CN=Google Internet Authority
i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
-----BEGIN CERTIFICATE-----
MIICsDCCAhmgAwIBAgIDFXfhMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTIxMjEyMTU1ODUwWhcNMTMxMjMxMTU1ODUw
WjBGMQswCQYDVQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZ
R29vZ2xlIEludGVybmV0IEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
gYkCgYEAye23pIucV+eEPkB9hPSP0XFjU5nneXQUr0SZMyCSjXvlKAy6rWxJfoNf
NFlOCnowzdDXxFdF7dWq1nMmzq0yE7jXDx07393cCDaob1FEm8rWIFJztyaHNWrb
qeXUWaUr/GcZOfqTGBhs3t0lig4zFEfC7wFQeeT9adGnwKziV28CAwEAAaOBozCB
oDAfBgNVHSMEGDAWgBRI5mj5K9KylddH2CMgEE8zmJCf1DAdBgNVHQ4EFgQUv8Aw
6/VDET5nup6R+/xq2uNrEiQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E
BAMCAQYwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v
Y3Jscy9zZWN1cmVjYS5jcmwwDQYJKoZIhvcNAQEFBQADgYEAvprjecFG+iJsxzEF
ZUNgujFQodUovxOWZshcnDW7fZ7mTlk3zpeVJrGPZzhaDhvuJjIfKqHweFB7gwB+
ARlIjNvrPq86fpVg0NOTawALkSqOUMl3MynBQO+spR7EHcRbADQ/JemfTEh2Ycfl
vZqhEFBfurZkX0eTANq98ZvVfpg=
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority
---
No client certificate CA names sent
---
SSL handshake has read 2108 bytes and written 442 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-RC4-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-RC4-SHA
Session-ID: 3871AB6D77F7C16A9E8E3307AEEFCB4AB388EFC619813DEED8411D29D2793F02
Session-ID-ctx:
Master-Key: 0FDAA85444D3879A3F8A569A783171A998D01ADAA3AC6C6A7CF5109CF4A67ACB753B5A184D9D53D9C8ADA7F3684B038E
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 100800 (seconds)
TLS session ticket:
0000 - bc 52 af c7 83 85 57 69-f4 c3 11 a5 de 03 b9 ce .R....Wi........
0010 - 9f f1 ed 2f 05 92 79 f9-34 0c 58 92 35 c2 d1 10 .../..y.4.X.5...
0020 - ec d8 1a 85 fd ae 28 4c-71 df 16 6e 6c 5b db 8e ......(Lq..nl[..
0030 - 3a be b6 42 a0 72 c4 e5-90 a4 7d 5e df 54 2f cf :..B.r....}^.T/.
0040 - 77 23 6c 9d d3 2b c9 ad-c3 21 97 6b 0b 03 16 1c w#l..+...!.k....
0050 - e5 64 87 44 24 a0 0b 8a-18 bc d1 39 e1 7d b2 e2 .d.D$......9.}..
0060 - 95 2f 7f 80 0e 18 a0 8e-c3 bd b4 3f df 5a 3e 19 ./.........?.Z>.
0070 - 05 53 11 94 b5 cd 25 57-aa 51 10 15 c9 a9 c7 80 .S....%W.Q......
0080 - c7 77 6c 56 aa 4f f0 c7-dd 12 d3 5d 38 fd a9 93 .wlV.O.....]8...
0090 - e7 f1 19 93 ....

Start Time: 1377700456
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
+OK Gpop ready for requests from 114.94.24.194 df3pf18627873pbc.13
-ERR bad command df3pf18627873pbc.13

 

再注意fetchmail里面的具体信息

fetmail -v 写道
正在尝试连接至 173.194.79.108/993...已连接。
fetchmail: 服务器证书验证错误: unable to get local issuer certificate
fetchmail: 这意味着根证书(为 /C=US/O=Google Inc/CN=Google Internet Authority 而颁发)不在 CA 证书受信路径处,或是 c_rehash 需要在证书目录下运行。详细信息请查看手册页中的 --sslcertpath 和 --sslcertfile 部分。

 从前面openssl 连接imap.gmail.com:993 的certificate chain来看

Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

 根据众所周知的,证书的认证是自顶向下的,例如从CA向下面颁发证书,子机构再给孙机构颁发证书。其中有三个不同的名字出现,推断他们的关系为: pop.gmail.com -> Google Internet Authority -> Equifax Secure Certificate Authority (箭头方向指向上一级)

估计是因为equifax这个证书不存在,那么找到这个证书应该就行了。

可以在这里下到这个证书: http://www.geotrust.com/resources/root-certificates/index.html提醒一点:fetchmail貌似只认pem格式的证书(实际上是一堆base64编码后的内容)

下载之后放到某位置,例如 ~/.certs/下面。然后

$youname@domain ~
c_rehash .certs/
Doing .certs/
Equifax_Secure_Certificate_Authority.pem => 578d5c04.0
然后再启动fetchmail,gmail的警告就不见了。同理去找到yahoo需要的根证书DigiCertHighAssuranceEVRootCA.crt
https://www.digicert.com/digicert-root-certificates.htm 写道
Root Certificates
DigiCert High Assurance EV Root CA Valid until: 10/Nov/2031
Serial #: 02:AC:5C:26:6A:0B:40:9B:8F:0B:79:F2:AE:46:25:77
Thumbprint: 5FB7EE0633E259DBAD0C4C9AE6D38F1A61C7DC25
Test my browser for this root certificate
Download
DigiCert Assured ID Root CA Valid until: 10/Nov/2031
Serial #: 0C:E7:E0:E5:17:D8:46:FE:8F:E5:60:FC:1B:F0:30:39
Thumbprint: 0563B8630D62D75ABBC8AB1E4BDFB5A899B24D43
Test my browser for this root certificate
Download
DigiCert Global Root CA Valid until: 10/Nov/2031
Serial #: 08:3B:E0:56:90:42:46:B1:A1:75:6A:C9:59:91:C7:4A
Thumbprint: A8985D3A65E5E5C4B2D7D66D40C6DD2FB19C5436
Test my browser for this root certificate
Download
 注意下回来的这个crt不是pem格式的。(用文本编辑器打开一看便知)这时用openssl把这个证书转换成pem格式的既可
openssl x509 -in DigiCertHighAssuranceEVRootCA.crt -out DigiCertHighAssuranceEVRootCA.pem -inform DER -outform PEM
下载之后放到某位置,例如 ~/.certs/下面。 inform 和 outform里面的格式是碰运气测出来的,其他地方说是需要先转成DER。然后从DER再转到PEM。反正遇到出错的情况多试几次。
http://forums.novell.com/novell-product-discussions/collaboration/data-synchronizer/ds-mobility-pack/429592-problems-digicert-ssl-certificate.html 写道
Convert crt to der:
openssl x509 -in mobility.crt -out mobility.der -outform DER

Convert a DER file (.crt .cer .der) to PEM
openssl x509 -inform der -in mobility.der -out mobility.pem
      

 

=====================================================================

     更方便的解决证书问题的办法

=====================================================================

如果装了ca-certificate,那么在/usr/ssl/certs/下面存在一个ca-bundle.crt,从名字上看得出来这是一个证书合集。实际上这里面也包含了非常多的证书,没必要到处去下载了。到.fetchmailrc里指定一下

 

defaults mda "/usr/bin/procmail -f %F -d %T" sslcertck sslcertfile /usr/ssl/certs/ca-bundle.crt

   这样里面每一个poll都会去ca-bundle.crt里去验证

注意:这个ca-bundle.crt不能用普通的办法生成pem,强行用openssl命令转换只能取出文件里第一个证书。

分享到:
评论

相关推荐

    javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码

    在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将详细探讨这些问题的原因及相应的解决方案。 ##...

    VB6+Jmail简单的邮件收发小程序

    3. 接收邮件:用户可以设定检查新邮件的频率,或者手动触发邮件接收,程序会连接到POP3或IMAP4服务器,获取新的邮件列表并显示在界面上。 4. 邮件管理:用户可以阅读、删除、保存或转发收到的邮件。 在开发过程中,...

    常用收发邮件组件(jmail、cdonts、aspemail)

    为了编写某些asp程序,需要一些收发邮件组件,但是您的电脑上没有,这时就必须安装了,如果专门下载组件 的安装包来安装,就太浪费空间了,其实只要在系统中加入组件的dll文件就可以实现这些组件的功能了!为此 ...

    教你如何用outlook收发yahoo.cn邮件和gmail邮件

    在使用Outlook收发邮件时,可能遇到的问题包括服务器连接问题、认证失败、邮件发送限制等。确保你的网络连接稳定,并遵循邮件服务商的安全策略,例如使用两步验证或者定期更新密码,以保障账户安全。 总结来说,...

    一个Delphi写的邮件收发软件

    概述:实现单线程多帐户的邮件收发及保存。 功能表: 一。邮件操作 1。收邮件 2。发邮件 3。另存邮件 4。另存附件 5。删除邮件 6。回复邮件 二。帐户操作 1。新建帐户 2。删除帐户 3。帐户设置 三。地址簿操作 1。...

    VTP 接收邮件程序代码

    总体来说,`VTP 接收邮件程序代码`是一个利用VFP和第三方库实现的邮件接收解决方案,它能帮助用户自动化处理邮件,节省手动检查和存档的时间。这种类型的程序对于需要定期检查多个邮箱或需要自动处理邮件内容的业务...

    通过Pop3接收邮件

    - 无邮件历史:除非手动保存,否则在服务器上的邮件在下载后会被删除,无法查看邮件历史。 四、替代方案 IMAP(Internet Message Access Protocol)是另一种邮件接收协议,它弥补了POP3的不足,支持邮件的在线查看...

    邮件附件自动接收

    这个“邮件附件自动接收”的程序可能是一个解决方案,它能够帮助用户高效地管理来自电子邮件的附件,将其保存到指定的本地位置,从而减轻手动操作的负担。下面我们将详细探讨相关的知识点。 1. **网络通信**:邮件...

    kmail油箱服务(支持自动收发邮件,支持任何类型的附件发送,接收.)

    这项技术的创新之处在于它支持自动收发邮件,而且能够处理任何类型的附件,大大提升了用户在邮件通讯中的便利性。开发环境是经典的Visual C++ 6.0,因此,对理解并分析其源代码有一定的技术要求。 首先,让我们深入...

    javamail接收(pop3)邮件

    NULL 博文链接:https://zhaoshijie.iteye.com/blog/804788

    Ubuntu1210利用thunderbird收发邮件

    下面我们将详细介绍如何在Ubuntu 12.10上配置Thunderbird来收发邮件。 首先,检查是否已经安装了Thunderbird。在Ubuntu系统中,可以通过启动“Software Center”或使用命令行工具`apt`来查看和安装软件。如果发现...

    基于JavaMail的电子邮件收发系统设计说明.doc

    通过深入理解SMTP和POP3等邮件传输协议,设计出一个简化操作、实用性强的系统,使用户能快速收发邮件,不受时间和地点限制。 1.2 国外发展趋势和现状 电子邮件作为互联网基础服务,全球用户基数庞大,中国也不例外...

    邮件收发管理系统.zip

    - **邮件存储**:在数据库中存储邮件信息,如发件人、收件人、主题、正文、附件等。 - **邮件管理界面**:一个Web界面,允许用户查看、发送、删除和搜索邮件。 为了进一步了解和学习这个系统,你可以: 1. **阅读...

    iPad如何收发邮件.docx

    在iPad上收发邮件是一项基本且重要的功能,对于工作和生活都极为便利。iPad内置的邮件客户端——Mail,支持多种邮件服务提供商,如Gmail,以及通过“其他”选项自定义设置的邮件服务。以下是详细的操作步骤和相关...

    发送电子邮件软件和代码

    SMTP允许用户将邮件从发件人的邮箱服务器传递到收件人的邮箱服务器,而IMAP和POP3则允许用户下载并查看存储在服务器上的邮件。 ### 发送电子邮件的软件 1. **桌面应用**:像Outlook、Thunderbird和Apple Mail这样的...

    让Red_Hat支持中文邮件收发

    然而,对于默认的邮件收发工具——Mozilla Mail而言,自动调整为中文环境仍需用户手动配置。本文将详细介绍如何在Red Hat环境下,通过Mozilla Mail实现中文邮件的收发,确保邮件内容能够准确无误地展示。 #### 创建...

    foxmail邮件接收

    对于支持IMAP4的邮箱,Foxmail可以开启邮件推送功能,一旦有新邮件到达,客户端会立即通知用户,无需手动检查。 六、安全性与隐私 Foxmail提供SSL/TLS加密技术,确保在传输邮件时数据的安全性,防止信息被窃取。...

    delphi2010版本IMAP协议下载邮件,能自动获取大附件下载地址

    1. U_Loadmail.dcu:这可能是负责加载邮件的单元,包含了处理邮件收发的代码逻辑。 2. U_main.dcu:主程序单元,通常包含应用程序的启动和主界面相关的代码。 3. U_Method.dcu:可能包含各种操作方法,比如IMAP协议...

    javamail实现邮件收发和加密

    这个过程通常由邮件客户端自动完成,但开发者也可以在 Java 应用中编写代码来手动处理。 8. **最佳实践** - 使用最新的 JavaMail 版本以获取安全更新和性能优化。 - 保护好私钥,避免泄露。 - 为敏感信息选择...

Global site tag (gtag.js) - Google Analytics