exchange服务器之邮件操作总结(Exchange、POP3)
白羽 2018-11-09 来源 :网络 阅读 1876 评论 0

摘要:本文将带你了解exchange服务器之邮件操作总结(Exchange、POP3),希望本文对大家学Exchange有所帮助。

    本文将带你了解exchange服务器之邮件操作总结(Exchange、POP3),希望本文对大家学Exchange有所帮助。


<

          总结下几年前写过的,操作邮件Exchange、POP3协议的demoExchange: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.enumeration.search.LogicalOperator;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.EmailMessageSchema;import microsoft.exchange.webservices.data.credential.ExchangeCredentials;import microsoft.exchange.webservices.data.credential.WebCredentials; import microsoft.exchange.webservices.data.core.service.folder.Folder;import microsoft.exchange.webservices.data.property.complex.Attachment;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.net.URI;import java.net.URISyntaxException;import java.util.ArrayList;import java.util.List; /** * Created by sunjun on 2016/9/21. */public class ExchangeMailTest {     // private static String username = "scf_dc@jd.com";    private static String username = "scf_dc@*.local";    private static String password = "*@2016.07";    private static String demand = "mail.*.com";// 邮件服务器    // private static String demand = "mail.*.com";// 邮件服务器    private static ExchangeService service;     /**     * 初始化连接     * */    private static void init(){        service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);        ExchangeCredentials credentials = new WebCredentials(username,password);        service.setCredentials(credentials);        try {            service.setUrl(new URI("https://" + "mail.jd.com" + "/EWS/Exchange.asmx"));        } catch (URISyntaxException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }     /**     * 使用Exchange协议发送     * @param subject 邮件主题     * @param to  收件人     * @param cc  抄送     * @param bobytext  正文     * @param realPath  附件     *     * @throws Exception     */    public static void doSend(String subject, List<String> to, List<String> cc,                              String bodyText, String realPath) throws Exception {         EmailMessage msg = new EmailMessage(service);        msg.setSubject(subject);        MessageBody body = MessageBody.getMessageBodyFromText(bodyText);        body.setBodyType(BodyType.Text);        msg.setBody(body);        for (String s : to) {            msg.getToRecipients().add(s);        }//  for (String s : cc) {//   msg.getCcRecipients().add(s);//  }        if (realPath != null && !"".equals(realPath)) {            msg.getAttachments().addFileAttachment(realPath);        }        msg.send();    }     public static void send(String subject, List<String> to, List<String> cc,                            String bodyText) throws Exception {        doSend(subject, to, cc, bodyText, null);    }     /**     * 使用Exchange协议接收邮件     *     * @throws Exception     */     public static void GetUnreadEmails() throws Exception {        ItemView view = new ItemView(Integer.MAX_VALUE);        List<String> list = new ArrayList<String>();        FindItemsResults<Item> unRead = Folder.bind(service, WellKnownFolderName.Inbox).findItems(SetFilter(), view);        System.out.println("unRead:" + unRead.getItems().size());        for (Item item : unRead.getItems()) {            if (item.getSubject() != null) {                list.add(item.getSubject().toString());            } else {                list.add("无标题");            }//    list.Add(item.DateTimeSent.ToString());        }//   int unRead1=Folder.bind(service, WellKnownFolderName.Inbox).getUnreadCount();  //未读邮件数量        System.out.println("未读邮件数量"+Folder.bind(service, WellKnownFolderName.Inbox).getUnreadCount());    }     /**     * 设置获取什么类型的邮件     *     * @throws Exception     */     private static SearchFilter SetFilter() {        List<SearchFilter> searchFilterCollection = new ArrayList<SearchFilter>();        searchFilterCollection.add(new SearchFilter.IsEqualTo(                EmailMessageSchema.IsRead, false));        SearchFilter s = new SearchFilter.SearchFilterCollection(                LogicalOperator.And,searchFilterCollection);         // 如果要获取所有邮件的话代码改成这样://   searchFilterCollection.add(new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));//   searchFilterCollection.add(new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, true));//   SearchFilter s = new SearchFilter.SearchFilterCollection(LogicalOperator.Or,searchFilterCollection);         return s;    }     public static void main(String[] args) throws Exception {        init();        List<String> to = new ArrayList<String>();        to.add("*@jd.com");        to.add("*@163.com");        send("test",to,null,"hello");        GetUnreadEmails();        receive("", 5200);     }     /**     *     * ______________________________________________     */    /**     serverName 接收邮件地址     user 用户信息     pwd 密码     path 邮件临时储存路径     max 每次接收邮件的最大数量     **/     public static void receive(String path, int max) throws Exception {        //绑定邮箱        Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);        //获取邮箱文件数量        int count = inbox.getTotalCount();        if(max > 0) count = count > max ? max : count;        //循环获取邮箱邮件        ItemView view = new ItemView(count);        FindItemsResults<Item> findResults = service.findItems(inbox.getId(), view);        for (Item item : findResults.getItems()) {            EmailMessage message = EmailMessage.bind(service, item.getId());            List<Attachment> attachs = message.getAttachments().getItems();//            System.out.println("id-->" + message.getId());            System.out.println("sender-->" + message.getSender());            System.out.println("sub-->" + item.getSubject());//                System.out.println("body-->" + message.getBody());            System.out.println("===========End=============" );            //处理附件//   try{//    if(message.getHasAttachments()){//     for(Attachment f : attachs){//      if(f instanceof FileAttachment){//       //接收邮件到临时目录//       File tempZip = new File(path,f.getName());//       ((FileAttachment)f).load(tempZip.getPath());//      }//     }//     //删除邮件////     message.delete(DeleteMode.HardDelete);//    }//   }catch(Exception err){//   }        }    }     public static void receive(){        try {            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);            ExchangeCredentials credentials = new WebCredentials("*@*.local", "*@*.07");            service.setCredentials(credentials);            service.setUrl(new URI("https://" + "mail.*.com" + "/EWS/Exchange.asmx"));            // Bind to the Inbox.            Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);//获取邮箱文件数量            int count = inbox.getTotalCount();            System.out.println(count);            System.out.println(inbox.getDisplayName());            ItemView view = new ItemView(10);            FindItemsResults<Item> findResults = service.findItems(inbox.getId(), view);            for (Item item : findResults.getItems()) {                EmailMessage message = EmailMessage.bind(service, item.getId());                System.out.println("id-->" + message.getId());                System.out.println("sender-->" + message.getSender());                System.out.println("sub-->" + item.getSubject());//                System.out.println("body-->" + message.getBody());                System.out.println("===========End=============" );            }        } catch (Exception e) {            System.out.println("===========" + e.getMessage());        }    }}POP3:import com.jr.gyl.pledge.base.common.mail.MailAuthenticator; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility;   /** * @author yh * */ public class ShowMail {       private MimeMessage mimeMessage = null;     private String saveAttachPath = ""; // 附件下载后的存放目录     private StringBuffer bodyText = new StringBuffer(); // 存放邮件内容的StringBuffer对象     private String dateFormat = "yy-MM-dd HH:mm"; // 默认的日前显示格式       /**     * 构造函数,初始化一个MimeMessage对象     */     public ShowMail() {     }       public ShowMail(MimeMessage mimeMessage) {         this.mimeMessage = mimeMessage;         System.out.println("创建一个ReceiveEmail对象....");     }       public void setMimeMessage(MimeMessage mimeMessage) {         this.mimeMessage = mimeMessage;         System.out.println("设置一个MimeMessage对象...");     }       /**     * *获得发件人的地址和姓名      */     public String getFrom() throws Exception {         InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom();         String from = address[0].getAddress();         if (from == null) {             from = "";             System.out.println("无法知道发送者.");         }         String personal = address[0].getPersonal();           if (personal == null) {             personal = "";             System.out.println("无法知道发送者的姓名.");         }           String fromAddr = null;         if (personal != null || from != null) {             fromAddr = personal + "<" + from + ">";             System.out.println("发送者是:" + fromAddr);         } else {             System.out.println("无法获得发送者信息.");         }         return fromAddr;     }       /**     * *获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同     * *"to"----收件人"cc"---抄送人地址"bcc"---密送人地址      */     public String getMailAddress(String type) throws Exception {         String mailAddr = "";         String addType = type.toUpperCase();           InternetAddress[] address = null;         if (addType.equals("TO") || addType.equals("CC")                 || addType.equals("BCC")) {               if (addType.equals("TO")) {                 address = (InternetAddress[]) mimeMessage                         .getRecipients(Message.RecipientType.TO);             } else if (addType.equals("CC")) {                 address = (InternetAddress[]) mimeMessage                         .getRecipients(Message.RecipientType.CC);             } else {                 address = (InternetAddress[]) mimeMessage                         .getRecipients(Message.RecipientType.BCC);             }               if (address != null) {                 for (int i = 0; i < address.length; i++) {                     String emailAddr = address[i].getAddress();                     if (emailAddr == null) {                         emailAddr = "";                     } else {                         System.out.println("转换之前的emailAddr: " + emailAddr);                         emailAddr = MimeUtility.decodeText(emailAddr);                         System.out.println("转换之后的emailAddr: " + emailAddr);                     }                     String personal = address[i].getPersonal();                     if (personal == null) {                         personal = "";                     } else {                         System.out.println("转换之前的personal: " + personal);                         personal = MimeUtility.decodeText(personal);                         System.out.println("转换之后的personal: " + personal);                     }                     String compositeto = personal + "<" + emailAddr + ">";                     System.out.println("完整的邮件地址:" + compositeto);                     mailAddr += "," + compositeto;                 }                 mailAddr = mailAddr.substring(1);             }         } else {             throw new Exception("错误的电子邮件类型!");         }         return mailAddr;     }       /**     * *获得邮件主题      */     public String getSubject() throws MessagingException {        String subject = "";        try {            System.out.println("转换前的subject:" + mimeMessage.getSubject());            subject = MimeUtility.decodeText(mimeMessage.getSubject());            System.out.println("转换后的subject: " + mimeMessage.getSubject());            if (subject == null) {                subject = "";            }        } catch (Exception exce) {            exce.printStackTrace();        }        return subject;    }     /**     * *获得邮件发送日期      */     public String getSentDate() throws Exception {        Date sentDate = mimeMessage.getSentDate();        System.out.println("发送日期 原始类型: " + dateFormat);        SimpleDateFormat format = new SimpleDateFormat(dateFormat);        String strSentDate = format.format(sentDate);        System.out.println("发送日期 可读类型: " + strSentDate);        return strSentDate;    }     /**     * *获得邮件正文内容      */    public String getBodyText() {        return bodyText.toString();    }     /**     * *解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件     * *主要是根据MimeType类型的不同执行不同的操作,一步一步的解析      */    public void getMailContent(Part part) throws Exception {        String contentType = part.getContentType();        // 获得邮件的MimeType类型        System.out.println("邮件的MimeType类型: " + contentType);        int nameIndex = contentType.indexOf("name");        boolean conName = false;        if (nameIndex != -1) {            conName = true;        }        System.out.println("邮件内容的类型:" + contentType);        if (part.isMimeType("text/plain") && conName == false) {            // text/plain 类型            bodyText.append((String) part.getContent());        } else if (part.isMimeType("text/html") && conName == false) {            // text/html 类型            bodyText.append((String) part.getContent());        } else if (part.isMimeType("multipart/*")) {            // multipart/*            Multipart multipart = (Multipart) part.getContent();            int counts = multipart.getCount();            for (int i = 0; i < counts; i++) {                getMailContent(multipart.getBodyPart(i));            }        } else if (part.isMimeType("message/rfc822")) {            // message/rfc822            getMailContent((Part) part.getContent());        } else {        }    }     /**     * *判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"      */     public boolean getReplySign() throws MessagingException {        boolean replySign = false;        String needReply[] = mimeMessage                .getHeader("Disposition-Notification-To");        if (needReply != null) {            replySign = true;        }        if (replySign) {            System.out.println("该邮件需要回复");        } else {            System.out.println("该邮件不需要回复");        }        return replySign;    }     /**     *获得此邮件的Message-ID      */    public String getMessageId() throws MessagingException {        String messageID = mimeMessage.getMessageID();        System.out.println("邮件ID: " + messageID);        return messageID;    }     /**     * 判断此邮件是否已读,如果未读返回false,反之返回true     */     public boolean isNew() throws MessagingException {        boolean isNew = false;        Flags flags = ((Message) mimeMessage).getFlags();        Flags.Flag[] flag = flags.getSystemFlags();        System.out.println("flags的长度:" + flag.length);        for (int i = 0; i < flag.length; i++) {            if (flag[i] == Flags.Flag.SEEN) {                isNew = true;                System.out.println("seen email...");                // break;            }        }        return isNew;    }     /**     * 判断此邮件是否包含附件     */    public boolean isContainAttach(Part part) throws Exception {        boolean attachFlag = false;        // String contentType = part.getContentType();        if (part.isMimeType("multipart/*")) {            Multipart mp = (Multipart) part.getContent();            for (int i = 0; i < mp.getCount(); i++) {                BodyPart mPart = mp.getBodyPart(i);                String disposition = mPart.getDisposition();                if ((disposition != null)                         && ((disposition.equals(Part.ATTACHMENT)) || (disposition                         .equals(Part.INLINE))))                     attachFlag = true;                 else if (mPart.isMimeType("multipart/*")) {                     attachFlag = isContainAttach((Part) mPart);                 } else {                     String conType = mPart.getContentType();                    if (conType.toLowerCase().indexOf("application") != -1)                        attachFlag = true;                    if (conType.toLowerCase().indexOf("name") != -1)                        attachFlag = true;                }            }        } else if (part.isMimeType("message/rfc822")) {            attachFlag = isContainAttach((Part) part.getContent());        }        return attachFlag;    }     /**     * *保存附件      */    public void saveAttachMent(Part part) throws Exception {         String fileName = "";         if (part.isMimeType("multipart/*")) {            Multipart mp = (Multipart) part.getContent();            for (int i = 0; i < mp.getCount(); i++) {                BodyPart mPart = mp.getBodyPart(i);                String disposition = mPart.getDisposition();                if ((disposition != null)                        && ((disposition.equals(Part.ATTACHMENT)) || (disposition                        .equals(Part.INLINE)))) {                    fileName = mPart.getFileName();                    if (fileName.toLowerCase().indexOf("gb2312") != -1) {                        fileName = MimeUtility.decodeText(fileName);                    }                    saveFile(fileName, mPart.getInputStream());                } else if (mPart.isMimeType("multipart/*")) {                    saveAttachMent(mPart);                } else {                    fileName = mPart.getFileName();                    if ((fileName != null)                            && (fileName.toLowerCase().indexOf("GB2312") != -1)) {                        fileName = MimeUtility.decodeText(fileName);                        saveFile(fileName, mPart.getInputStream());                    }                }            }         } else if (part.isMimeType("message/rfc822")) {             saveAttachMent((Part) part.getContent());         }     }       /**     *设置附件存放路径     */    public void setAttachPath(String attachPath) {        this.saveAttachPath = attachPath;    }     /**     * *设置日期显示格式      */    public void setDateFormat(String format) throws Exception {        this.dateFormat = format;    }     /**     * *获得附件存放路径      */    public String getAttachPath() {        return saveAttachPath;    }     /**     * *真正的保存附件到指定目录里      */     private void saveFile(String fileName, InputStream in) throws Exception {         String osName = System.getProperty("os.name");         String storeDir = getAttachPath();         String separator = "";         if (osName == null) {             osName = "";         }         if (osName.toLowerCase().indexOf("win") != -1) {             separator = "\\";             if (storeDir == null || storeDir.equals(""))                 storeDir = "c:\\tmp";         } else {             separator = "/";             storeDir = "/tmp";         }         File storeFile = new File(storeDir + separator + fileName);         System.out.println("附件的保存地址:" + storeFile.toString());         // for(inti=0;storefile.exists();i++){         // storefile=newFile(storedir+separator+fileName+i);         // }         BufferedOutputStream bos = null;         BufferedInputStream bis = null;           try {             bos = new BufferedOutputStream(new FileOutputStream(storeFile));             bis = new BufferedInputStream(in);             int c;             while ((c = bis.read()) != -1) {                 bos.write(c);                 bos.flush();             }         } catch (Exception exception) {             exception.printStackTrace();             throw new Exception("文件保存失败!");         } finally {             bos.close();             bis.close();         }     }       /**     *ReceiveEmail类测试     */     public static void main(String args[]) throws Exception { //        String host = "smtp.jd.com";        String host = "pop3.jd.com";        String username = "scf_dc@jd.com";        String password = "DCZy@2016.07";         Properties props = new Properties();//        Session session = Session.getDefaultInstance(props, null);        // 初始化props        props.put("mail.smtp.host", host);        props.put("mail.smtp.auth", "true");        // 验证        MailAuthenticator authenticator = new MailAuthenticator(username, password);        // 创建session        Session session = Session.getInstance(props, authenticator);          Store store = session.getStore("pop3");        store.connect(host, username, password);        Folder folder = store.getFolder("INBOX");         folder.open(Folder.READ_ONLY);         Message message[] = folder.getMessages();         System.out.println("邮件数量:" + message.length);         ShowMail re = null;         for (int i = 0; i < message.length; i++) {             re = new ShowMail((MimeMessage) message[i]);             System.out.println("邮件" + i + "主题:" + re.getSubject());            System.out.println("邮件" + i + "发送时间:" + re.getSentDate());            System.out.println("邮件" + i + "是否需要回复:" + re.getReplySign());            System.out.println("邮件" + i + "是否已读:" + re.isNew());            System.out.println("邮件" + i + "是否包含附件:" + re.isContainAttach((Part) message[i]));            System.out.println("邮件" + i + "发送人地址:" + re.getFrom());            System.out.println("邮件" + i + "收信人地址:" + re.getMailAddress("to"));            System.out.println("邮件" + i + "抄送:" + re.getMailAddress("cc"));            System.out.println("邮件" + i + "暗抄:" + re.getMailAddress("bcc"));            re.setDateFormat("yy年MM月dd日HH:mm");            System.out.println("邮件" + i + "发送时间:" + re.getSentDate());            System.out.println("邮件" + i + "邮件ID:" + re.getMessageId());            re.getMailContent((Part) message[i]);            System.out.println("邮件" + i + "正文内容:\r\n" + re.getBodyText());            re.setAttachPath("e:\\");            re.saveAttachMent((Part) message[i]);        }    }}    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标系统运维之Exchange频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程