60 Transport transport = null;
64 Properties props =
new Properties();
66 if (config.containsKey(
"host")) {
67 props.setProperty(
"mail.smtp.host", config.get(
"host"));
70 boolean auth =
"true".equals(config.get(
"auth"));
71 boolean ssl =
"true".equals(config.get(
"ssl"));
72 boolean starttls =
"true".equals(config.get(
"starttls"));
74 if (config.containsKey(
"port") && config.get(
"port") != null) {
75 props.setProperty(
"mail.smtp.port", config.get(
"port"));
79 props.setProperty(
"mail.smtp.auth",
"true");
83 props.setProperty(
"mail.smtp.ssl.enable",
"true");
87 props.setProperty(
"mail.smtp.starttls.enable",
"true");
90 if (ssl || starttls) {
94 props.setProperty(
"mail.smtp.timeout",
"10000");
95 props.setProperty(
"mail.smtp.connectiontimeout",
"10000");
97 String from = config.get(
"from");
98 String fromDisplayName = config.get(
"fromDisplayName");
99 String replyTo = config.get(
"replyTo");
100 String replyToDisplayName = config.get(
"replyToDisplayName");
101 String envelopeFrom = config.get(
"envelopeFrom");
103 Session
session = Session.getInstance(props);
105 Multipart multipart =
new MimeMultipart(
"alternative");
107 if (textBody != null) {
108 MimeBodyPart textPart =
new MimeBodyPart();
109 textPart.setText(textBody,
"UTF-8");
110 multipart.addBodyPart(textPart);
113 if (htmlBody != null) {
114 MimeBodyPart htmlPart =
new MimeBodyPart();
115 htmlPart.setContent(htmlBody,
"text/html; charset=UTF-8");
116 multipart.addBodyPart(htmlPart);
119 SMTPMessage msg =
new SMTPMessage(session);
123 if (replyTo != null && !replyTo.isEmpty()) {
126 if (envelopeFrom != null && !envelopeFrom.isEmpty()) {
127 msg.setEnvelopeFrom(envelopeFrom);
130 msg.setHeader(
"To", address);
131 msg.setSubject(subject,
"utf-8");
132 msg.setContent(multipart);
134 msg.setSentDate(
new Date());
136 transport = session.getTransport(
"smtp");
138 transport.connect(config.get(
"user"), config.get(
"password"));
142 transport.sendMessage(msg,
new InternetAddress[]{
new InternetAddress(address)});
143 }
catch (Exception e) {
144 ServicesLogger.LOGGER.failedToSendEmail(e);
145 throw new EmailException(e);
147 if (transport != null) {
150 }
catch (MessagingException e) {
151 logger.warn(
"Failed to close transport", e);
final KeycloakSession session
Definition: DefaultEmailSenderProvider.java:52
static final Logger logger
Definition: DefaultEmailSenderProvider.java:50
void setupTruststore(Properties props)
Definition: DefaultEmailSenderProvider.java:171
String retrieveEmailAddress(UserModel user)
Definition: DefaultEmailSenderProvider.java:167
InternetAddress toInternetAddress(String email, String displayName)
Definition: DefaultEmailSenderProvider.java:157