Skip to content

Instantly share code, notes, and snippets.

@cptdanko
Last active February 9, 2025 04:23
Show Gist options
  • Save cptdanko/6a54ae27d8cc1c3874b6fd082d3ee7cc to your computer and use it in GitHub Desktop.
Save cptdanko/6a54ae27d8cc1c3874b6fd082d3ee7cc to your computer and use it in GitHub Desktop.
How to send an email in Java
public class MailService {
/**
* AES details
*/
@Autowired
private org.springframework.mail.javamail.JavaMailSender javaMailSender;
public ServiceResponse sendEmail(EmailRequest emailRequest) {
log.info("In the sendEmail function");
MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
StringBuilder builder = new StringBuilder();
builder.append(emailRequest.getBody());
try {
// if the email request contains any attachments, then send it
for (String filename : emailRequest.getFilesToAttach()) {
log.info("Filename is {}", filename);
org.springframework.mail.javamail.MimeMessageHelper messageHelper = new org.springframework.mail.javamail.MimeMessageHelper(mimeMailMessage, true);
byte[] fileData = s3Repository.getDataForFile(filename);
String name = filename.substring(filename.indexOf("/") + 1);
String extension = name.substring(name.lastIndexOf('.') + 1);
log.info("File extension is {}", extension);
ByteArrayResource fileDataResource = new ByteArrayResource(fileData);
messageHelper.addAttachment(name, fileDataResource);
messageHelper.setText(builder.toString(), true);
}
mimeMailMessage.setFrom("admin@mydaytodo.document-sharing.com");
mimeMailMessage.setSubject(emailRequest.getSubject());
addRecipients(Message.RecipientType.TO, new String[]{emailRequest.getTo()}, mimeMailMessage);
if(emailRequest.getCc() != null)
addRecipients(Message.RecipientType.CC, emailRequest.getCc(), mimeMailMessage);
if(emailRequest.getBcc() != null)
addRecipients(Message.RecipientType.BCC, emailRequest.getBcc(), mimeMailMessage);
javaMailSender.send(mimeMailMessage);
log.info("Sent email");
return ServiceResponse.builder()
.data(builder.toString())
.status(HttpStatus.SC_NO_CONTENT)
.build();
} catch (MailException e) {
log.error(e.getMessage());
log.error(e.getLocalizedMessage());
throw new RuntimeException(e.getMessage());
} catch (MessagingException me) {
log.error(me.getMessage());
log.info("Messaging exception occurred with {}", me.getLocalizedMessage());
throw new RuntimeException(me);
} catch (IOException ioe) {
log.error(ioe.getMessage());
log.info("IO exception occurred while sending mail {}", ioe.getLocalizedMessage());
throw new RuntimeException(ioe);
}
}
public void addRecipients(Message.RecipientType recipientType, String[] addresses, MimeMessage message) throws MessagingException, AssertionError {
assert addresses.length > 0;
jakarta.mail.internet.InternetAddress[] internetAddresses = new jakarta.mail.internet.InternetAddress[addresses.length];
int idx = 0;
for (String s : addresses) {
internetAddresses[idx] = new InternetAddress(s);
idx += 1;
}
message.setRecipients(recipientType, internetAddresses);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment