美文网首页
javaMail(一)

javaMail(一)

作者: 云鲸鱼rain | 来源:发表于2018-09-18 14:58 被阅读0次

    最近在工作中用到邮件的功能比较多,发邮件,收邮件,解析邮件。
    首先还是奉上大牛的链接,https://www.cnblogs.com/ysocean/p/7666061.html,大牛的博客中对邮件的各种功能,包括底层原理剖析的一干二净。在此多谢大牛在前方的指路,让我们少走很多弯路。
    结合自己工作中的实际情况,做下总结,便于日后复习查看。(仅供自己学习记录)
    1、发邮件服务器:STMP。收邮件服务器:POP3,IMAP。
    2、无论收发邮件,最根本的就是连接上邮箱的服务器和自己的邮箱。所以几个参数一定要准备好。

    //发邮件
    Properties props = new Properties();
    //设置用户的认证方式
    props.setProperty("mail.smtp.auth", "true");
    //设置传输协议
    props.setProperty("mail.transport.protocol", "smtp");
    //设置发件人的SMTP服务器地址
    props.setProperty("mail.smtp.host", "smtp.163.com");
    
    //收邮件
    Properties props = new Properties();
    //设置传输协议
    props.setProperty("mail.store.protocol", "pop3");
    //设置收件人的POP3服务器
    props.setProperty("mail.pop3.host", "pop3.163.com");
    

    代码是用网易作为例子,更换其他邮箱,自然去找到其他邮箱的服务器地址。
    3、连接到收件箱之后,如果邮箱只做中转站,并不存放邮件,那么就把邮件删掉。

    //删除邮件
    message.setFlag(Flags.Flag.DELETED, true);
    

    4、不能虎头蛇尾,在最后需要把邮件对象关闭。

    //发邮件
    //关闭邮件连接
    transport.close();
    
    //收邮件
    //关闭邮件夹对象
    folder.close();
    //关闭连接对象
    store.close();
    

    5、发邮件的时候,邮件内容包括图片和附件的情况。
    MimeBodyPart 和 MimeMultipart 的用法。
    MimeBodyPart 是普通节点,用来创建文本节点和图片节点。因为文本和图片都算邮件正文内容,所以文本节点和图片节点之间必然存在关系。这时将两个普通节点添加到混合节点MimeMultipart中,再通过setSubType方法建立关联关系。
    因为邮件内容需要的是普通节点,所以组合之后的混合节点需转化成普通节点。

    //图片节点
    MimeBodyPart image = new MimeBodyPart();
    //文本节点
    MimeBodyPart text = new MimeBodyPart();
    //混合节点
    MimeMultipart mm_text_image = new MimeMultipart();
    mm_text_image.addBodyPart(text);
    mm_text_image.addBodyPart(image);
    //关联关系
    mm_text_image.setSubType("related");
    转化成普通节点
    MimeBodyPart text_image = new MimeBodyPart();
    text_image.setContent(mm_text_image);
    

    添加附件是同样的道理,但是实际中遇到的问题是附件名中文乱码,用以下方法解决。

    //附件节点
    MimeBodyPart attachment = new MimeBodyPart();
    //设置附件的文件名(需要编码)
    attachment.setFileName(MimeUtility.encodeText("文件名"));
    

    6、实际应用中,经常会有在某网站通过通过绑定邮箱注册账号的需求。进入自己邮箱点击链接即可激活成功。通过在慕课网的学习,也总结如下:

    class User{
      private Integer uid;//主键
      private String username;//账号
      private String password;//密码
      private String email;//绑定邮箱
      private Integer state;//是否激活成功 1:激活成功 0:未激活成功
      private String code;//激活码
    }
    

    state来判断账号是否在服务器申请成功。默认为0,当邮箱绑定成功之后,状态值改为1。账号申请成功。
    code通过uuid来生成。

    public String getUUID{
      return UUID.randomUUID().toString().replace("-","");
    }
    

    相关文章

      网友评论

          本文标题:javaMail(一)

          本文链接:https://www.haomeiwen.com/subject/dgiynftx.html