午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術文章
文章詳情頁

Java 基于Jakarta Mail實現收發郵件

瀏覽:85日期: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
相關文章:
主站蜘蛛池模板: 一级的大片 | 全部免费毛片在线播放一个 | 青青操视频在线 | 中文字幕一区二区不卡 | 日韩中文字幕在线看 | 国产成人亚洲欧洲在线 | 伊人精品一区二区三区 | 噼里啪啦国语版在线观看 | av在线天堂网 | 久久久天堂 | 五月婷婷导航 | 日韩精品极品视频在线观看免费 | 欧美成人免费观看 | 久久久久中文 | 亚色综合| 黄色免费大片 | 日本中文字幕有码 | 制服丝袜亚洲色图 | 91夫妻视频 | 天天摸天天 | 69超碰| 欧美福利一区 | 精品成人在线观看 | 国产免费一区二区三区免费视频 | 最新黄色av网站 | 五月婷婷伊人网 | 欧美视频一区在线 | 一级片在线免费观看 | 男人天堂最新网址 | 午夜影视福利 | 午夜视频| 一级黄色大片免费观看 | 婷婷丁香色 | 天堂网亚洲| 亚洲人做受高潮 | 开心春色激情网 | 国产亚洲不卡 | 欧美日韩在线视频播放 | 天堂а√在线中文在线鲁大师 | 国产做受网站 | 在线中文字幕视频 |