001package ca.uhn.fhir.jpa.subscription.match.deliver.email; 002 003/*- 004 * #%L 005 * HAPI FHIR Subscription Server 006 * %% 007 * Copyright (C) 2014 - 2022 Smile CDR, Inc. 008 * %% 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 * #L% 021 */ 022 023import ca.uhn.fhir.rest.server.mail.IMailSvc; 024import ca.uhn.fhir.util.StopWatch; 025import org.apache.commons.lang3.Validate; 026import org.simplejavamail.api.email.Email; 027import org.slf4j.Logger; 028import org.slf4j.LoggerFactory; 029 030import javax.annotation.Nonnull; 031 032public class EmailSenderImpl implements IEmailSender { 033 034 private static final Logger ourLog = LoggerFactory.getLogger(EmailSenderImpl.class); 035 036 private final IMailSvc myMailSvc; 037 038 public EmailSenderImpl(@Nonnull IMailSvc theMailSvc) { 039 Validate.notNull(theMailSvc); 040 myMailSvc = theMailSvc; 041 } 042 043 @Override 044 public void send(EmailDetails theDetails) { 045 StopWatch stopWatch = new StopWatch(); 046 047 ourLog.info("Sending email for subscription {} from [{}] to recipients: [{}]", theDetails.getSubscriptionId(), theDetails.getFrom(), theDetails.getTo()); 048 049 Email email = theDetails.toEmail(); 050 051 myMailSvc.sendMail(email, 052 () -> ourLog.info("Done sending email for subscription {} from [{}] to recipients: [{}] (took {}ms)", 053 theDetails.getSubscriptionId(), theDetails.getFrom(), theDetails.getTo(), stopWatch.getMillis()), 054 (e) -> { 055 ourLog.error("Error sending email for subscription {} from [{}] to recipients: [{}] (took {}ms)", 056 theDetails.getSubscriptionId(), theDetails.getFrom(), theDetails.getTo(), stopWatch.getMillis()); 057 ourLog.error("Error sending email", e); 058 }); 059 } 060 061}