亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

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

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

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

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

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

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

依賴(lài)

注意Jakarta Mail引用的包名與JavaMail不同,我寫(xiě)demo時(shí)用的是2.0.0版。

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

所有jar清單:

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

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

發(fā)送郵件

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

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

MailObject mailObj = new MailObject();mailObj.setFrom('[email protected]');mailObj.setTo(new String[]{'[email protected]'});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);// 需要認(rèn)證props.put('mail.smtp.auth', true);props.put('mail.smtp.user', '[email protected]');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)建會(huì)話Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() {if (Boolean.valueOf(props.getProperty('mail.smtp.auth'))) { // 需要認(rèn)證 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方法增加多個(gè)接收人,指定接收人類(lèi)型// 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('[email protected]');mailObj.setTo(new String[]{'[email protected]'});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);// 需要認(rèn)證props.put('mail.smtp.auth', true);props.put('mail.smtp.user', '[email protected]');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)建會(huì)話Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() {if (Boolean.valueOf(props.getProperty('mail.smtp.auth'))) { // 需要認(rèn)證 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方法增加多個(gè)接收人,指定接收人類(lèi)型// 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對(duì)象,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; /** * 郵件標(biāo)題 */ 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);// 需要認(rèn)證props.put('mail.pop3.auth', true);props.put('mail.pop3.user', '[email protected]');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'))) { // 需要認(rèn)證 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());// 返回?cái)?shù)組System.out.println('收件人:' + msg.getRecipients(Message.RecipientType.TO));// 沒(méi)有為nullSystem.out.println('抄送人:' + msg.getRecipients(Message.RecipientType.CC));// 沒(méi)有為nullSystem.out.println('密送人:' + msg.getRecipients(Message.RecipientType.BCC));// MimeMultipart 對(duì)像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);// 需要認(rèn)證props.put('mail.imap.auth', true);props.put('mail.imap.user', '[email protected]');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'))) { // 需要認(rèn)證 store.connect(mailConfig.getHost(), mailConfig.getPort(), props.getProperty('mail.imap.user'), props.getProperty('mail.imap.pass'));} else { store.connect();}// 以下操作與pop3相同......完

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

Jakrata項(xiàng)目地址:eclipse-ee4j.github.io/mail/

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产一区二区三区免费在线视频 | 八十老妇xxxxx性开放 | xxxxxxx免费| 欧美一级永久免费毛片在线 | 日韩黄色一级视频 | 久综合色 | 久久影院中文字幕 | 女人被狂躁的免费视频网站软件 | 欧美一级片在线免费观看 | 亚洲精品视频网 | 亚洲欧美在线制服丝袜国产 | 色天天综合网 | 国产三级日本三级在线播放 | 免费黄色看片网站 | 久热99这里只有精品视频6 | 国产精品视频免费播放 | 国产vr一区二区在线观看 | 爽妇综合网 | 高清在线精品一区二区 | 国产成人综合网 | 国产初高中生厕所小便 | 午夜国产大片免费观看 | 亚洲欧美综合色区小说 | 永久免费视频网站在线观看 | 午夜激情免费视频 | 国内免费一区二区三区视频 | 久久免费观看国产精品88av | 国产福利在线观看第二区 | 香蕉视频性 | 伊人狠狠色j香婷婷综合 | 亚洲国产成人精品不卡青青草原 | 国产精品伦子一区二区三区 | 国产免费福利网站 | 久久99精品国产99久久6男男 | 国产igao激情在线观看 | 手机视频在线观看 | 国产不卡精品一区二区三区 | 国产一级二级三级在线观看 | 在线观看视频一区二区三区 | 青青热久麻豆精品视频在线观看 | 亚洲免费网站 |