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

更多QQ空间微信QQ好友腾讯朋友复制链接
您的位置:首頁/技術文章
文章詳情頁

Java 基于Jakarta Mail實現收發郵件

【字号: 作者:豬豬瀏覽:31日期:2022-08-13 17:31:18

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封裝了郵件相關的信息:

/** * @author Engr-Z * @since 2021/3/3 */@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相同......完

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

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

以上就是Java 基于Jakarta Mail實現收發郵件的詳細內容,更多關于Java 收發郵件的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 国产精品久久久久亚洲 | 中国一级毛片免费看视频 | 欧美毛片性视频区 | 色偷偷影院| 96精品专区国产在线观看高清 | 亚洲黄色免费 | 免费国产高清精品一区在线 | 欧美欲妇激情视频在线 | 九九九九精品视频在线播放 | 中文字幕日韩哦哦哦 | 国产情侣草莓视频在线 | 国产精品男人的天堂 | 特黄特色大片免费高清视频 | 亚洲第一大网站 | 日本黄色免费看 | 91高清视频在线观看 | 亚洲一区免费视频 | 亚洲激情成人网 | 爱爱网网站免费观看 | 国产成人一区二区 | 国产青草视频在线观看 | 看最刺激的欧美毛片 | 一本久道热中字伊人 | 香蕉视频在线免费 | 91久久久久久久 | 最新中文字幕电影在线观看 | 国产午夜免费一区二区三区 | 国产在线观看福利一区二区 | 亚洲欧美一区二区久久香蕉 | 亚洲黄色片免费看 | 亚洲精品黄色 | 国产日产精品_国产精品毛片 | 国产1区2区三区不卡 | 日本高清中文字幕视频在线 | 在线观看亚洲网站 | 国产精品久久久久9999高清 | 国产成人亚洲精品老王 | 欧美精品99毛片免费高清观看 | 在线观看黄色 | 国产精品一区91 | 欧美成人a大片 |