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",
                "****",
                "****");
        mailUtil.scanMailByFolder(-1, "TEST");
    }
}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java读取Outlook邮件的附件功能本身是不收费的。Java是一种通用的编程语言,它本身并不限制对Outlook邮件附件的读取操作。因此,可以使用Java的各种库和API来实现读取Outlook邮件附件的功能,而这些库和API大多都是免费提供的。 在Java中,常用的库和API包括JavaMail、Apache POI、Apache Commons IO等。通过这些库和API,可以连接到邮件服务器,获取邮件列表,并获取邮件的附件信息。这些库和API提供了丰富的功能和方法,可以灵活地操作Outlook邮件附件,如下载附件、保存附件到本地文件系统等。 需要注意的是,虽然Java本身是免费的,但如果要读取Outlook邮件附件,仍然需要在程序中提供连接到邮件服务器的相关信息,比如用户名、密码等。有些邮件服务器可能对API接入有一定的限制或收费要求,这可能需要与邮件服务器的提供商进行沟通。另外,若使用第三方库或API,可能会涉及到其自身的许可证或使用限制,需要遵守相关规定。 总的来说,Java本身不收费,可以使用免费的库和API来实现读取Outlook邮件附件的功能。但具体是否需要支付费用还需要根据实际情况来决定,包括邮件服务器的限制或要求、第三方库或API的许可证规定等。 ### 回答2: Java读取Outlook邮件的附件功能是免费的。在Java中,可以使用JavaMail API来读取和处理邮件附件,无需支付额外费用。JavaMail API是Java SE的一部分,可用于开发电子邮件应用程序,包括读取Outlook邮件的附件。 使用JavaMail API,可以连接到Outlook邮件服务器,通过IMAP或POP3协议收取邮件,并获取邮件附件。可以使用Java代码编写一个邮件客户端,通过API提供的方法来读取邮件的内容以及附件。具体步骤包括连接到邮件服务器、选择邮件夹、获取邮件列表、遍历邮件并判断是否有附件,如果有附件则可以保存到本地或进行其他处理。 虽然JavaMail API本身是免费的,但要使用该功能,需要确保计算机上已安装Java运行环境(JRE)或开发环境(JDK)。Java开发工具、IDE(如Eclipse、IntelliJ IDEA)等可能需要付费,但可以使用免费的开源工具进行开发,如Apache NetBeans等。 需要注意的是,读取Outlook邮件的附件需要具备正确的邮件服务器连接配置以及邮件帐户的凭据。另外,要读取Outlook邮件,还需要具备合法的授权权限,通常需要与Outlook邮件服务器管理员联系。 总之,Java读取Outlook邮件的附件功能本身是免费的,但可能需要确保相关的开发工具、环境的合法性以及所需的授权权限。 ### 回答3: Java读取Outlook邮件的附件功能在大多数情况下是免费的。Java提供了JavaMail API,可以用于读取和处理电子邮件。使用JavaMail API,我们可以通过IMAP或POP3协议连接到邮箱服务器,并读取邮件的内容和附件。 不过,需要注意的是,有些Outlook服务器可能需要进行身份验证,而身份验证可能需要使用收费的许可证或证书。具体是否需要付费取决于访问的邮件服务器和其设置。 此外,如果我们希望使用更高级的功能,如自动下载附件或处理复杂的附件类型(如嵌入式图像或媒体文件),可能需要使用其他第三方库或服务,这些库或服务可能会有一定的费用。 总结来说,Java读取Outlook邮件的附件功能本身是免费的,但具体是否收费取决于服务器设置和我们所需的功能。如果功能需求较简单,那么使用JavaMail API即可满足需求,而不需要额外费用。但如果我们需要更高级的功能,则可能需要考虑使用其他费用相关的第三方库或服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值