依懒:
<dependency><groupId>com.microsoft.ews-java-api</groupId><artifactId>ews-java-api</artifactId><version>2.0</version>
</dependency>

MailConfig加载邮件配置信息

public class MailConfig {private static final String PROPERTIES_DEFAULT = "/conf.properties";//配置文件地址public static String host;public static Integer port;public static String userName;public static String passWord;public static String emailForm;public static String timeout;public static String personal;public static Properties properties;public static String mailServer;public static String domain;static{init();}/*** 初始化*/private static void init() {properties = new Properties();PropertiesLoader prot = new PropertiesLoader(PROPERTIES_DEFAULT);try{host =prot.getProperty("mail.smtp.host");port = Integer.parseInt(prot.getProperty("mail.smtp.port"));userName = prot.getProperty("mail.username");passWord = prot.getProperty("mail.password");emailForm = prot.getProperty("mail.username");timeout = prot.getProperty("mail.smtp.timeout");mailServer = prot.getProperty("mail.exchange.server");domain = prot.getProperty("mail.domain");} catch(Exception e){e.printStackTrace();}}
}

邮件发送工具类

public class ExchangeMailUtil {private static String mailServer;private static String user;private static String password;private static String domain;static{mailServer = MailConfig.mailServer;user = MailConfig.userName;password = MailConfig.passWord;domain = MailConfig.domain;}/*** 创建邮件服务** @return 邮件服务*/private static ExchangeService getExchangeService() {ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);//用户认证信息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));
//            service.autodiscoverUrl(user);//自动获取邮箱服务器地址
//            URI url = service.getUrl();
//            System.out.println(url.toString());} catch (Exception e) {e.printStackTrace();}return service;}/*** 收取邮件** @param max          最大收取邮件数* @param searchFilter 收取邮件过滤规则s* @return* @throws Exception*/public static ArrayList<EmailMessage> receive(int max, SearchFilter searchFilter) throws Exception {ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);ExchangeCredentials credentials = new WebCredentials(user, password);service.setCredentials(credentials);service.setUrl(new URI(mailServer));//绑定收件箱,同样可以绑定发件箱Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);//获取文件总数量int count = inbox.getTotalCount();if (max > 0) {count = count > max ? max : count;}//循环获取邮箱邮件ItemView view = new ItemView(count);//按照时间顺序收取view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Descending);FindItemsResults<Item> findResults;if (searchFilter == null) {findResults = service.findItems(inbox.getId(), view);} else {findResults = service.findItems(inbox.getId(), searchFilter, view);}service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties);ArrayList<EmailMessage> result = new ArrayList<>();for (Item item : findResults.getItems()) {EmailMessage message = (EmailMessage) item;result.add(message);}return result;}/*** 收取所有邮件** @throws Exception*/public static ArrayList<EmailMessage> receive(int max) throws Exception {return receive(max, null);}/*** 收取邮件** @throws Exception*/public static ArrayList<EmailMessage> receive() throws Exception {return receive(0, null);}/*** 发送带附件的mail** @param subject         邮件标题* @param to              收件人列表* @param cc              抄送人列表* @param bodyText        邮件内容* @param attachmentPaths 附件地址列表* @throws Exception*/public static boolean send(String subject, String[] to, String[] cc, String bodyText, String[] attachmentPaths) {boolean f = false;try {ExchangeService service = 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();f = true;} catch (Exception e) {e.printStackTrace();return f;}return f;}/*** 发送不带附件的mail** @param subject  邮件标题* @param to       收件人列表* @param cc       抄送人列表* @param bodyText 邮件内容* @throws Exception*/public static boolean send(String subject, String[] to, String[] cc, String bodyText) throws Exception {return send(subject, to, cc, bodyText, null);}

注意:

一、客户用的是微软exchange企业邮箱,以前在配置邮箱服务器的时候一般为邮箱后缀,结果这次完成不一样,后以自动获取邮箱服务器然后打印出来才知道。

二、安装证书

javac InstallCert.java

java InstallCert 要访问的网址

会在相应的目录下产生一个名为‘jssecacerts’的证书。将证书copy到$JAVA_HOME/jre/lib/security目录下

下面附上InstallCert.java


/** Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:**   - Redistributions of source code must retain the above copyright*     notice, this list of conditions and the following disclaimer.**   - Redistributions in binary form must reproduce the above copyright*     notice, this list of conditions and the following disclaimer in the*     documentation and/or other materials provided with the distribution.**   - Neither the name of Sun Microsystems nor the names of its*     contributors may be used to endorse or promote products derived*     from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;public class InstallCert {public static void main(String[] args) throws Exception {String host;int port;char[] passphrase;if ((args.length == 1) || (args.length == 2)) {String[] c = args[0].split(":");host = c[0];port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);String p = (args.length == 1) ? "changeit" : args[1];passphrase = p.toCharArray();} else {System.out.println("Usage: java InstallCert <host>[:port] [passphrase]");return;}File file = new File("jssecacerts");if (file.isFile() == false) {char SEP = File.separatorChar;File dir = new File(System.getProperty("java.home") + SEP + "lib"+ SEP + "security");file = new File(dir, "jssecacerts");if (file.isFile() == false) {file = new File(dir, "cacerts");}}System.out.println("Loading KeyStore " + file + "...");InputStream in = new FileInputStream(file);KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());ks.load(in, passphrase);in.close();SSLContext context = SSLContext.getInstance("TLS");TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());tmf.init(ks);X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);context.init(null, new TrustManager[] { tm }, null);SSLSocketFactory factory = context.getSocketFactory();System.out.println("Opening connection to " + host + ":" + port + "...");SSLSocket socket = (SSLSocket) factory.createSocket(host, port);socket.setSoTimeout(10000);try {System.out.println("Starting SSL handshake...");socket.startHandshake();socket.close();System.out.println();System.out.println("No errors, certificate is already trusted");} catch (SSLException e) {System.out.println();e.printStackTrace(System.out);}X509Certificate[] chain = tm.chain;if (chain == null) {System.out.println("Could not obtain server certificate chain");return;}BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));System.out.println();System.out.println("Server sent " + chain.length + " certificate(s):");System.out.println();MessageDigest sha1 = MessageDigest.getInstance("SHA1");MessageDigest md5 = MessageDigest.getInstance("MD5");for (int i = 0; i < chain.length; i++) {X509Certificate cert = chain[i];System.out.println(" " + (i + 1) + " Subject "+ cert.getSubjectDN());System.out.println("   Issuer  " + cert.getIssuerDN());sha1.update(cert.getEncoded());System.out.println("   sha1    " + toHexString(sha1.digest()));md5.update(cert.getEncoded());System.out.println("   md5     " + toHexString(md5.digest()));System.out.println();}System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");String line = reader.readLine().trim();int k;try {k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;} catch (NumberFormatException e) {System.out.println("KeyStore not changed");return;}X509Certificate cert = chain[k];String alias = host + "-" + (k + 1);ks.setCertificateEntry(alias, cert);OutputStream out = new FileOutputStream("jssecacerts");ks.store(out, passphrase);out.close();System.out.println();System.out.println(cert);System.out.println();System.out.println("Added certificate to keystore 'jssecacerts' using alias '"+ alias + "'");}private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();private static String toHexString(byte[] bytes) {StringBuilder sb = new StringBuilder(bytes.length * 3);for (int b : bytes) {b &= 0xff;sb.append(HEXDIGITS[b >> 4]);sb.append(HEXDIGITS[b & 15]);sb.append(' ');}return sb.toString();}private static class SavingTrustManager implements X509TrustManager {private final X509TrustManager tm;private X509Certificate[] chain;SavingTrustManager(X509TrustManager tm) {this.tm = tm;}public X509Certificate[] getAcceptedIssuers() {throw new UnsupportedOperationException();}public void checkClientTrusted(X509Certificate[] chain, String authType)throws CertificateException {throw new UnsupportedOperationException();}public void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException {this.chain = chain;tm.checkServerTrusted(chain, authType);}}}

Java使用微软Exchange邮箱发送与接收邮件相关推荐

  1. Android Java使用JavaMail API发送和接收邮件的代码示例

    JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...

  2. python接收邮件内容启动程序_Python实现发送与接收邮件的方法详解

    本文实例讲述了Python实现发送与接收邮件的方法.分享给大家供大家参考,具体如下: 一.发送邮件 这里实现给网易邮箱发送邮件功能: import smtplib import tkinter cla ...

  3. 【Java mail 入门教程】第三讲 接收邮件

    ====================================================== 注:本文源代码点此下载 ================================= ...

  4. 使用阿里邮箱发送带Excel邮件

    使用阿里邮箱发送带Excel邮件 需要的maven依赖 <!--导出Excel--><dependency><groupId>org.apache.poi</ ...

  5. 手机发电脑邮箱未开启服务器,手机邮箱无法发送和接收邮件时发生了什么

    你好! 您是2113,是通过手机自己的电子邮件添加5261邮箱4102吗?我介绍了QQ邮箱的添加,您必须打开接收1653并发送服务. 您可以在设置---添加帐户中找到邮件 首先,您需要登录到邮箱的We ...

  6. java实现通过QQ邮箱发送激活邮件 springBoot

    用户邮件激活 通过QQ邮箱发送激活邮件 soringBoot 本文主要介绍了使用java 调用邮箱发送邮件的功能 首先新建一个springboot项目 pom依赖如下 <parent>&l ...

  7. Java注册登录及邮箱发送账号激活(主要技术栈SpringBoot,MyBatis)

    文章目录 前言 学习之前需要掌握的知识 项目环境搭建 数据库的搭建 前端页面的搭建 后端代码 格式 pojo mapper Controller service 最后 前言 项目流程图如下: 这里我们 ...

  8. outlook邮箱邮件大小限制_设置Office 365邮箱默认发送和接收邮件大小限制

    Office 365默认的 35MB 的邮件大小限制.Office 365 最大是支持 150MB 的邮件体积的. 我们只需用 Windows Powershell 连接 Office 365 ,然后 ...

  9. C#实现发送和接收邮件的winform邮箱(保存至MySQL本地数据库)Mail Client

    C#实现发送和接受邮件的winform邮箱 一.C#邮箱总体介绍 二.C#本地邮箱如何实现 1. 登入界面 2. 发送邮件 3. 接收邮件 Imap接收邮件 接收邮件并保存到MySQL数据库之中 与前 ...

  10. JavaMail发送和接收邮件

    一.JavaMail概述:        JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分. 厂商所提供 ...

最新文章

  1. RMB符号的几种显示方式。
  2. 去除表单元素的默认样式
  3. 使用优化的基于模糊规则的特征选择技术和基于树的集成方法进行山洪敏感性建模--文献阅读
  4. 阿里宣布取消的周报又死灰复燃?3分钟的高效报表才是最后出路
  5. 2018年公有云iaas_2018年如何学会正确做云
  6. 5010.有限状态机-电梯事件
  7. 008.一个简单的网络服务器开发----回声服务器
  8. HDU 5937 2016CCPC杭州 E: Equation(DFS)
  9. 工信部召开地方信息安全工作会议
  10. java生成16位唯一性的订单号
  11. python翻译-50 行代码,实现中英文翻译
  12. 如何打开mo文件并修改 PoEdit
  13. mysql proxy maxscale_maxscale参数配置
  14. 前端解决手机拍照旋转问题及图片压缩上传
  15. ZOJ - 4049 Halting Problem 题解【c++】
  16. [Kafka] Kafka基本架构
  17. pyqt5+pygame实现音乐播放器,可以自动提取文件图片,最终版本
  18. C# MessageBox.Show 用法
  19. lc用U盘更新固件_普通U盘和固态U盘相差多少?用下aigo固态U盘就知道了
  20. ENVI-landsat7/8全色与多光谱波段图像融合前,全色波段辐射定标报错指南

热门文章

  1. 你不得不知的网络编程三剑客
  2. 【退役文】人退心不退,博客有空继续更
  3. 删除win10 qaa输入法
  4. API的理解和使用——全局命令
  5. 百度开放大数据平台接口,传统企业看到了新曙光。
  6. kali工具之Beef
  7. 一个手握安兔兔,一个执掌鲁大师,周鸿祎雷军这场仗谁能赢?
  8. 大数据技术原理与应用之可视化实训
  9. Java: Unresolved compilation problem的解决方法
  10. JBE与JLE的区别