ews java + Oauth2实现office 365发送邮件

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

引入maven包:

com.microsoft.ews-java-api
ews-java-api
2.0

使用office 365邮箱服务收发邮件有两种校验方式,一种是老的basic authentication, 这种方式目前已不建议使用,如下使用的是userName, password进行验证的方式。

public static boolean sendExchange(MailConfig mailInfo) {
// The Exchange Server Version.

    try (ExchangeService exchangeService = new ExchangeService(exchangeVersion)) {
        
    	// Credentials to sign in the MS Exchange Server.
        ExchangeCredentials exchangeCredentials = new WebCredentials(ExchangeMailUtil.getUsername(), ExchangeMailUtil.getPassword());
        exchangeService.setCredentials(exchangeCredentials);
        
        // URL of exchange web service for the mailbox.
        exchangeService.setUrl(new URI("https://outlook.office365.com/ews/exchange.asmx"));
        // The email.
        EmailMessage emailMessage;
        emailMessage = new EmailMessage(exchangeService);
        emailMessage.setSubject(mailInfo.getSubject());
        MessageBody body = MessageBody.getMessageBodyFromText(mailInfo.getContent());
        body.setBodyType(BodyType.HTML);
        emailMessage.setBody(body);

        // TO recipient.
        String[] recipients = mailInfo.getToAddresses().split(",");
        for (String recipient : recipients) {
            emailMessage.getToRecipients().add(recipient);
        }

        // CC recipient.
        if (StringUtils.isNotBlank(mailInfo.getCcAddresses())) {
            for (String recipient : mailInfo.getCcAddresses().split(",")) {
                emailMessage.getCcRecipients().add(recipient);
            }
        }

        // Attachements.
        if (mailInfo.getAttachFileNames() != null && mailInfo.getAttachFileNames().length > 0) {
            for (String attachmentPath : mailInfo.getAttachFileNames()) {
                getLocalFile(attachmentPath);
                emailMessage.getAttachments().addFileAttachment(attachmentPath);
            }
        }

        emailMessage.send();
    } catch (Exception ex) {
        log.info("An exception occured while sending an email.", ex);
        ex.printStackTrace();
        return false;
    }
    return true;
}

最新推荐是使用Oauth令牌验证access,进行邮箱服务,可参考官网https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an-ews-application-by-using-oauth
分三步走,
第一步注册应用,获得client_id, tenant_id 和client_secret.
第二步,获取token.
private static String getOauthTokenBase64() {
String tenant_id = “your tenant ID”;
String client_id = “your client ID”;
String client_secret = “your client secret”;
String scope = “https://outlook.office365.com/.default”;文章来源地址https://www.toymoban.com/news/detail-484124.html

	  String url = "https://login.microsoftonline.com/" + tenant_id + "/oauth2/v2.0/token";
	  HttpClient httpClient = new HttpClient();
	  PostMethod postMethod = new PostMethod(url);
	  postMethod.addRequestHeader("accept", "*/*");
	  postMethod.addRequestHeader("connection", "Keep-Alive");
	  postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=GBK");
	  //必须设置下面这个Header
	  postMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");
	  //添加请求参数
	  postMethod.addParameter("grant_type", "client_credentials");
	  postMethod.addParameter("client_id", client_id);
	  postMethod.addParameter("client_secret", client_secret);
	  postMethod.addParameter("scope", scope);
	  String tooooken = "";
	  try {
	    int code = httpClient.executeMethod(postMethod);
	    String resBody = postMethod.getResponseBodyAsString();
	    if (code == 200) {
	      Map<String, String> map = JSON.parseObject(resBody, Map.class);
	      tooooken = map.get("access_token");
	    } else {
	      log.error("get token from office 365 faile, response {}",resBody);
	    }
	  } catch (IOException e) {
	    log.error(e.getMessage());
	    e.printStackTrace();
	  } catch (HttpException e) {
		e.printStackTrace();
	} catch (java.io.IOException e) {
		e.printStackTrace();
	} finally {
	    postMethod.releaseConnection();
	  }
	  return tooooken;
}
第三部,将token带入ews请求头
 // Credentials to sign in the MS Exchange Server.
        exchangeService.setImpersonatedUserId(new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "test@163.com"));
        exchangeService.getHttpHeaders().put("Authorization", "Bearer " + access_token);

到了这里,关于ews java + Oauth2实现office 365发送邮件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Python oauth2登录Outlook读取邮件

    Python oauth2登录Outlook读取邮件

    微软登录方式发生了改变,需要用 oauth2 ,以前的写的脚本都登录不上了,本文记录下更新后的登录方式。 报错如下: imaplib.IMAP4.error: b’LOGIN failed.’ 1.在Azure 门户注册应用程序 这里可以跟着官方教程走 传送门:https://learn.microsoft.com/zh-cn/azure/active-directory/develop/web-app-quicks

    2024年02月04日
    浏览(13)
  • Java开发 微软OAuth身份验证在EWS中的应用

    一、使用说明 看到有朋友在评论区咨询Java通过Oauth2.0调用EWS的实现。所以有了这篇文章,大概思路是使用Azure的客户端账号和密码通过http方式获取到Token信息,再通过Token去初始化ExchangeService实例,再通过各项API完成各种功能的调用。 二、HTTP方式获取Ews的Token信息 配置文件

    2024年02月16日
    浏览(12)
  • Spring Authorization Server入门 (八) Spring Boot引入Security OAuth2 Client对接认证服务

    Spring Authorization Server入门 (八) Spring Boot引入Security OAuth2 Client对接认证服务

    在之前的文章中实现了一个认证服务,并且添加了一些自定义的内容,现在暂时没想到认证服务的新内容,本篇文章就先写一下客户端对接的吧,水一篇。 当用户通过客户端去访问一个受限的资源时,客户端会检测是否有登录信息,没有登录信息会重定向至认证服务器去请求

    2024年02月21日
    浏览(14)
  • java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统

    java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统

     鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高

    2024年02月07日
    浏览(15)
  • Microsoft.Graph 使用(Oauth 2.0)客户端凭据流发送邮件

    先上代码 graphClient,有两种发送方式me 和Users ,无用户交互的需要用USers方式 users_Email 应该是应用程序所在的组织的账号,因为要通过组织的账号发邮件,因为这个users_Email卡了很久,拿过APPID和租户ID还有其他能试的都试过,都发不出去,然后根据客户发来的邮箱试了一下

    2024年02月16日
    浏览(10)
  • java实现发送邮件

    java实现发送邮件

    本文介绍下java实现邮件的发送,意在网站用户评论时能够及时通知站长和用户评论被回复后能够及时通知用户。 下文介绍下具体实现。 java实现 首先引入springboot的邮箱依赖 配置邮箱参数,这里以 qq邮箱 作为示例 此时就差不多了,接下来实现邮箱工具类 此时调用 MailUtil 里

    2024年02月16日
    浏览(7)
  • Java Email 实现邮件发送

    Java Email 实现邮件发送

    Email:电子邮件。 在当今社会有着重要的应用,传统的邮件是通过邮局投递,然后从一个邮局到另一个邮局,最终到达用户的邮箱。 在电子邮件中也有着相似的发送过程:电子邮件是从用户电脑的邮件软件发送到邮件服务器上,经过若干个邮件服务器的中转,最终到达对方邮

    2024年02月03日
    浏览(8)
  • 用Java实现发送邮件——Java Email

    用Java实现发送邮件——Java Email

            众所周知,Email就是邮件,在科技高速发展的今天我们也使用了非常之久的电子邮件,我们熟知的邮件有自己的QQ邮箱、网易邮箱大师还有Outlook等都是用来发送邮件的,而用Java程序也是可以用来发送邮件的。 首先我们先对比一下传统的邮件信息是如何发送的:传

    2024年02月05日
    浏览(9)
  • Spring Security实现OAuth2协议及实战

    Spring Security实现OAuth2协议及实战

    文章篇幅较长,愿读者耐心看完。如有不足之处,请指正。 一.OAuth2介绍 1.1 OAuth2是什么 怎么用 OAuth2是目前最流行的授权协议,用来授权第三方应用,获取用户数据。 举个例子:快递员想要进入小区,有3种方式。1是业主远程开门,2是业主告诉门禁密码,3是使用令牌(Oaut

    2024年02月08日
    浏览(11)
  • springboot(java)使用javamail实现邮件的接收、转发、发送、清除

    最近在弄邮件相关的功能,被搞的头大,很多找的方法根本不知道该怎么往下走,就目前为止, 经过各种的碰壁和失败,就整理出来如何使用javamail实现邮件的接收、转发、发送、清除 不单单是分享,也为我后续查找更方便做一个记录 在正式发送邮件之前,我们应该对邮件

    2024年02月04日
    浏览(9)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包