电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java 基于Jakarta Mail實現(xiàn)收發(fā)郵件

瀏覽:24日期:2022-08-13 17:31:18

Jakarta Mail API提供了一個獨立于平臺和協(xié)議的框架來構(gòu)建郵件,完成郵件接收與發(fā)送功能。它也包含在Java EE平臺中,也可以和Java SE平臺一起使用。

Jakarta Mail的前生是JavaMail。JavaMail最后一個版本是于2018年8月發(fā)布,已經(jīng)停止更新。新項目應(yīng)該使用Jakarta Mail。

現(xiàn)在很多郵箱默認關(guān)閉smtp,pop3,imap服務(wù),需要在設(shè)置中手動開啟。

Java 基于Jakarta Mail實現(xiàn)收發(fā)郵件

如果郵箱是使用授權(quán)碼,則需要生成授權(quán)碼(代替下文中密碼),這種方式更安全。

依賴

注意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實現(xiàn)收發(fā)郵件

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

發(fā)送郵件

使用smtp協(xié)議接收,本文以QQ郵箱為例。

發(fā)送普通文本郵件

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 收發(fā)郵件 (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());// 創(chuàng)建會話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(); }});// 構(gòu)建郵件消息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());// 發(fā)送郵件Transport.send(msg);

發(fā)送帶附件的郵件

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 收發(fā)郵件 (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());// 創(chuàng)建會話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(); }});// 構(gòu)建郵件消息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();// 郵件內(nèi)容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());// 發(fā)送郵件Transport.send(msg);

代碼中MailObj是我創(chuàng)建的MailObject對象,MailObject封裝了郵件相關(guān)的信息:

/** * @author Engr-Z * @since 2021/3/3 */@Datapublic class MailObject { enum EmailFormat {TEXT, HTML } /** * 發(fā)件人 */ private String from; /** * 收件人 */ private String[] to; /** * 抄送人 */ private String[] cc; /** * 密送人 */ private String[] bcc; /** * 郵件標題 */ private String subject; /** * 郵件內(nèi)容 */ private String body; /** * 郵件格式 */ private EmailFormat format; /** * 附件 */ private File[] files;}接收郵件

接收郵件常用的協(xié)議有pop3,imap和exchange。exchange是微軟的郵箱協(xié)議,Jakarta Mail暫不支持。

使用pop3協(xié)議

// 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('郵件總數(shù):' + msgCount);// 取最新的郵件Message msg = mbox.getMessage(msgCount);System.out.println('郵件主題:' + msg.getSubject());System.out.println('發(fā)件人:' + msg.getFrom());// 返回數(shù)組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('郵件內(nèi)容:' + msg.getContent());

使用imap協(xié)議

只需把上面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相同......完

開發(fā)中我們還可以使用Apache Commons Email收發(fā)郵件,它的API使用起來更簡單。Spring Boot也有郵件模塊。有興趣可以到官網(wǎng)了解。

Jakrata項目地址:eclipse-ee4j.github.io/mail/

以上就是Java 基于Jakarta Mail實現(xiàn)收發(fā)郵件的詳細內(nèi)容,更多關(guān)于Java 收發(fā)郵件的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 胀套-锁紧盘-风电锁紧盘-蛇形联轴器「厂家」-瑞安市宝德隆机械配件有限公司 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 杭州ROHS检测仪-XRF测试仪价格-百科 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | 代写标书-专业代做标书-商业计划书代写「深圳卓越创兴公司」 | SPC工作站-连杆综合检具-表盘气动量仪-内孔缺陷检测仪-杭州朗多检测仪器有限公司 | 铝合金重力铸造_铝合金翻砂铸造_铝铸件厂家-东莞市铝得旺五金制品有限公司 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 电镀电源整流器_高频电解电源_单脉双脉冲电源 - 东阳市旭东电子科技 | 国资灵活用工平台_全国灵活用工平台前十名-灵活用工结算小帮手 | 防爆电机_防爆电机型号_河南省南洋防爆电机有限公司 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 拖链电缆_柔性电缆_伺服电缆_坦克链电缆-深圳市顺电工业电缆有限公司 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 精益专家 - 设备管理软件|HSE管理系统|设备管理系统|EHS安全管理系统 | 四探针电阻率测试仪-振实密度仪-粉末流动性测定仪-宁波瑞柯微智能 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 视频直播 -摄影摄像-视频拍摄-直播分发 | 打造全球沸石生态圈 - 国投盛世 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 首页|光催化反应器_平行反应仪_光化学反应仪-北京普林塞斯科技有限公司 | 长沙广告公司_制作,长沙喷绘_发光字_招牌制作_长沙泓润广告官网 长城人品牌官网 | 广西正涛环保工程有限公司【官网】 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 宁夏活性炭_防护活性炭_催化剂载体炭-宁夏恒辉活性炭有限公司 | 北京西风东韵品牌与包装设计公司,创造视觉销售力! | 锂离子电池厂家-山东中信迪生电源 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 温室大棚建设|水肥一体化|物联网系统 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 纳米二氧化硅,白炭黑,阴离子乳化剂-臻丽拾科技 | 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 厂房出售_厂房仓库出租_写字楼招租_土地出售-中苣招商网-中苣招商网 |