设为首页 收藏本站
查看: 869|回复: 0

[经验分享] 使用Exchange读取邮件、发送邮件

[复制链接]

尚未签到

发表于 2017-7-1 20:53:21 | 显示全部楼层 |阅读模式
问题
  由于公司邮箱并未开放POP3收信端口,但配置exchange后,手机邮件客户端可以收发邮件,因此决定使用exchange协议收发邮件。但测试过程中发现登录时反复提示“440 Login Timeout ”错误,用户名密码并没有出错。
解决方案
  OWA(Outlook Web Access)提供的EWS(Exchange Web Service)的协议地址原来是https://Exchange邮件服务器名/EWS/Exchange.asmx,修改后即可登录了。
代码
  官方文档地址

项目中添加ews-java-api.jar后即可,maven项目中添加


<dependency>
<groupId>com.microsoft.ews-java-api</groupId>
<artifactId>ews-java-api</artifactId>
<version>2.0</version>
</dependency>
  工具类代码如下:



import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.PropertySet;
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.enumeration.search.SortDirection;
import microsoft.exchange.webservices.data.core.enumeration.service.ConflictResolutionMode;
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.core.service.schema.ItemSchema;
import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
import microsoft.exchange.webservices.data.credential.WebCredentials;
import microsoft.exchange.webservices.data.property.complex.Attachment;
import microsoft.exchange.webservices.data.property.complex.FileAttachment;
import microsoft.exchange.webservices.data.property.complex.MessageBody;
import microsoft.exchange.webservices.data.search.FindItemsResults;
import microsoft.exchange.webservices.data.search.ItemView;
import microsoft.exchange.webservices.data.search.filter.SearchFilter;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
/**
* Exchange邮件服务工具类
*
* @author Yang Cheng
* @date 2017-02-13
*/
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;
}
public static void main(String[] args) throws Exception {
// Outlook Web Access路径通常为/EWS/exchange.asmx
ExchangeMailUtil mailUtil = new ExchangeMailUtil("https://mail.domain.com/EWS/exchange.asmx",
"xx@domain.com", "xx");
// 接收邮件
ArrayList<EmailMessage> mails = mailUtil.receive(10);
for (EmailMessage mail : mails) {
System.out.println("邮件标题: " + mail.getSubject());
System.out.println("接收时间: " + mail.getDateTimeReceived());
System.out.println("发送人: " + mail.getFrom().getName() + ", 地址: " + mail.getFrom().getAddress());
System.out.println("已读:" + mail.getIsRead());
// 更新已读
if (!mail.getIsRead()) {
mail.setIsRead(true);
mail.update(ConflictResolutionMode.AlwaysOverwrite);
}
//System.out.println("邮件内容 :" + mail.getBody());
// 处理附件
List<Attachment> attachs = mail.getAttachments().getItems();
try {
if (mail.getHasAttachments()) {
for (Attachment attach : attachs) {
if (attach instanceof FileAttachment) {
//接收邮件到临时目录
System.out.println(attach.getName());
//File tempZip = new File("/tmp", attach.getName());
//((FileAttachment) attach).load(tempZip.getPath());
}
}
//删除邮件
//mail.delete(DeleteMode.HardDelete);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println();
}
// 发送邮件
//mailUtil.send("Subject", new String[] { "xxx@domain.com" }, null, "content");
}
/**
* 创建邮件服务
*
* @return 邮件服务
*/
private ExchangeService getExchangeService() {
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_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 max          最大收取邮件数
* @param searchFilter 收取邮件过滤规则
* @return
* @throws Exception
*/
public ArrayList<EmailMessage> receive(int max, SearchFilter searchFilter) throws Exception {
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
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 {
// e.g. new SearchFilter.SearchFilterCollection(
// LogicalOperator.Or, new SearchFilter.ContainsSubstring(ItemSchema.Subject, "EWS"),
// new SearchFilter.ContainsSubstring(ItemSchema.Subject, "API"))
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 ArrayList<EmailMessage> receive(int max) throws Exception {
return receive(max, null);
}
/**
* 收取邮件
*
* @throws Exception
*/
public ArrayList<EmailMessage> receive() throws Exception {
return receive(0, null);
}
/**
* 发送带附件的mail
*
* @param subject         邮件标题
* @param to              收件人列表
* @param cc              抄送人列表
* @param bodyText        邮件内容
* @param attachmentPaths 附件地址列表
* @throws Exception
*/
public void send(String subject, String[] to, String[] cc, String bodyText, String[] attachmentPaths)
throws Exception {
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();
}
/**
* 发送不带附件的mail
*
* @param subject  邮件标题
* @param to       收件人列表
* @param cc       抄送人列表
* @param bodyText 邮件内容
* @throws Exception
*/
public void send(String subject, String[] to, String[] cc, String bodyText) throws Exception {
send(subject, to, cc, bodyText, null);
}
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-390202-1-1.html 上篇帖子: [c#]exchange回复,全部回复,转发所遇到的问题 下篇帖子: POJ 1860 Currency Exchange (最短路)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表