Java mail初步学习

本文介绍了使用Java Mail API实现邮箱工作流的方法,包括SMTP发送、POP3及IMAP接收邮件的具体步骤,并探讨了不同协议的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初步理解邮箱工作流

  • 所需参数

    1. hostName 配置好的邮箱服务器,发送和接收一般不是一个,各协议连接的服务器也不一定一样

    2. port 需要连接的服务器对应协议开放的接口

      各大邮箱的主机地址和端口在官网都可以查到,例如网易邮箱对应的协议服务器主机地址

      网易主机地址和对应端口号

    3. mail 你在该网站注册或者学校分配的邮箱(这里隐藏了一个巨坑,你可能账号密码所有参数都是对的,但它就是javax.mail.AuthenticationFailedException: Logon failure: unknown user name or bad password ,怎么样都登不上去,这时你可以考虑把@后面的全部去掉,只留@之前的账号,特别是学校或者公司的账号)

    4. password 如果大厂商的邮箱一般会把自己的客户端和外面客户端分开,这样会跟安全,会有额外的授权码登陆,你在Java mail用密码登是登不上去的

    foxMail的客户端还是很好用的,只要你在它的客户端登上去了,你就可以看到所有需要的参数

    foxmail参数

  • 接收

    • 协议

      1. POP3协议

        Post Office Protocol 3,邮箱协议的第三个版本,POP邮局协议负责从邮件服务器中检索电子邮件。这个相当于只读,所做的删除移动等所有修改都是存在于客户端,而不是服务器,就是说如果你是用pop3协议登的,查看自己的有一个未读,点了之后变成已读了,不是服务器的标记变了,而是客户端的记住了,它下次拉取的时候过滤掉,服务器还是存在的,只要你退出账号或者换个客户端,这个邮件就又会被拉取

        Java用pop3接收邮件

         //载入配置
                 FileInputStream in = new FileInputStream(CONFIG_PATH);
                 props.load(in);
                 // 准备连接服务器的会话信息
                 Properties prop = new Properties();
                 // 协议
                 prop.setProperty("mail.store.protocol", "pop3");
                 // 端口
                 prop.setProperty("mail.pop3.port", (String) props.get("getPort"));
                 // pop3服务器
                 prop.setProperty("mail.pop3.host", (String) props.get("getHostName"));
                 prop.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
                 // 创建Session实例对象
                 Session session = Session.getInstance(prop);
                 Store store = session.getStore("pop3");
                 logger.debug("store connecting");
                 store.connect((String) props.get("mail"), (String) props.get("password"));
                 // 获得收件箱
                 Folder folder = store.getFolder("INBOX");
                 /* Folder.READ_ONLY:只读权限
                  * Folder.READ_WRITE:可读可写(可以修改邮件的状态)
                  */
                 //打开收件箱
                 folder.open(Folder.READ_WRITE);
         				// 得到收件箱中的所有邮件
         	      Message[] messages = folder.getMessages();
        
      2. IMAP协议

        Internet Message Access Protocol,是通过Internet获取信息的一种协议,IMAP4改进了POP3的不 足,用户可以通过浏览信件头来决定是否收取、删除和检索邮件的特定部分,还可以在服务器上创建或更改文件夹或邮箱,感觉IMAP是一种优于POP3的协议,它和邮箱的连接是交互的,进行的操作是可以反应到服务器的,同时也可以根据根据服务器的邮件头判断邮件是否以读

        Java用imap接收邮件

         // 准备连接服务器的会话信息
         		Properties props = new Properties();
         		props.setProperty("mail.store.protocol", "imap");
         		props.setProperty("mail.imap.host", "imap.163.com");
         		props.setProperty("mail.imap.port", "143");
         		
         		// 创建Session实例对象
         		Session session = Session.getInstance(props);
         		
         		// 创建IMAP协议的Store对象
         		Store store = session.getStore("imap");
         		
         		// 连接邮件服务器
         		store.connect("xyang0917@163.com", "123456abc");
         		
         		// 获得收件箱
         		Folder folder = store.getFolder("INBOX");
         		// 以读写模式打开收件箱
         		folder.open(Folder.READ_WRITE);
         		
         		// 获得收件箱的邮件列表
         		Message[] messages = folder.getMessages();
        
    • 工作流

      当于你去hostName这个网站登陆账号,查看是否有自己的邮件可以拉取,你收到的邮箱都是别人发送到服务器的,你不在线或者不拉取都会在,发件人和你之间存在一个邮箱服务器

  • 发送

    • 协议

      SMTP

      Simple Mail Transfer Protocol,简单邮件传输协议,SMTP 协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。是一种发送协议。

      Java 用smtp发邮件

        FileInputStream in = new FileInputStream(CONFIG_PATH);
                props.load(in);
                try {
                    // 创建一个HtmlEmail实例对象
                    HtmlEmail email = new HtmlEmail();
                    // 邮箱的SMTP服务器,一般123邮箱的是smtp.123.com,qq邮箱为smtp.qq.com
                    email.setHostName((String) props.get("sendHostName"));
                    // 设置发送的字符类型
                    email.setCharset((String) props.get("character"));
                    //设置ssl链接
                    email.setSSLOnConnect(false);
                    email.setSslSmtpPort((String) props.get("port"));
        
                    // 设置收件人
                    email.addTo(toMail);
                    //添加附件
                    if (filePath!=null) {
                        email.attach(new File(filePath));
                    }
                    // 发送人的邮箱为自己的,用户名可以随便填
                    email.setFrom((String) props.get("mail"),(String) props.get("sendName"));
                    // 设置发送人到的邮箱和用户名和授权码(授权码是自己设置的)
                    logger.debug((String) props.get("mail")+"----"+(String) props.get("password"));
                    email.setAuthentication((String) props.get("mail"),(String) props.get("password"));
                    // 设置发送主题email.setMsg("1234");//设置发送内容email.send();//进行发送
                    email.setSubject(subject);
                    email.setHtmlMsg(msg);
                    email.send();
                    logger.debug("发送成功");
                    return true;
                } catch (Exception e) {
                    logger.debug("发送失败");
                    e.printStackTrace();
                    return false;
                }
      
    • 工作流

      发送就是用你这个账号密码去登别人配置好的mail服务器,你把邮件发送到的不是你填的收件人,而是你填的主机号的对应端口,等收件人拉取,如果是另外一家的就转发到它所在的主机对应的端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值