最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年04月23日 10:22:08   作者:攻城獅·正  
這篇文章主要介紹了Java 基于Jakarta Mail實現(xiàn)收發(fā)郵件的功能,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下

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

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

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

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

依賴

注意Jakarta Mail引用的包名與JavaMail不同,我寫demo時用的是2.0.0版。

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

所有jar清單:

最新版本包含了對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", "******");
// 使用ssl
props.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();
    }
});

// 構建郵件消息
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", "******");
// 使用ssl
props.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();
    }
});

// 構建郵件消息
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());

// 發(fā)送郵件
Transport.send(msg);

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

/**
 * @author Engr-Z
 * @since 2021/3/3
 */
@Data
public class MailObject {

    enum EmailFormat {
        TEXT, HTML
    }

    /**
     * 發(fā)件人
     */
    private String from;

    /**
     * 收件人
     */
    private String[] to;

    /**
     * 抄送人
     */
    private String[] cc;

    /**
     * 密送人
     */
    private String[] bcc;

    /**
     * 郵件標題
     */
    private String subject;

    /**
     * 郵件內容
     */
    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", "******");
// 使用ssl
props.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.getDefaultForlder
Folder mbox = store.getFolder("INBOX");
// INBOX
mbox.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));
// 沒有為null
System.out.println("抄送人:" + msg.getRecipients(Message.RecipientType.CC));
// 沒有為null
System.out.println("密送人:" + msg.getRecipients(Message.RecipientType.BCC));
// MimeMultipart 對像
System.out.println("郵件內容:" + 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", "******");
// 使用ssl
props.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ā)郵件的詳細內容,更多關于Java 收發(fā)郵件的資料請關注腳本之家其它相關文章!

相關文章

  • SpringBoot跨域Access-Control-Allow-Origin實現(xiàn)解析

    SpringBoot跨域Access-Control-Allow-Origin實現(xiàn)解析

    這篇文章主要介紹了SpringBoot跨域Access-Control-Allow-Origin實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • JavaWeb開發(fā)中alias攔截器的使用方法

    JavaWeb開發(fā)中alias攔截器的使用方法

    本文給大家介紹在JavaWeb開發(fā)中alias攔截器的使用方法相關知識,本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起看下吧
    2016-08-08
  • Spring Security常用過濾器實例解析

    Spring Security常用過濾器實例解析

    這篇文章主要介紹了Spring Security常用過濾器實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java中的類加載與類卸載方式

    Java中的類加載與類卸載方式

    這篇文章主要介紹了Java中的類加載與類卸載方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 淺談Java幾種文件讀取方式耗時

    淺談Java幾種文件讀取方式耗時

    本文主要介紹了淺談Java幾種文件讀取方式耗時,主要介紹了4種,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 詳解Java的Struts框架中注釋的用法

    詳解Java的Struts框架中注釋的用法

    這篇文章主要介紹了詳解Java的Struts框架中注釋的用法,Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • Java多線程volatile原理及用法解析

    Java多線程volatile原理及用法解析

    這篇文章主要介紹了Java多線程volatile原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 教你用java完美封裝微信模板消息的發(fā)送動態(tài)

    教你用java完美封裝微信模板消息的發(fā)送動態(tài)

    這篇文章主要介紹了教你用java完美封裝微信模板消息的發(fā)送動態(tài),文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • 新手必備的IDEA常用設置總結

    新手必備的IDEA常用設置總結

    今天給大家總結了一些IDEA的常用設置,文中有非常詳細的圖文介紹,對正在學習使用IDEA的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java位運算知識點詳解

    Java位運算知識點詳解

    這篇文章給大家分享了關于Java位運算的相關知識點內容,有興趣的朋友們可以學習參考下。
    2018-09-09

最新評論

宜昌市| 烟台市| 长子县| 成都市| 平定县| 如皋市| 无棣县| 南溪县| 通海县| 邻水| 玉溪市| 元朗区| 藁城市| 尚志市| 秦皇岛市| 古田县| 桐城市| 汪清县| 无极县| 绥芬河市| 建昌县| 怀柔区| 赤城县| 伊吾县| 丰宁| 九龙坡区| 治县。| 淮安市| 温泉县| 兴安县| 鄂伦春自治旗| 丰原市| 邵东县| 科技| 榕江县| 涡阳县| 贵州省| 绥化市| 油尖旺区| 永兴县| 鲜城|