zoukankan      html  css  js  c++  java
  • 呼之欲出 WebMail 开发手记 (六) 邮件收取

    题外话:首先谢谢各位无论是喜欢我的文章不喜欢我的文章的朋友,有你们的帮助我才会成长。上面两篇文章可能确实没有什么实际的意义,让大家对我的文章有个误解,但我想那是为后面的文章铺路,文章里面的签名也只是防止其他网站的转载,可能大家的想法不一样。我以后的文章还是希望前辈多多批评指正,谢谢。

    邮件的收发,无非就是使用一些组件,找到自己合适的那就用下去。当然如果技术很不错,可以自己动手分析邮件协议,那是另当别论了。

    目前用得比较多的,大概就是  jmail 了。我这里也就使用这个组件进行邮件的收取,邮件的发送就使用 .net 自带的组件了。

    只是现在网络可能过于发达了,要的东西找不到,不要的东西一大堆,就拿收邮件来说,一搜索到处就是一样的文章,抄来抄去,抄也就算了,站长也不检查检查,感觉一点没劲,时不时会骂一句:站长真会偷牛!!

    收发邮件中我们至少需要考虑下面几个因素:

    1. 每个用户有多个邮箱配置信息;
    2. 当前邮箱的收发状态;
    3. 收发邮件异常;
    4. 服务器允许的收发邮件时间间隔。(小于这个时间可能账户会被暂时屏蔽)

    首先我们增加一个继承自 IMailThread,IDisposable 的类 MailThread,既然是使用线程收发,那么必须定义的两个变量:

    private Thread _threadReceive = null;// 收取
    private Thread _threadSend = null;// 发送

    好了,现在我们启动接收邮件线程:

    Code

     
    相信大家已经注意到 BeginReceive 这个家伙了,在这个方法里面,我们首先从数据库中取出当前用户的所有邮箱配置信息,然后依次检查每个邮箱的收取状态,如果正在收取并且距离上一次收取的时间间隔不超过5分钟,就不能再收取。

    BeginReceive


    实践证明,jmail 收取的邮件有两个地方必须自己处理一下,才能得到正确的结果。一个是主题,一个是日期,所以我在上一篇中提到了邮件头解码和日期处理的函数:

    string subject = MailHelper.DecodeStr(message.Headers.GetHeader("Subject"));
    string date = MailHelper.ParseDate(message.Headers.GetHeader("Date"));


     

    Receive:接收单个邮箱的邮件


    其中 dbmail 是邮件系统与数据库打交道的类,在本系列讲完,将提供下载。

    请关注我的下一篇文章,并给予支持批评教育,谢谢大家。

  • 相关阅读:
    LeetCode——Generate Parentheses
    LeetCode——Best Time to Buy and Sell Stock IV
    LeetCode——Best Time to Buy and Sell Stock III
    LeetCode——Best Time to Buy and Sell Stock
    LeetCode——Find Minimum in Rotated Sorted Array
    Mahout实现基于用户的协同过滤算法
    使用Java对文件进行解压缩
    LeetCode——Convert Sorted Array to Binary Search Tree
    LeetCode——Missing Number
    LeetCode——Integer to Roman
  • 原文地址:https://www.cnblogs.com/lyout/p/webmail6.html
Copyright © 2011-2022 走看看