文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java怎么基于Jakarta Mail实现收发邮件

2023-06-14 19:41

关注

小编给大家分享一下Java怎么基于Jakarta Mail实现收发邮件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

java基本数据类型有哪些

Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型。3、字符类型,字符类型的关键字是“char”。4、布尔类型,是表示逻辑值的基本数据类型。

Jakarta Mail API提供了一个独立于平台和协议的框架来构建邮件,完成邮件接收与发送功能。它也包含在Java EE平台中,也可以和Java SE平台一起使用。

Jakarta Mail的前生是JavaMail。JavaMail最后一个版本是于2018年8月发布,已经停止更新。新项目应该使用Jakarta Mail。

现在很多邮箱默认关闭smtp,pop3,imap服务,需要在设置中手动开启。

Java怎么基于Jakarta Mail实现收发邮件

如果邮箱是使用授权码,则需要生成授权码(代替下文中密码),这种方式更安全。

依赖

注意Jakarta Mail引用的包名与JavaMail不同,我写demo时用的是2.0.0版。

<dependency>    <groupId>com.sun.mail</groupId>    <artifactId>jakarta.mail</artifactId>    <version>{version}</version></dependency>

所有jar清单:

Java怎么基于Jakarta Mail实现收发邮件

最新版本包含了对Android的支持,可参考Jakarta Mail for Android

发送邮件

使用smtp协议接收,本文以QQ邮箱为例。

发送普通文本邮件

MailObject mailObj = new MailObject();mailObj.setFrom("engr-z@qq.com");mailObj.setTo(new String[]{"post@engr-z.com"});mailObj.setSubject("JavaMail 2.0");mailObj.setFormat(MailObject.EmailFormat.TEXT);mailObj.setBody("Java 收发邮件 (Jakarta Mail)");// smtp配置,可保存到properties文件,读取Properties props = new Properties();props.put("mail.smtp.host", "smtp.qq.com");props.put("mail.smtp.port", 465);props.put("mail.smtp.ssl", true);// 需要认证props.put("mail.smtp.auth", true);props.put("mail.smtp.user", "engr-z@qq.com");props.put("mail.smtp.pass", "******");// 使用sslprops.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");//props.put("mail.smtp.socketFactory.fallback", false);//props.put("mail.smtp.socketFactory.port", mailConfig.getPort());// 创建会话Session session = Session.getInstance(props, new Authenticator() {    @Override    protected PasswordAuthentication getPasswordAuthentication() {        if (Boolean.valueOf(props.getProperty("mail.smtp.auth"))) {            // 需要认证            PasswordAuthentication auth = new PasswordAuthentication(props.getProperty("mail.smtp.user"), props.getProperty("mail.smtp.pass"));            return auth;        }        return super.getPasswordAuthentication();    }});// 构建邮件消息MimeMessage msg = new MimeMessage(session);msg.setFrom(new InternetAddress(mailObj.getFrom()));InternetAddress[] address = new InternetAddress[mailObj.getTo().length];for (int i = 0, j = mailObj.getTo().length; i < j; i++) {    address[i] = new InternetAddress(mailObj.getTo()[i]);}// 可以用msg.setRecipients方法增加多个接收人,指定接收人类型// Message.RecipientType.CC 抄送// Message.RecipientType.BCC 密送msg.setRecipients(Message.RecipientType.TO, address);msg.setSubject(mailObj.getSubject());if (MailObject.EmailFormat.HTML.equals(mailObj.getFormat())) {    // html格式    msg.setContent(mailObj.getBody(), "text/html;charset=utf-8");} else {    msg.setText(mailObj.getBody());}msg.setSentDate(new Date());// 发送邮件Transport.send(msg);

发送带附件的邮件

MailObject mailObj = new MailObject();mailObj.setFrom("engr-z@qq.com");mailObj.setTo(new String[]{"post@engr-z.com"});mailObj.setSubject("JavaMail 2.0");mailObj.setFormat(MailObject.EmailFormat.TEXT);mailObj.setBody("Java 收发邮件 (Jakarta Mail)");// smtp配置,可保存到properties文件,读取Properties props = new Properties();props.put("mail.smtp.host", "smtp.qq.com");props.put("mail.smtp.port", 465);props.put("mail.smtp.ssl", true);// 需要认证props.put("mail.smtp.auth", true);props.put("mail.smtp.user", "engr-z@qq.com");props.put("mail.smtp.pass", "******");// 使用sslprops.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");//props.put("mail.smtp.socketFactory.fallback", false);//props.put("mail.smtp.socketFactory.port", mailConfig.getPort());// 创建会话Session session = Session.getInstance(props, new Authenticator() {    @Override    protected PasswordAuthentication getPasswordAuthentication() {        if (Boolean.valueOf(props.getProperty("mail.smtp.auth"))) {            // 需要认证            PasswordAuthentication auth = new PasswordAuthentication(props.getProperty("mail.smtp.user"), props.getProperty("mail.smtp.pass"));            return auth;        }        return super.getPasswordAuthentication();    }});// 构建邮件消息MimeMessage msg = new MimeMessage(session);msg.setFrom(new InternetAddress(mailObj.getFrom()));InternetAddress[] address = new InternetAddress[mailObj.getTo().length];for (int i = 0, j = mailObj.getTo().length; i < j; i++) {    address[i] = new InternetAddress(mailObj.getTo()[i]);}// 可以用msg.setRecipients方法增加多个接收人,指定接收人类型// Message.RecipientType.CC 抄送// Message.RecipientType.BCC 密送msg.setRecipients(Message.RecipientType.TO, address);msg.setSubject(mailObj.getSubject());Multipart mp = new MimeMultipart();// 邮件内容MimeBodyPart body = new MimeBodyPart();if (MailObject.EmailFormat.HTML.equals(mailObj.getFormat())) {    // html格式    body.setContent(mailObj.getBody(), "text/html;charset=utf-8");} else {    body.setText(mailObj.getBody());}mp.addBodyPart(body);// 附件for (File file : mailObj.getFiles()) {    MimeBodyPart attachment = new MimeBodyPart();    attachment.attachFile(file);    mp.addBodyPart(attachment);}msg.setContent(mp);msg.setSentDate(new Date());// 发送邮件Transport.send(msg);

代码中MailObj是我创建的MailObject对象,MailObject封装了邮件相关的信息:

@Datapublic class MailObject {    enum EmailFormat {        TEXT, HTML    }        private String from;        private String[] to;        private String[] cc;        private String[] bcc;        private String subject;        private String body;        private EmailFormat format;        private File[] files;}

接收邮件

接收邮件常用的协议有pop3,imap和exchange。exchange是微软的邮箱协议,Jakarta Mail暂不支持。

使用pop3协议

// pop3配置,可保存到properties文件,读取Properties props = new Properties();props.put("mail.pop3.host", "pop.qq.com");props.put("mail.pop3.port", 995);props.put("mail.pop3.ssl", true);// 需要认证props.put("mail.pop3.auth", true);props.put("mail.pop3.user", "post@engr-z.com");props.put("mail.pop3.pass", "******");// 使用sslprops.put("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");//props.put("mail.pop3.socketFactory.fallback", false);//props.put("mail.pop3.socketFactory.port", mailConfig.getPort());Session session = Session.getDefaultInstance(props);Store store = session.getStore(mailConfig.getProtocol().value);if (Boolean.valueOf(props.getProperty("mail.pop3.auth"))) {    // 需要认证    store.connect(mailConfig.getHost(), mailConfig.getPort(), props.getProperty("mail.pop3.user"), props.getProperty("mail.pop3.pass"));} else {    store.connect();}// 获取收件箱 store.getDefaultForlderFolder mbox = store.getFolder("INBOX");// INBOXmbox.open(Folder.READ_ONLY);System.out.println(mbox.getName());int msgCount = mbox.getMessageCount();System.out.println("邮件总数:" + msgCount);// 取最新的邮件Message msg = mbox.getMessage(msgCount);System.out.println("邮件主题:" + msg.getSubject());System.out.println("发件人:" + msg.getFrom());// 返回数组System.out.println("收件人:" + msg.getRecipients(Message.RecipientType.TO));// 没有为nullSystem.out.println("抄送人:" + msg.getRecipients(Message.RecipientType.CC));// 没有为nullSystem.out.println("密送人:" + msg.getRecipients(Message.RecipientType.BCC));// MimeMultipart 对像System.out.println("邮件内容:" + msg.getContent());

使用imap协议

只需把上面props配置key改为imap即可,QQ邮件imap端口是 993:

// imap配置,可保存到properties文件,读取Properties props = new Properties();props.put("mail.imap.host", "imap.qq.com");props.put("mail.imap.port", 993);props.put("mail.imap.ssl", true);// 需要认证props.put("mail.imap.auth", true);props.put("mail.imap.user", "post@engr-z.com");props.put("mail.imap.pass", "******");// 使用sslprops.put("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");//props.put("mail.imap.socketFactory.fallback", false);//props.put("mail.imap.socketFactory.port", mailConfig.getPort());Session session = Session.getDefaultInstance(props);Store store = session.getStore(mailConfig.getProtocol().value);if (Boolean.valueOf(props.getProperty("mail.imap.auth"))) {    // 需要认证    store.connect(mailConfig.getHost(), mailConfig.getPort(), props.getProperty("mail.imap.user"), props.getProperty("mail.imap.pass"));} else {    store.connect();}// 以下操作与pop3相同......

以上是“Java怎么基于Jakarta Mail实现收发邮件”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯