JavaMail API的应用
JavaMail API 是一个用于阅读、编写和发送电子消息的可选包(标准扩展),用来创建邮件用户代理(Mail User Agent,MUA)类型程序。
JavaMail API 需要 JavaBeans Activation Framework 来支持任意数据块的输入及相应处理。
下载后解压.zip 文件,将 mail.jar 文件和 activation.jar 文件复制到 JRE(Java 运行时环境,Java Runtime Environment)目录下的 lib/ext 目录中去。
或者,将 jar 文件添加系统到 CLASSPATH 中。
首先,需要针对各个邮箱的服务器地址等信息进行分别了解
1.网易邮箱的 POP3 与 SMTP 服务器
邮箱 | POP3 服务器(端口110) | SMTP 服务器(端口25) |
188.com
|
pop3.188.com | smtp.188.com |
163.com
|
pop3.163.com | smtp.163.com |
126.com
|
pop3.126.com | smtp.126.com |
netease.com
|
pop.netease.com | smtp.netease.com |
yeah.net
|
pop.yeah.net | smtp.yeah.net |
SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
2.腾讯邮箱的 POP3 与 SMTP 服务器
邮箱 | POP3服务器(端口995) | SMTP服务器(端口465或587) |
---|---|---|
qq.com | pop.qq.com | smtp.qq.com |
SMTP服务器需要身份验证。所以需要获取授权码。
具体内容:http://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001256&&id=28
代码演示:
利用JavaMail接收邮件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // JavaMail接收邮件 // 设置邮件服务器、用户名、密码及整个应用程序中共享的其它信息 Properties props = new Properties(); props.put( "mail.pop3.host" , "pop.163.com" ); props.put( "mail.pop3.port" , "110" ); // 用 getInstance() 创建一个独立的 session Session session = Session.getDefaultInstance(props); // 连接到一个 Store,获取一个 Folder Store store = session.getStore( "pop3" ); store.connect( "y**********@163.com" , "y*************" ); // POP3 唯一可以用的文件夹是 INBOX。如果使用 IMAP,还可以用其它文件夹。 Folder folder = store.getFolder( "INBOX" ); folder.open(Folder.READ_ONLY); int size = folder.getMessageCount(); for ( int i= 1 ; i<=size; i++) { Message message = folder.getMessage(i); String from = message.getFrom()[ 0 ].toString(); String subject = message.getSubject(); // 用 getContent() 来获取其内容,或者用 writeTo() 将内容写入流。getContent()方法只能得到消息内容,writeTo() 的输出却包含消息头。 // String content = (String) message.getContent(); Date date = message.getSentDate(); System.out.println( "From: " + from); System.out.println( "Subject: " + subject); // System.out.println("Content: " + content); System.out.println( "Date: " + date); System.out.println( "接收成功!" ); } // 读完邮件,需要关闭与 folder 和 store 的连接。 folder.close( true ); store.close(); |
利用JavaMail发送邮件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // JavaMail发送邮件 Properties props = System.getProperties(); props.put( "mail.smtp.host" , "smtp.163.com" ); props.put( "mail.smtp.port" , "25" ); props.put( "mail.smtp.auth" , "true" ); Session session = Session.getDefaultInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { // 通过用户名和密码访问受保护的资源 return new PasswordAuthentication( "y**********@163.com" , "y*************" ); } }); MimeMessage message = new MimeMessage(session); message.setFrom( new InternetAddress( "y**********@163.com" )); // Address address = new InternetAddress("xxx@qq.com")确定信件地址 // 需要消息显示多个 from 地址,可以使用 addFrom() 方法:Address address[] = ...;message.addFrom(address); // 三种预定义的地址类型是:Message.RecipientType.TO、Message.RecipientType.CC、Message.RecipientType.BCC message.addRecipient(Message.RecipientType.TO, new InternetAddress( "3********@qq.com" )); // 设置主题 message.setSubject( "JavaMail发送测试" ); // message.setContent("Hello", "text/plain")设置内容,参数分别代表内容和 mime 类型。MIME 类型缺省为 text/plain message.setText( "JavaMail发送测试JavaMail发送测试JavaMail发送测试" ); // 用协议指定的语言发送消息(通常是 SMTP) Transport.send(message); System.out.println( "发送邮件成功!" ); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?