1.控制层
@PostMapping("/sendEmail2") @ApiOperation(value = "发送邮件") public String sendEmail2(@RequestBody JSONObject json) { Email email = JSON.toJavaObject(json, Email.class); try { boolean result = emailService.sendEmail(email);//响应结果 } catch (Exception e){ e.printStackTrace(); } return "Email sent successfully!"; }
2.业务层
@Override public Boolean sendEmail(Email email) { boolean result=false; try { ListoldAttachments=email.getAttachments(); Map map=new HashMap<>(); List attachments=new ArrayList<>(); // 转换附件路径 for(String path:oldAttachments){ String templeFilePath=download(path,map); attachments.add(templeFilePath); } //发送方法 ExchangeClient client = new ExchangeClient.ExchangeClientBuilder() .hostname(hostname) .username(username) .password(password) .recipientTo(email.getRecipientTo()) .recipientCc(email.getRecipientCc()) .recipientBcc(email.getRecipientBcc()) .subject(email.getSubject()) .message(email.getMessage()) .attachments(attachments) .build(); result = client.sendExchange();//响应结果 }catch (Exception e){ log.error("发送邮件失败:"+e.getMessage()); } return result; }
3.工具类
package com.asset.util;/** * Created by admin on 2020/10/13. */ import com.asset.common.utils.EmptyUtil; import microsoft.exchange.webservices.data.core.ExchangeService; import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion; import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException; import microsoft.exchange.webservices.data.core.service.item.EmailMessage; import microsoft.exchange.webservices.data.credential.ExchangeCredentials; import microsoft.exchange.webservices.data.credential.WebCredentials; import microsoft.exchange.webservices.data.property.complex.MessageBody; import net.bytebuddy.description.type.TypeList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @Description 企业邮箱 * @Author wyj * @Date 2020/10/13 17:55 */ public class ExchangeClient { private static final Logger logger = LoggerFactory.getLogger(ExchangeClient.class); private final String hostname; private final ExchangeVersion exchangeVersion; private final String domain; private final String username; private final String password; private final String subject; private final ListrecipientTo; private final List recipientCc; private final List recipientBcc; private final List attachments; private final String message; private ExchangeClient(ExchangeClientBuilder builder) { this.hostname = builder.hostname; this.exchangeVersion = builder.exchangeVersion; this.domain = builder.domain; this.username = builder.username; this.password = builder.password; this.subject = builder.subject; this.recipientTo = builder.recipientTo; this.recipientCc = builder.recipientCc; this.recipientBcc = builder.recipientBcc; this.attachments = builder.attachments; this.message = builder.message; } public static class ExchangeClientBuilder { private String hostname; private ExchangeVersion exchangeVersion = ExchangeVersion.Exchange2010; private String domain; private String username; private String password; private String subject; private List recipientTo; private List recipientCc; private List recipientBcc; private List attachments; private String message; public ExchangeClientBuilder() { this.exchangeVersion = ExchangeVersion.Exchange2010_SP1; this.hostname = ""; this.username = ""; this.password = ""; this.subject = ""; this.recipientTo = new ArrayList<>(0); this.recipientCc = new ArrayList<>(0); this.recipientBcc = new ArrayList<>(0); this.attachments = new ArrayList<>(0); this.message = ""; } /** * The hostname of the Exchange Web Service. It will be used for * connecting with URI https://hostname/ews/exchange.asmx * * @param hostname the hostname of the MS Exchange Smtp Server. * @return the builder for chain usage. */ public ExchangeClientBuilder hostname(String hostname) { this.hostname = hostname; return this; } /** * The Exchange Web Server version. * * @param exchangeVersion the Exchange Web Server version. * @return the builder for chain usage. */ public ExchangeClientBuilder exchangeVersion(ExchangeVersion exchangeVersion) { this.exchangeVersion = exchangeVersion; return this; } /** * The domain of the MS Exchange Smtp Server. * * @param domain the domain of the Active Directory. The first part of * the username. For example: MYDOMAIN\\username, set the MYDOMAIN. * @return the builder for chain usage. */ public ExchangeClientBuilder domain(String domain) { this.domain = domain; return this; } /** * The username of the MS Exchange Smtp Server. The second part of the * username. For example: MYDOMAIN\\username, set the username. * * @param username the username of the MS Exchange Smtp Server. * @return the builder for chain usage. */ public ExchangeClientBuilder username(String username) { this.username = username; return this; } /** * The password of the MS Exchange Smtp Server. * * @param password the password of the MS Exchange Smtp Server. * @return the builder for chain usage. */ public ExchangeClientBuilder password(String password) { this.password = password; return this; } /** * The subject for this send. * * @param subject the subject for this send. * @return the builder for chain usage. */ public ExchangeClientBuilder subject(String subject) { this.subject = subject; return this; } /** * You can specify a list with email addresses that will be used as cc * for this email send. * * @param recipientTo the list with email addresses that will be used as * cc for this email send. * @return the builder for chain usage. */ public ExchangeClientBuilder recipientTo(List recipientTo) { this.recipientTo = recipientTo; return this; } /** * You can specify one or more email address that will be used as cc * recipients. * * @param recipientCc the first cc email address. * @param recipientsCc the other cc email address for this send. * @return the builder for chain usage. */ public ExchangeClientBuilder recipientCc(String recipientCc, String... recipientsCc) { // Prepare the list. List recipients = new ArrayList<>(1 + recipientsCc.length); recipients.add(recipientCc); recipients.addAll(Arrays.asList(recipientsCc)); // Set the list. this.recipientCc = recipients; return this; } /** * You can specify a list with email addresses that will be used as cc * for this email send. * * @param recipientCc the list with email addresses that will be used as * cc for this email send. * @return the builder for chain usage. */ public ExchangeClientBuilder recipientCc(List recipientCc) { this.recipientCc = recipientCc; return this; } /** * You can specify one or more email address that will be used as bcc * recipients. * * @param recipientBcc the first bcc email address. * @param recipientsBcc the other bcc email address for this send. * @return the builder for chain usage. */ public ExchangeClientBuilder recipientBcc(String recipientBcc, String... recipientsBcc) { // Prepare the list. List recipients = new ArrayList<>(1 + recipientsBcc.length); recipients.add(recipientBcc); recipients.addAll(Arrays.asList(recipientsBcc)); // Set the list. this.recipientBcc = recipients; return this; } /** * You can specify a list with email addresses that will be used as bcc * for this email send. * * @param recipientBcc the list with email addresses that will be used * as bcc for this email send. * @return the builder for chain usage. */ public ExchangeClientBuilder recipientBcc(List recipientBcc) { this.recipientBcc = recipientBcc; return this; } /** * You can specify one or more email address that will be used as cc * recipients. * * @param attachment the first attachment. * @param attachments the other attachments for this send. * @return the builder for chain usage. */ public ExchangeClientBuilder attachments(String attachment, String... attachments) { // Prepare the list. List attachmentsToUse = new ArrayList<>(1 + attachments.length); attachmentsToUse.add(attachment); attachmentsToUse.addAll(Arrays.asList(attachments)); // Set the list. this.attachments = attachmentsToUse; return this; } /** * You can specify a list with email attachments that will be used for * this email send. * * @param attachments the list with email attachments that will be used * for this email send. * @return the builder for chain usage. */ public ExchangeClientBuilder attachments(List attachments) { this.attachments = attachments; return this; } /** * The body of the email message. * * @param message the body of the email message. * @return the builder for chain usage. */ public ExchangeClientBuilder message(String message) { this.message = message; return this; } /** * Build a mail. * * @return an EmailApacheUtils object. */ public ExchangeClient build() { return new ExchangeClient(this); } } public boolean sendExchange() { // The Exchange Server Version. ExchangeService exchangeService = new ExchangeService(exchangeVersion); // Credentials to sign in the MS Exchange Server. ExchangeCredentials exchangeCredentials = new WebCredentials(username, password, domain); exchangeService.setCredentials(exchangeCredentials); // URL of exchange web service for the mailbox. try { exchangeService.setUrl(new URI("https://" + hostname + "/ews/Exchange.asmx")); } catch (URISyntaxException ex) { logger.info("An exception occurred while creating the uri for exchange service.", ex); return false; } // The email. EmailMessage emailMessage; try { emailMessage = new EmailMessage(exchangeService); emailMessage.setSubject(subject); emailMessage.setBody(MessageBody.getMessageBodyFromText(message)); } catch (Exception ex) { logger.info("An exception occurred while setting the email message.", ex); return false; } // TO recipient. for (String recipient : recipientTo) { try { // if(StringUtil.isEmpty(recipient)){ // continue; // } emailMessage.getToRecipients().add(recipient); } catch (ServiceLocalException ex) { logger.info("An exception occurred while sstting the TO recipient(" + recipient + ").", ex); return false; } } // CC recipient. for (String recipient : recipientCc) { try { if (EmptyUtil.isEmpty(recipient)) { continue; } emailMessage.getCcRecipients().add(recipient); } catch (ServiceLocalException ex) { logger.info("An exception occurred while sstting the CC recipient(" + recipient + ").", ex); return false; } } // BCC recipient for (String recipient : recipientBcc) { try { if (EmptyUtil.isEmpty(recipient)) { continue; } emailMessage.getBccRecipients().add(recipient); } catch (ServiceLocalException ex) { logger.info("An exception occurred while sstting the BCC recipient(" + recipient + ").", ex); return false; } } // Attachements. for (String attachmentPath : attachments) { try { emailMessage.getAttachments().addFileAttachment(attachmentPath); } catch (ServiceLocalException ex) { logger.info("An exception occurred while setting the attachment.", ex); return false; } } try { emailMessage.send(); logger.info("An email is send."); } catch (Exception ex) { logger.info("An exception occurred while sending an email.", ex); return false; } return true; } }
4.依赖
com.microsoft.ews-java-api ews-java-api 2.0
5.postmain的json
{
"recipientTo":["[email protected]","[email protected]"],
"recipientCc":["[email protected]"],
"subject":"wyj test mult man",
"message":"wyj content2",
"attachments":["http://10.101.8.48:50001/law/user1_NAVICAT%E6%8E%88%E6%9D%83%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C_1695781087467.pdf"]
}