Skip to content

Commit 7251c17

Browse files
Added Email config
1 parent 1168053 commit 7251c17

5 files changed

Lines changed: 169 additions & 22 deletions

File tree

pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,10 @@
209209
<version>12.14.4</version>
210210
</dependency>
211211
<!-- Azure Dependencies - End -->
212+
<dependency>
213+
<groupId>org.springframework.boot</groupId>
214+
<artifactId>spring-boot-starter-mail</artifactId>
215+
</dependency>
212216
</dependencies>
213217

214218
<!-- <build> -->
Lines changed: 48 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.uci.utils;
22

33
import java.time.Duration;
4-
import java.util.UUID;
4+
import java.util.Properties;
55

66
import org.springframework.beans.factory.annotation.Value;
77
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -11,13 +11,13 @@
1111
import org.springframework.data.redis.core.RedisTemplate;
1212
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
1313
import org.springframework.data.redis.serializer.StringRedisSerializer;
14+
import org.springframework.mail.javamail.JavaMailSender;
15+
import org.springframework.mail.javamail.JavaMailSenderImpl;
1416
import org.springframework.web.reactive.function.client.WebClient;
1517

1618
import com.github.benmanes.caffeine.cache.Cache;
1719
import com.github.benmanes.caffeine.cache.Caffeine;
1820

19-
import io.fusionauth.client.FusionAuthClient;
20-
import io.fusionauth.domain.api.LoginRequest;
2121

2222
@Configuration
2323
@EnableAutoConfiguration
@@ -31,19 +31,28 @@ public class UtilAppConfiguration {
3131

3232
@Value("${caffeine.cache.max.size}")
3333
public Integer cacheMaxSize;
34-
34+
3535
@Value("${caffeine.cache.exprie.duration.seconds}")
3636
public Integer cacheExpireDuration;
37-
37+
3838
@Value("${spring.redis.db}")
3939
private String redisDb;
40-
40+
4141
@Value("${spring.redis.host}")
4242
private String redisHost;
43-
4443
@Value("${spring.redis.number.port}")
4544
private String redisPort;
46-
45+
46+
// Email Config
47+
@Value("${spring.mail.port}")
48+
private String mailPort;
49+
@Value("${spring.mail.host}")
50+
private String mailHost;
51+
@Value("${spring.mail.username}")
52+
private String mailUsername;
53+
@Value("${spring.mail.password}")
54+
private String mailPassword;
55+
4756
public Caffeine<Object, Object> caffeineCacheBuilder() {
4857
return Caffeine.newBuilder()
4958
.maximumSize(cacheMaxSize)
@@ -60,27 +69,44 @@ public Cache<Object, Object> cache() {
6069
public WebClient getWebClient() {
6170
return WebClient.builder().baseUrl(CAMPAIGN_URL).defaultHeader("admin-token", CAMPAIGN_ADMIN_TOKEN).build();
6271
}
63-
72+
6473
@SuppressWarnings("ALL")
6574
@Bean
6675
JedisConnectionFactory jedisConnectionFactory() {
6776
JedisConnectionFactory jedisConFactory
68-
= new JedisConnectionFactory();
69-
System.out.println("redisPort:"+redisPort+",redisDb: "+redisDb+", redisHost: "+redisHost);
70-
jedisConFactory.setHostName(redisHost);
71-
Integer port = Integer.parseInt(redisPort);
72-
jedisConFactory.setPort(port);
73-
Integer dbIndex = Integer.parseInt(redisDb);
74-
jedisConFactory.setDatabase(dbIndex);
75-
return jedisConFactory;
77+
= new JedisConnectionFactory();
78+
System.out.println("redisPort:"+redisPort+",redisDb: "+redisDb+", redisHost: "+redisHost);
79+
jedisConFactory.setHostName(redisHost);
80+
Integer port = Integer.parseInt(redisPort);
81+
jedisConFactory.setPort(port);
82+
Integer dbIndex = Integer.parseInt(redisDb);
83+
jedisConFactory.setDatabase(dbIndex);
84+
return jedisConFactory;
7685
}
7786

7887
@Bean
7988
public RedisTemplate<String, Object> redisTemplate() {
80-
RedisTemplate<String, Object> template = new RedisTemplate<>();
81-
template.setConnectionFactory(jedisConnectionFactory());
82-
template.setKeySerializer(new StringRedisSerializer());
83-
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
84-
return template;
89+
RedisTemplate<String, Object> template = new RedisTemplate<>();
90+
template.setConnectionFactory(jedisConnectionFactory());
91+
template.setKeySerializer(new StringRedisSerializer());
92+
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
93+
return template;
94+
}
95+
96+
@Bean
97+
public JavaMailSender getJavaMailSender() {
98+
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
99+
mailSender.setHost(mailHost);
100+
mailSender.setPort(Integer.parseInt(mailPort));
101+
mailSender.setUsername(mailUsername);
102+
mailSender.setPassword(mailPassword);
103+
104+
Properties props = mailSender.getJavaMailProperties();
105+
props.put("mail.transport.protocol", "smtp");
106+
props.put("mail.smtp.auth", "true");
107+
props.put("mail.smtp.starttls.enable", "true");
108+
props.put("mail.debug", "true");
109+
return mailSender;
110+
85111
}
86112
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.uci.utils.model;
2+
3+
import lombok.*;
4+
5+
@Data
6+
@AllArgsConstructor
7+
@NoArgsConstructor
8+
@ToString
9+
@Builder
10+
public class EmailDetails {
11+
private String recipient;
12+
private String msgBody;
13+
private String subject;
14+
private String attachment;
15+
private String attachmentFileName;
16+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.uci.utils.service;
2+
3+
4+
import com.uci.utils.model.EmailDetails;
5+
6+
public interface EmailService {
7+
public void sendSimpleMail(EmailDetails details);
8+
9+
public void sendMailWithAttachment(EmailDetails details);
10+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.uci.utils.service;
2+
3+
4+
import com.uci.utils.model.EmailDetails;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.beans.factory.annotation.Value;
8+
import org.springframework.core.io.FileSystemResource;
9+
import org.springframework.mail.SimpleMailMessage;
10+
import org.springframework.mail.javamail.JavaMailSender;
11+
import org.springframework.mail.javamail.MimeMessageHelper;
12+
import org.springframework.stereotype.Service;
13+
14+
import javax.mail.internet.MimeMessage;
15+
import java.io.File;
16+
import java.io.IOException;
17+
import java.nio.charset.StandardCharsets;
18+
import java.nio.file.Files;
19+
import java.nio.file.Path;
20+
import java.nio.file.Paths;
21+
22+
@Service
23+
@Slf4j
24+
public class EmailServiceImpl implements EmailService {
25+
@Autowired
26+
private JavaMailSender javaMailSender;
27+
28+
@Value("${spring.mail.username}")
29+
private String sender;
30+
31+
public void sendSimpleMail(EmailDetails details) {
32+
try {
33+
SimpleMailMessage mailMessage = new SimpleMailMessage();
34+
mailMessage.setFrom(sender);
35+
mailMessage.setTo(details.getRecipient());
36+
mailMessage.setText(details.getMsgBody());
37+
mailMessage.setSubject(details.getSubject());
38+
javaMailSender.send(mailMessage);
39+
log.info("Mail Sent Successfully...");
40+
} catch (Exception e) {
41+
log.error("Error while Sending Mail" + e.getMessage());
42+
}
43+
}
44+
45+
public void sendMailWithAttachment(EmailDetails details) {
46+
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
47+
MimeMessageHelper mimeMessageHelper;
48+
String tempPath = "/tmp/" + details.getAttachmentFileName();
49+
File file = new File(tempPath);
50+
try {
51+
mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
52+
mimeMessageHelper.setFrom(sender);
53+
if (details.getRecipient().contains(",")) {
54+
String recipients[] = details.getRecipient().split(",");
55+
mimeMessageHelper.setTo(recipients);
56+
} else {
57+
mimeMessageHelper.setTo(details.getRecipient());
58+
}
59+
mimeMessageHelper.setText(details.getMsgBody());
60+
mimeMessageHelper.setSubject(details.getSubject());
61+
createTempFile(details.getAttachment(), tempPath);
62+
FileSystemResource fileSystemResource = new FileSystemResource(file);
63+
mimeMessageHelper.addAttachment(fileSystemResource.getFilename(), file);
64+
javaMailSender.send(mimeMessage);
65+
log.info("Mail sent Successfully...");
66+
} catch (Exception e) {
67+
log.error("Error while sending mail!!! " + e.getMessage());
68+
} finally {
69+
if (file.exists() && file.delete()) {
70+
log.info("file deleted : " + file.getPath());
71+
}
72+
}
73+
}
74+
75+
// public void sendMailWithAttachment(String subject, String body, String recipient, XMessage xMessage, String attachmentFileName) {
76+
// EmailDetails emailDetails = new EmailDetails();
77+
// emailDetails.setSubject(subject);
78+
// emailDetails.setMsgBody(body);
79+
// emailDetails.setRecipient(recipient);
80+
// emailDetails.setAttachment(xMessage.toString());
81+
// emailDetails.setAttachmentFileName(attachmentFileName);
82+
// log.info("EmailDetails :" + emailDetails);
83+
// sendMailWithAttachment(emailDetails);
84+
// }
85+
86+
private void createTempFile(String fileData, String filePath) throws IOException {
87+
Path path = Paths.get(filePath);
88+
Files.writeString(path, fileData, StandardCharsets.UTF_8);
89+
log.info("Email attachment temp file is created : " + filePath);
90+
}
91+
}

0 commit comments

Comments
 (0)