public without sharing class SendEmailController { public Mail_Merge__c mail{get; set;} public String id{get;set;} public String openType{get;set;} public String handleType{get;set;} public String errorMessage{get;set;} public Integer lineNum{get;set;} public String fileId{get;set;} public String type{get;set;} public String typeid{get;set;} public Integer allFileSize{get;set;} public Attachment attachment{get;set;} public List attachmentList{get;set;} //SWO_Email_Member__c 这个对象只是为了生成页面上的人员明细行 // public List lineDataList_new{get;set;} public List memberLineDatas{get;set;} //用于接收人员查找页面查找返回的数据 public String memberName{get;set;} //用于接收人员查找页面查找返回的数据 public String memberEmail{get;set;} //用于接收人员查找页面查找返回的数据 public String memberId{get;set;} public String baseUrl {get;set;} public String name {get;set;} public Boolean isOnClick{get;set;} public List toAddresses ; public List ccAddresses ; public List bccAddresses ; public SendEmailController() { id = System.currentPageReference().getParameters().get('id'); type = System.currentPageReference().getParameters().get('type'); typeid = System.currentPageReference().getParameters().get('typeid'); openType = System.currentPageReference().getParameters().get('openType'); } public SendEmailController(ApexPages.StandardController stdController) { id = System.currentPageReference().getParameters().get('id'); type = System.currentPageReference().getParameters().get('type'); typeid = System.currentPageReference().getParameters().get('typeid'); openType = System.currentPageReference().getParameters().get('openType'); } public void init(){ //URL获取 baseUrl = URL.getSalesforceBaseUrl().toExternalForm(); String path = URL.getCurrentRequestUrl().getPath(); if (path.indexOf('/apex') > 0) { baseUrl += path.substring(0,path.indexOf('/apex')); } else if (path.indexOf('production/') > 0) { baseUrl += '/production'; } attachment = new Attachment(); mail = new Mail_Merge__c(); mail.RECORD__c = typeid; mail.RECORD_TYPE__c = type; memberLineDatas = new List(); if(id == null){ isOnClick = false; mail.FROM__c = UserInfo.getUserEmail(); mail.TYPE__c = 'send'; MemberLine member = new MemberLine(); member.lineNum = 0; member.to = true; memberLineDatas.add(member); // SWO不是批准后状态不能发送邮件 if ('Quotes'.equals(mail.RECORD_TYPE__c)) { List quotesList = new List(); quotesList = [SELECT Id, Name, BILLING_SCHEDULE__c, BILL_TO__c, SHIP_TO__c, BILL_TO_SELECT__c,SWOStatusMark__c FROM Quotes__c WHERE Id = :typeid]; if (quotesList.size() > 0 ) { if (quotesList[0].SWOStatusMark__c < 2) { isOnClick = true; } } } }else{ mail = [select id,send__c,MESSAGE__c,SUBJECT__c,TYPE__c,FROM__c,DATE__c,RECIPIENT__c,CC__c,BCC__c,RECORD__c,RECORD_TYPE__c,toName__c,ccName__c,bccName__c,ALL_MEMBER__c,ALL_MEMBER_NAME__c,ALL_MEMBER_TYPE__c,EMAIL_SENT__c,SWO__c,CaseF__c,Quotes__c from Mail_Merge__c where id =:id]; //mail.TYPE__c == 'reply' 邮件为回复邮件 或者是系统自动发送的邮件 //EMAIL_SENT__c =='YES' 邮件已发送 if(mail.TYPE__c == 'reply' || mail.EMAIL_SENT__c =='YES'){ //isOnClick = true; 在邮件页面所有的按钮都不可点击 isOnClick = true; } type = mail.RECORD_TYPE__c; if(mail.RECORD_TYPE__c == 'SWO') typeid = mail.SWO__c; if(mail.RECORD_TYPE__c == 'Case') typeid = mail.CaseF__c; if(mail.RECORD_TYPE__c == 'Quotes') typeid = mail.Quotes__c; mail.RECORD__c = typeid; typeid = mail.RECORD__c; List allEmails = String.isNotBlank(mail.ALL_MEMBER__c)?mail.ALL_MEMBER__c.split(';'):new List(); List allName = String.isNotBlank(mail.ALL_MEMBER_NAME__c)?mail.ALL_MEMBER_NAME__c.split(';'):new List(); List allType = String.isNotBlank(mail.ALL_MEMBER_TYPE__c)?mail.ALL_MEMBER_TYPE__c.split(';'):new List(); if(String.isNotBlank(openType) && openType == 'Reply' && mail.EMAIL_SENT__c == 'YES'){ if(mail.EMAIL_SENT__c == 'YES' || mail.TYPE__c == 'reply'){ mail.Id = null; mail.EMAIL_SENT__c = 'NO'; } mail.TYPE__c = 'send'; isOnClick = false; //mail.DATE__c = Datetime.now(); if(String.isNotBlank(UserInfo.getUserEmail()) && !UserInfo.getUserEmail().equals(mail.FROM__c)){ MemberLine member_line = new MemberLine(); member_line.emailAddress = mail.FROM__c; member_line.name = ''; member_line.to = true; member_line.cc = false; member_line.bcc = false; member_line.lineNum = 0; memberLineDatas.add(member_line); } isOnClick = false; String mailToAddressName = ''; String mailCcAdressName = ''; if(allEmails.size() != 0){ for(Integer i = 0 ; i toAddresses = new List(); // List ccAddresses = new List(); // List bccAddresses = new List(); // mail.RECIPIENT__c = ''; // mail.toName__c = ''; // mail.CC__c = ''; // mail.ccName__c = ''; // mail.BCC__c = ''; // mail.bccName__c = ''; // mail.ALL_MEMBER__c = ''; // mail.ALL_MEMBER_NAME__c = ''; // mail.ALL_MEMBER_TYPE__c = ''; // if(memberLineDatas!=null && memberLineDatas.size()!=0){ // System.debug('memberLineDatas--->'+memberLineDatas); // //拼接邮件收件信息 // for(MemberLine line : memberLineDatas){ // if(String.isNotBlank(line.emailAddress)){ // mail.ALL_MEMBER__c = mail.ALL_MEMBER__c + line.emailAddress + ';'; // //手动输入邮件地址时 name会空 用-占位保存 用于初始化时拆分 // mail.ALL_MEMBER_NAME__c = mail.ALL_MEMBER_NAME__c + (String.isNotBlank(line.name) ? line.name : '-') + ';'; // if(line.to){ // if(String.isNotBlank(line.emailAddress)){ // toAddresses.add(line.emailAddress); // mail.RECIPIENT__c = mail.RECIPIENT__c + line.emailAddress + ';'; // mail.toName__c = mail.toName__c + (String.isNotBlank(line.name) ? line.name : line.emailAddress) + ';'; // mail.ALL_MEMBER_TYPE__c = mail.ALL_MEMBER_TYPE__c + 'to;'; // } // } // if(line.cc){ // if(String.isNotBlank(line.emailAddress)){ // ccAddresses.add(line.emailAddress); // mail.CC__c = mail.CC__c + line.emailAddress + ';'; // mail.ccName__c = mail.ccName__c + (String.isNotBlank(line.name) ? line.name : line.emailAddress) + ';'; // mail.ALL_MEMBER_TYPE__c = mail.ALL_MEMBER_TYPE__c + 'cc;'; // } // } // if(line.bcc){ // if(String.isNotBlank(line.emailAddress)){ // bccAddresses.add(line.emailAddress); // mail.BCC__c = mail.BCC__c + line.emailAddress + ';'; // mail.bccName__c = mail.bccName__c + (String.isNotBlank(line.name) ? line.name : line.emailAddress) + ';'; // mail.ALL_MEMBER_TYPE__c = mail.ALL_MEMBER_TYPE__c + 'bcc;'; // } // } // } // } // } // if('SWO'.equals(mail.RECORD_TYPE__c)){ // mail.SWO__c = mail.RECORD__c; // SWO__c swo = [select Id,Name from SWO__c where Id=:mail.RECORD__c]; // name = 'SWO:'+swo.Name; // } // if('Case'.equals(mail.RECORD_TYPE__c)){ // mail.CaseF__c = mail.RECORD__c; // User_FaultInfo__c caseInfo = [select Id,Name from User_FaultInfo__c where Id=:mail.RECORD__c]; // name = 'Case:'+caseInfo.Name; // } // if('Quotes'.equals(mail.RECORD_TYPE__c)){ // mail.Quotes__c = mail.RECORD__c; // Quotes__c quotes = [select Id,Name from Quotes__c where Id=:mail.RECORD__c]; // name = 'Quotes:'+quotes.Name; // } // //判断是否时点击发送按钮,进入提交方法 // if(String.isNotBlank(handleType) && !'send'.equals(handleType)){ // mail.EMAIL_SENT__c = 'NO'; // upsert mail; // id = mail.Id; // } System.debug('邮件标题mail.subject'+mail.SUBJECT__c); System.debug('邮件Name'+mail.toName__c); errorMessage = ''; System.debug('handleType:'+handleType); //点击发送按钮,并且邮件接收地址不为空 发送邮件 if(String.isNotBlank(handleType) && 'send'.equals(handleType)){ if(toAddresses.size()!=0){ mail.DATE__c = Datetime.now(); if(String.isNotBlank(mail.SUBJECT__c) && String.isNotBlank(mail.MESSAGE__c)){ //关联信息拼入到标题中供,回复邮件关联使用 //mail.SUBJECT__c = mail.SUBJECT__c; mail.Name = mail.SUBJECT__c; mail.SUBJECTCOPY__c = mail.SUBJECT__c + '~' + (name!=null ? name : ''); System.debug('标题:'+mail.SUBJECTCOPY__c); Messaging.SingleEmailMessage sendMail = new Messaging.SingleEmailMessage(); sendMail.setToAddresses(toAddresses); sendMail.setBccAddresses(bccAddresses); //sendMail.setReplyTo(''); sendMail.setSubject(mail.SUBJECTCOPY__c); sendMail.setPlainTextBody(mail.MESSAGE__c); sendMail.setBccSender(false); sendMail.setUseSignature(false); //如果给客户发送报价单SWO需要抓取发送时间 是否抓取时间的标记 Boolean isSaveTime = false; if(attachmentList!=null&&attachmentList.size()!=0){ List sendMailFileList = new List(); for(Attachment att : attachmentList){ Messaging.EmailFileAttachment sendMailFile = new Messaging.EmailFileAttachment(); sendMailFile.setBody(att.Body); sendMailFile.setFileName(att.Name); //报价页面发送邮件,如果包含“报价单”开头的附件则SWO需要抓取当前时间 if('Quotes'.equals(mail.RECORD_TYPE__c) && att.Name.startsWith('报价单')){ // isSaveTime = true; continue; } sendMailFileList.add(sendMailFile); } if (!isSaveTime && 'Quotes'.equals(mail.RECORD_TYPE__c)) { sendMailFileList.add(SendEmailaddPDF()); isSaveTime = true; } sendMail.setFileAttachments(sendMailFileList); } else { List sendMailFileList = new List(); if ('Quotes'.equals(mail.RECORD_TYPE__c)) { sendMailFileList.add(SendEmailaddPDF()); isSaveTime = true; } sendMail.setFileAttachments(sendMailFileList); isSaveTime = true; } //三种邮件客户回复时,回复到不同的邮件服务监听中。 if('SWO'.equals(mail.RECORD_TYPE__c)){ SWO__c swo = new SWO__c(); swo.Id = mail.RECORD__c; //标记跳过邮件回复监听 swo.notSaveEmail__c = true; update swo; } if('Case'.equals(mail.RECORD_TYPE__c)){ User_FaultInfo__c caseInfo = new User_FaultInfo__c(); caseInfo.Id = mail.RECORD__c; //标记跳过邮件回复监听 caseInfo.notSaveEmail__c = true; update caseInfo; } if('Quotes'.equals(mail.RECORD_TYPE__c)){ Quotes__c quotes = [select Id,Name,notSaveEmail__c,SWO__c,SWO__r.Quotation_send__c from Quotes__c where Id=:mail.RECORD__c]; /* Quotes__c quotes = new Quotes__c(); quotes.Id = mail.RECORD__c;*/ //标记跳过邮件回复监听 quotes.notSaveEmail__c = true; update quotes; if (isSaveTime && String.isNotBlank(quotes.SWO__c) && quotes.SWO__r.Quotation_send__c == null) { SWO__c swo = new SWO__c(); swo.Id = quotes.SWO__c; swo.Quotation_send__c = Datetime.now(); update swo; } } //ccAddresses.add('email@sqtxllncwbyghx9lphlh50gefur2jyyj95io4r968llbumzh7.0t-8aptuaq.cs112.apex.sandbox.salesforce.com'); ccAddresses.add(System.label.EmailComeBackListen); ccAddresses.add('dai_Prectech@olympus.com.cn'); ccAddresses.add('Xin_Prectech@olympus.com.cn'); sendMail.setCcAddresses(ccAddresses); system.debug('=====sendMail---->'+sendMail); Messaging.SendEmailResult[] result_list = Messaging.sendEmail(new Messaging.SingleEmailMessage[] { sendMail }); for (Integer i = 0; i < result_list.size(); i++) { if (result_list[i].success == true ) { system.debug('=====send mail success'); } else { system.debug('=====send mail error:' + result_list[i].errors[0].message); } } mail.EMAIL_SENT__c = 'YES'; upsert mail; // 返回点击邮件页面 PageReference ref = new Pagereference('/'+mail.RECORD__c+'?type=mail'); ref.setRedirect(true); return ref; }else{ errorMessage='邮件标题和信息不可为空!'; } }else{ errorMessage='必须至少有一个收件人!'; } } return null; } public void save() { toAddresses = new List(); ccAddresses = new List(); bccAddresses = new List(); // System.debug('进入邮件发送'); // List toAddresses = new List(); // List ccAddresses = new List(); // List bccAddresses = new List(); mail.RECIPIENT__c = ''; mail.toName__c = ''; mail.CC__c = ''; mail.ccName__c = ''; mail.BCC__c = ''; mail.bccName__c = ''; mail.ALL_MEMBER__c = ''; mail.ALL_MEMBER_NAME__c = ''; mail.ALL_MEMBER_TYPE__c = ''; if(memberLineDatas!=null && memberLineDatas.size()!=0){ System.debug('memberLineDatas--->'+memberLineDatas); //拼接邮件收件信息 for(MemberLine line : memberLineDatas){ if(String.isNotBlank(line.emailAddress)){ mail.ALL_MEMBER__c = mail.ALL_MEMBER__c + line.emailAddress + ';'; //手动输入邮件地址时 name会空 用-占位保存 用于初始化时拆分 mail.ALL_MEMBER_NAME__c = mail.ALL_MEMBER_NAME__c + (String.isNotBlank(line.name) ? line.name : '-') + ';'; if(line.to){ if(String.isNotBlank(line.emailAddress)){ toAddresses.add(line.emailAddress); mail.RECIPIENT__c = mail.RECIPIENT__c + line.emailAddress + ';'; mail.toName__c = mail.toName__c + (String.isNotBlank(line.name) ? line.name : line.emailAddress) + ';'; mail.ALL_MEMBER_TYPE__c = mail.ALL_MEMBER_TYPE__c + 'to;'; } } if(line.cc){ if(String.isNotBlank(line.emailAddress)){ ccAddresses.add(line.emailAddress); mail.CC__c = mail.CC__c + line.emailAddress + ';'; mail.ccName__c = mail.ccName__c + (String.isNotBlank(line.name) ? line.name : line.emailAddress) + ';'; mail.ALL_MEMBER_TYPE__c = mail.ALL_MEMBER_TYPE__c + 'cc;'; } } if(line.bcc){ if(String.isNotBlank(line.emailAddress)){ bccAddresses.add(line.emailAddress); mail.BCC__c = mail.BCC__c + line.emailAddress + ';'; mail.bccName__c = mail.bccName__c + (String.isNotBlank(line.name) ? line.name : line.emailAddress) + ';'; mail.ALL_MEMBER_TYPE__c = mail.ALL_MEMBER_TYPE__c + 'bcc;'; } } } } } if('SWO'.equals(mail.RECORD_TYPE__c)){ mail.SWO__c = mail.RECORD__c; SWO__c swo = [select Id,Name from SWO__c where Id=:mail.RECORD__c]; name = 'SWO:'+swo.Name; } if('Case'.equals(mail.RECORD_TYPE__c)){ mail.CaseF__c = mail.RECORD__c; User_FaultInfo__c caseInfo = [select Id,Name from User_FaultInfo__c where Id=:mail.RECORD__c]; name = 'Case:'+caseInfo.Name; } if('Quotes'.equals(mail.RECORD_TYPE__c)){ mail.Quotes__c = mail.RECORD__c; Quotes__c quotes = [select Id,Name from Quotes__c where Id=:mail.RECORD__c]; name = 'Quotes:'+quotes.Name; } //判断是否时点击发送按钮,进入提交方法 if(String.isNotBlank(handleType) && !'send'.equals(handleType)){ mail.EMAIL_SENT__c = 'NO'; upsert mail; id = mail.Id; } // return mail; } public void addLine(){ MemberLine member = new MemberLine(); member.lineNum = memberLineDatas.size(); member.memberId = ''; member.name = ''; member.emailAddress = ''; member.to = true; member.cc = false; member.bcc = false; memberLineDatas.add(member); } public void deLine(){ //保证页面上最少有一行人员信息栏 if(memberLineDatas.size() == 1){ memberLineDatas[0].memberId = ''; memberLineDatas[0].emailAddress = ''; memberLineDatas[0].name = ''; memberLineDatas[0].to = true; memberLineDatas[0].cc = false; memberLineDatas[0].bcc = false; return; } memberLineDatas.remove(lineNum); //删除一行人员信息,重新给行标赋值 for(Integer i = 0 ; i nameList, List typeList, List bodyList, String parentId) { String operateResult; if (nameList.size() > 0) { List insertAttachmentList = new List(); for (Integer num = 0; num < nameList.size(); num ++ ) { Attachment tmpAttachment = new Attachment(); tmpAttachment.Name = nameList[num]; tmpAttachment.Body = EncodingUtil.base64Decode(bodyList[num]); tmpAttachment.ParentId = parentId; tmpAttachment.ContentType = typeList[num]; insertAttachmentList.add(tmpAttachment); } try { insert insertAttachmentList; operateResult = '文件上传成功'; } catch (Exception e) { operateResult = '文件上传失败'; } } return operateResult; } public void addMemberData(){ System.debug(memberName); System.debug('memberEmail:'+memberEmail); System.debug(memberId); if(lineNum!=null){ if(String.isNotBlank(memberName)){ memberLineDatas[lineNum].name = memberName; } if(String.isNotBlank(memberEmail)){ memberLineDatas[lineNum].emailAddress = memberEmail; } if(String.isNotBlank(memberId)){ memberLineDatas[lineNum].memberId = memberId; } } } public class MemberLine{ public String memberId{get;set;} public String emailAddress{get;set;} public String name{get;set;} public Boolean to{get;set;} public Boolean cc{get;set;} public Boolean bcc{get;set;} public Integer lineNum{get;set;} } }