global class EmailComeBackListen implements Messaging.InboundEmailHandler { global Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email, Messaging.InboundEnvelope envelope) { //从标题中截取出关联信息 System.debug('SWO邮件回复监听'); String id = ''; String type = ''; if(String.isNotBlank(email.subject)){ System.debug('email.subject:'+email.subject); List str = email.subject.split('~'); if(str!=null && str.size()!=0){ //截取邮件关联信息,查询邮件关联对象,判断是否跳过邮件服务 String name = str[1]; System.debug('name:'+name); //SWO 的邮件返回 if(name.startsWith('S')){ type = 'S'; name = name.substring(name.indexOf(':')+1,name.length()); if(String.isNotBlank(name)){ System.debug('name:'+name); List swoList = [select Id,notSaveEmail__c,Name from SWO__c where Name=:name]; if (swoList!=null && swoList.size()!=0) { id = swoList[0].Id; System.debug('回复监听id:'+id); System.debug('SWO邮件回复监听:'+swoList[0].notSaveEmail__c); if(swoList[0].notSaveEmail__c){ System.debug('跳过邮件服务监听'); swoList[0].notSaveEmail__c = false; update swoList[0]; return null; } } } } //Case 的邮件返回 if(name.startsWith('C')){ type = 'C'; System.debug('Case 的邮件返回'); name = name.substring(name.indexOf(':')+1, name.length()); if(String.isNotBlank(name)){ List caseList = [select Id,notSaveEmail__c,Name from User_FaultInfo__c where Name=:name]; System.debug('caseList:'+caseList); if(caseList!=null && caseList.size()!=0){ id = caseList[0].Id; System.debug('Case邮件回复监听:'+caseList[0].notSaveEmail__c); if(caseList[0].notSaveEmail__c){ System.debug('跳过邮件服务监听'); caseList[0].notSaveEmail__c = false; update caseList[0]; return null; } } } } //报价的邮件返回 if(name.startsWith('Q')){ type = 'Q'; name = name.substring(name.indexOf(':')+1, name.length()); if(String.isNotBlank(name)){ List quotesList = [select Id,notSaveEmail__c,Name from Quotes__c where Name=:name]; if (quotesList!=null && quotesList.size()!=0) { id = quotesList[0].Id; System.debug('Quoteses邮件回复监听:'+quotesList[0].notSaveEmail__c); if(quotesList[0].notSaveEmail__c){ System.debug('跳过邮件服务监听'); quotesList[0].notSaveEmail__c = false; update quotesList[0]; return null; } } } } if (String.isNotBlank(id)) { createEmail(email,id,type); } } } Messaging.InboundEmailResult result = new Messaging.InboundEmailresult(); //createEmail(email,id); //SendEmail(); result.success = true; return result; } public void createEmail(Messaging.InboundEmail email,String id,String type){ Mail_Merge__c mailMerge = new Mail_Merge__c(); mailMerge.RECORD__c = id; //邮件标题 if(String.isNotBlank(email.subject)){ mailMerge.SUBJECTCOPY__c = email.subject; List str = email.subject.split('~'); if(str!=null && str.size()!=0){ mailMerge.SUBJECT__c = str[0]; mailMerge.Name = str[0]; } }else{ mailMerge.SUBJECTCOPY__c = ''; mailMerge.SUBJECT__c = ''; mailMerge.Name = ''; } if(type == 'S'){ mailMerge.SWO__c = id; mailMerge.RECORD_TYPE__c = 'SWO'; } if(type == 'C'){ mailMerge.CaseF__c = id; mailMerge.RECORD_TYPE__c = 'Case'; } if(type == 'Q'){ mailMerge.Quotes__c = id; mailMerge.RECORD_TYPE__c = 'Quotes'; } //发件人地址 mailMerge.FROM__c = email.fromAddress; //收件人地址 mailMerge.RECIPIENT__c = getAddresses(email.toAddresses); //抄送人 mailMerge.CC__c = getAddresses(email.ccAddresses); setAllMember(mailMerge,email.toAddresses,email.ccAddresses); //邮件信息 mailMerge.MESSAGE__c = email.plainTextBody; //收取回复邮件时间 mailMerge.DATE__c = Datetime.now(); mailMerge.TYPE__c = 'reply'; mailMerge.EMAIL_SENT__c = 'YES'; insert mailMerge; //保存邮件附件 saveFile(email.binaryAttachments,mailMerge.Id); } public String getAddresses(List addresses){ String returnStr = ''; if(addresses!=null && addresses.size()!=0){ for(String str:addresses){ returnStr += str+';'; } } return returnStr; } public void setAllMember(Mail_Merge__c mailMerge,List toAddress,List ccAddresses){ mailMerge.ALL_MEMBER__c = ''; mailMerge.ALL_MEMBER_NAME__c = ''; mailMerge.ALL_MEMBER_TYPE__c = ''; if(toAddress !=null && toAddress.size()!=0){ for(String str : toAddress){ //邮件地址之间用“;”隔开,发送邮件页会用“;”分割字符串 mailMerge.ALL_MEMBER__c = mailMerge.ALL_MEMBER__c + str + ';'; //名字暂时都用“-”,邮件页面分割出“-”会用空代替 mailMerge.ALL_MEMBER_NAME__c = mailMerge.ALL_MEMBER_NAME__c + '-;'; mailMerge.ALL_MEMBER_TYPE__c = mailMerge.ALL_MEMBER_TYPE__c + 'to;'; } } if(ccAddresses !=null && ccAddresses.size()!=0){ for(String str : ccAddresses){ if(str.startsWith('email@') || str.equals('') || str.equals('')){ continue; } //邮件地址之间用“;”隔开,发送邮件页会用“;”分割字符串 mailMerge.ALL_MEMBER__c = mailMerge.ALL_MEMBER__c + str + ';'; //名字暂时都用“-”,邮件页面分割出“-”会用空代替 mailMerge.ALL_MEMBER_NAME__c = mailMerge.ALL_MEMBER_NAME__c + '-;'; mailMerge.ALL_MEMBER_TYPE__c = mailMerge.ALL_MEMBER_TYPE__c + 'cc;'; } } } public void saveFile(List binaryAttachments,String Id){ if (binaryAttachments != null && binaryAttachments.size()!=0) { List attachmentList = new List(); for(Messaging.InboundEmail.BinaryAttachment emailFile : binaryAttachments){ Attachment attachment = new Attachment(); attachment.Name = emailFile.fileName; attachment.Body = emailFile.body; attachment.ParentId = Id; attachmentList.add(attachment); } insert attachmentList; } } }