Java集成Outlook邮件操作

这篇具有很好参考价值的文章主要介绍了Java集成Outlook邮件操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 引入工具包
		<dependency>
            <groupId>com.microsoft.ews-java-api</groupId>
            <artifactId>ews-java-api</artifactId>
          	<version>2.0</version>
        </dependency>
  1. 工具类
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
import microsoft.exchange.webservices.data.core.enumeration.property.BodyType;
import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName;
import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
import microsoft.exchange.webservices.data.core.service.folder.Folder;
import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
import microsoft.exchange.webservices.data.core.service.item.Item;
import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
import microsoft.exchange.webservices.data.credential.WebCredentials;
import microsoft.exchange.webservices.data.property.complex.MessageBody;
import microsoft.exchange.webservices.data.search.FindFoldersResults;
import microsoft.exchange.webservices.data.search.FindItemsResults;
import microsoft.exchange.webservices.data.search.FolderView;
import microsoft.exchange.webservices.data.search.ItemView;
import org.apache.commons.lang3.StringUtils;

/**
 * @ClassName ExchangeMailUtil
 * @Description microsoft邮件工具类
 * @Author Miccke
 * @Date 2022/5/18 9:29
 * @Version V2.0
 */
@Slf4j
public class ExchangeMailUtil {

    //邮件服务器地址
    private String mailServer;
    //用户名
    private String user;
    //密码
    private String password;
    //使用的方式,默认可用不填
    private String domain;

    /**
     * 构造方法
     */
    public ExchangeMailUtil(String mailServer, String user, String password) {
        this.mailServer = mailServer;
        this.user = user;
        this.password = password;
    }

    /**
     * 构造方法
     */
    public ExchangeMailUtil(String mailServer, String user, String password, String domain) {
        this.mailServer = mailServer;
        this.user = user;
        this.password = password;
        this.domain = domain;
    }

    /**
     * 创建邮件服务
     *
     * @return 邮件服务
     */
    private ExchangeService getExchangeService() {
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
        //用户认证信息
        ExchangeCredentials credentials;
        if (domain == null) {
            credentials = new WebCredentials(user, password);
        } else {
            credentials = new WebCredentials(user, password, domain);
        }
        service.setCredentials(credentials);
        try {
            service.setUrl(new URI(mailServer));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        return service;
    }

    /**
     * 收取邮件
     *
     * @param receiveMailNum 最大收取邮件数
     * @throws Exception 全局异常捕获
     */
    public List<EmailMessage> scanMail(int receiveMailNum) throws Exception {
        if (receiveMailNum < -1) throw new Exception("请输入正确的查询数量");
        ExchangeService exchangeService = this.getExchangeService();
        //绑定收件箱,同样可以绑定发件箱
        Folder inbox = Folder.bind(exchangeService, WellKnownFolderName.Inbox);
        //获取邮件数量
        int receiveNum = receiveMailNum == -1 ? inbox.getTotalCount()
                : Math.min(inbox.getTotalCount(), receiveMailNum);
        FindItemsResults<Item> findResults = exchangeService.findItems(inbox.getId(), new ItemView(receiveNum));
        List<EmailMessage> result = new ArrayList<>();
        for (Item item : findResults.getItems()) {
            EmailMessage message = EmailMessage.bind(exchangeService, item.getId());
            if (message.getBody().getBodyType() != BodyType.Text) continue;
            result.add(message);
        }
        return result;
    }

    /**
     * 收取邮件
     *
     * @param receiveMailNum 最大收取邮件数
     * @throws Exception 全局异常捕获
     */
    public List<EmailMessage> scanMailByFolder(int receiveMailNum, String targetFolderName) throws Exception {
        ExchangeService exchangeService = this.getExchangeService();

        FindFoldersResults foldersResults = exchangeService.findFolders(
                WellKnownFolderName.Inbox, new FolderView(999999));
        System.out.println("文件夹总数量:" + foldersResults.getTotalCount());

        if (StringUtils.isEmpty(targetFolderName)) targetFolderName = WellKnownFolderName.Inbox.name();
        String finalTargetFolderName = targetFolderName;
        Folder targetFolder = foldersResults.getFolders().stream().filter(folder -> {
            try {
                return folder.getDisplayName().equals(finalTargetFolderName);
            } catch (ServiceLocalException e) {
                e.printStackTrace();
                return Boolean.FALSE;
            }
        }).collect(Collectors.toList()).stream().findFirst().get();

        List<EmailMessage> emailMessageList = new ArrayList<>();
        System.out.println("文件夹名称:" + targetFolder.getDisplayName());
        ArrayList<Item> findItemsResults = targetFolder.findItems(
                new ItemView(targetFolder.getTotalCount())).getItems();
        for (Item item : findItemsResults) {
            EmailMessage emailMessage = EmailMessage.bind(exchangeService, item.getId());
            // BodyType 分为两种 HTML、Text
            if (emailMessage.getBody().getBodyType() != BodyType.HTML) continue;
            System.out.println("**************************************************);
            System.out.println("【发送人】" + emailMessage.getSender());
            System.out.println("【接收人】" + emailMessage.getReceivedBy());
            System.out.println("【标题】" + emailMessage.getSubject());
            System.out.println("【邮件内容】" + emailMessage.getBody());
            emailMessageList.add(emailMessage);
        }
        return emailMessageList;
    }

    /**
     * 收取所有邮件
     *
     * @throws Exception
     */
    public List<EmailMessage> scanMail() throws Exception {
        return scanMail(-1);
    }

    /**
     * 发送带附件的mail
     *
     * @param subject         邮件标题
     * @param to              收件人列表
     * @param cc              抄送人列表
     * @param bodyText        邮件内容
     * @param attachmentPaths 附件地址列表
     * @throws Exception
     */
    public void sendMail(String subject, String[] to, String[] cc, String bodyText, String[] attachmentPaths) throws Exception {
        ExchangeService service = this.getExchangeService();
        EmailMessage msg = new EmailMessage(service);
        msg.setSubject(subject);
        MessageBody body = MessageBody.getMessageBodyFromText(bodyText);
        body.setBodyType(BodyType.HTML);
        msg.setBody(body);
        for (String toPerson : to) {
            msg.getToRecipients().add(toPerson);
        }
        if (cc != null) {
            for (String ccPerson : cc) {
                msg.getCcRecipients().add(ccPerson);
            }
        }
        if (attachmentPaths != null) {
            for (String attachmentPath : attachmentPaths) {
                msg.getAttachments().addFileAttachment(attachmentPath);
            }
        }
        msg.send();
    }

    /**
     * 发送不带抄送人的邮件
     *
     * @param subject  标题
     * @param to       收件人列表
     * @param bodyText 邮件内容
     * @throws Exception
     */
    public void sendMail(String subject, String[] to, String bodyText) throws Exception {
        sendMail(subject, to, null, bodyText);
    }

    /**
     * 发送不带附件的mail
     *
     * @param subject  邮件标题
     * @param to       收件人列表
     * @param cc       抄送人列表
     * @param bodyText 邮件内容
     * @throws Exception
     */
    public void sendMail(String subject, String[] to, String[] cc, String bodyText) throws Exception {
        sendMail(subject, to, cc, bodyText, null);
    }

    /**
     * 发送邮件主方法
     *
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        // Outlook Web Access路径通常为/EWS/exchange.asmx
        ExchangeMailUtil mailUtil = new ExchangeMailUtil(
                "https://mail.****.com/ews/exchange.asmx",
                "gulushuai1",
                "Miccke123456");
        mailUtil.scanMailByFolder(-1, "华星OA");
    }
}

文章来源地址https://www.toymoban.com/news/detail-527615.html

到了这里,关于Java集成Outlook邮件操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示

    GeoTools 是一个开源的 Java GIS 工具包,可利用它来开发符合标准的地理信息系统。 GeoTools 提供了 OGC (Open Geospatial Consortium) 规范的一个实现来作为他们的开发。 官网地址: GeoTools The Open Source Java GIS Toolkit — GeoTools 参考其quick start教程,实现集成到maven项目中并运行示例代码。

    2024年02月08日
    浏览(73)
  • Java智能合约工具包|Java调用智能合约|Java调用ERC20、ERC721、ERC1155合约

    Magician-ContractsTools是一个用于调用智能合约的工具包,你可以非常容易地在Java程序中调用智能合约进行查询和写入操作。 有三个内置的标准合约模板,分别是ERC20、ERC721和ERC1155,如果你需要调用这三个合约中的标准函数,可以帮助你非常快速地完成工作。除了内置的合同模板

    2024年02月11日
    浏览(55)
  • JAVA深化篇_26——Apache commons-io工具包的使用

    Apache基金会介绍 Apache软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非盈利性组织。在它所支持的Apache项目与子项目中,所发行的软件产品都遵循Apache许可证(Apache License)。 官方网址为:www.apache.org 。 很多著名的Java开源项目

    2024年02月06日
    浏览(62)
  • SpringBoot集成系统监控和告警工具包prometheus

    prometheus以开源软件的形式进行研发的系统监控和告警工具包 Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测工具,只需要提供需要监控的数据,它就可以帮助生成各种可视化仪表,同时它还有报警功能,可以在系统出现问题时发出通知。 环境搭建:

    2024年03月09日
    浏览(62)
  • 跨平台的开源Java生成PPT文件工具包,PPTShowV1.3更新啦

    项目官网:https://pptshow.cc/ 参考文档:https://pptshow.cc/book/(GitPage制作,打不开请科学冲浪) 开源地址:https://github.com/qrpcode/pptshow(有帮助记得点star呀~) 国内镜像:中文版本(Gitee)     Github镜像(Gitcode) PPTShow是一个开源的Java生成PPT文档工具包,支持2010版PPTX新特性。

    2024年02月09日
    浏览(48)
  • 【微信小程序】Java实现微信支付(小程序支付JSAPI-V3)java-sdk工具包

          对于一个没有写过支付的小白,打开微信支付官方文档时彻底懵逼 ,因为 微信支付文档太过详细, 导致我无从下手,所以写此文章,帮助第一次写支付的小伙伴梳理一下。 一、流程分为三个接口:(这是前言,先看一遍,保持印象,方便理解代码) 1、第一个接口:

    2024年02月03日
    浏览(58)
  • 软件的开发工具包(SDK)与集成开发环境(IDE)

    本文重点论述软件的开发工具包(SDK)与集成开发环境(IDE)的基本概念和作用。 通常情形下,无论是安装一个软件还是开发一个软件,实际上主要做两个事情:产生SDK(Software Development Kit,简称SDK,软件开发工具包)和IDE(Integrated Development Environment,简称IDE,集成开发环

    2024年02月16日
    浏览(58)
  • 【面试题】JDK(工具包)、JRE(运行环境和基础库)、JVM(java虚拟机)之间的关系?

    【面试题】JDK、JRE、JVM之间的关系? JDK (Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。 JRE (Java Runtime Environment):Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境

    2024年02月11日
    浏览(60)
  • Eclipse打不开?报错:要运行Eclipse,必须提供Java运行时环境(JRE)或Java开发工具包(JDK),搜索以下位置后未找到Java虚拟机。

    A Java Runtime Environment(JRE)or Java Development Kit(JDK)must be available in order to run Eclipse. No Java virtual machine was found after searching the following locations:C:UsersRouRoueclipsejee-2022-06eclipseeclipsejre binjavaw.exejavaw.exe in your current PATH 为了运行Eclipse,必须提供Java运行时环境(JRE)或Java开发工具包(

    2024年04月10日
    浏览(61)
  • 【微信小程序】Java实现微信支付(小程序支付JSAPI-V3)java-sdk工具包(包含支付出现的多次回调的问题解析,接口幂等性)

          对于一个没有写过支付的小白,打开微信支付官方文档时彻底懵逼 ,因为 微信支付文档太过详细, 导致我无从下手,所以写此文章,帮助第一次写支付的小伙伴梳理一下。 一、流程分为三个接口:(这是前言,先看一遍,保持印象,方便理解代码) 1、第一个接口:

    2024年01月16日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包