Fix Email Issues (#13962)

* - Added Unauthenticated Server Emails
- Removed redundant OM_URI
- Add Test Email in SystemResources

* remove default port

* remove fernet
This commit is contained in:
Mohit Yadav 2023-11-14 09:04:53 +05:30 committed by GitHub
parent e367f557a6
commit 2ae0333551
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 124 additions and 110 deletions

View File

@ -299,7 +299,7 @@ email:
emailingEntity: ${OM_EMAIL_ENTITY:-"OpenMetadata"}
supportUrl: ${OM_SUPPORT_URL:-"https://slack.open-metadata.org"}
enableSmtpServer : ${AUTHORIZER_ENABLE_SMTP:-false}
openMetadataUrl: ${OPENMETADATA_SERVER_URL:-""}
openMetadataUrl: ${OPENMETADATA_SERVER_URL:-"http://localhost:8585"}
senderMail: ${OPENMETADATA_SMTP_SENDER_MAIL:-""}
serverEndpoint: ${SMTP_SERVER_ENDPOINT:-""}
serverPort: ${SMTP_SERVER_PORT:-""}
@ -334,8 +334,4 @@ web:
permission-policy:
enabled: ${WEB_CONF_PERMISSION_POLICY_ENABLED:-false}
option: ${WEB_CONF_PERMISSION_POLICY_OPTION:-""}
changeEventConfig:
omUri: ${OM_URI:- "http://localhost:8585"} #openmetadata in om uri for eg http://localhost:8585

View File

@ -166,9 +166,6 @@ services:
SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""}
SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"}
#changeEventConfig
OM_URI: ${OM_URI:- "http://localhost:8585"}
#extensionConfiguration
OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]}
OM_EXTENSIONS: ${OM_EXTENSIONS:-[]}
@ -313,10 +310,7 @@ services:
SMTP_SERVER_USERNAME: ${SMTP_SERVER_USERNAME:-""}
SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""}
SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"}
#changeEventConfig
OM_URI: ${OM_URI:- "http://localhost:8585"}
#extensionConfiguration
OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]}
OM_EXTENSIONS: ${OM_EXTENSIONS:-[]}

View File

@ -164,10 +164,7 @@ services:
SMTP_SERVER_USERNAME: ${SMTP_SERVER_USERNAME:-""}
SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""}
SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"}
#changeEventConfig
OM_URI: ${OM_URI:- "http://localhost:8585"}
#extensionConfiguration
OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]}
OM_EXTENSIONS: ${OM_EXTENSIONS:-[]}
@ -315,9 +312,6 @@ services:
SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""}
SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"}
#changeEventConfig
OM_URI: ${OM_URI:- "http://localhost:8585"}
#extensionConfiguration
OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]}
OM_EXTENSIONS: ${OM_EXTENSIONS:-[]}

View File

@ -115,9 +115,6 @@ services:
SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""}
SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"}
#changeEventConfig
OM_URI: ${OM_URI:- "http://localhost:8585"}
#extensionConfiguration
OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]}
OM_EXTENSIONS: ${OM_EXTENSIONS:-[]}
@ -259,9 +256,6 @@ services:
SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""}
SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"}
#changeEventConfig
OM_URI: ${OM_URI:- "http://localhost:8585"}
#extensionConfiguration
OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]}
OM_EXTENSIONS: ${OM_EXTENSIONS:-[]}

View File

@ -82,15 +82,13 @@ OM_SM_ACCESS_KEY=""
OM_EMAIL_ENTITY="OpenMetadata"
OM_SUPPORT_URL="https://slack.open-metadata.org"
AUTHORIZER_ENABLE_SMTP="false"
OPENMETADATA_SERVER_URL=""
OPENMETADATA_SERVER_URL="http://localhost:8585"
OPENMETADATA_SMTP_SENDER_MAIL=""
SMTP_SERVER_ENDPOINT=""
SMTP_SERVER_PORT=""
SMTP_SERVER_USERNAME=""
SMTP_SERVER_PWD=""
SMTP_SERVER_STRATEGY="SMTP_TLS"
#changeEventConfig
OM_URI= "http://localhost:8585"
#extensionConfiguration
OM_RESOURCE_PACKAGES="[]"
OM_EXTENSIONS="[]"

View File

@ -82,15 +82,13 @@ OM_SM_ACCESS_KEY=""
OM_EMAIL_ENTITY="OpenMetadata"
OM_SUPPORT_URL="https://slack.open-metadata.org"
AUTHORIZER_ENABLE_SMTP="false"
OPENMETADATA_SERVER_URL=""
OPENMETADATA_SERVER_URL="http://localhost:8585"
OPENMETADATA_SMTP_SENDER_MAIL=""
SMTP_SERVER_ENDPOINT=""
SMTP_SERVER_PORT=""
SMTP_SERVER_USERNAME=""
SMTP_SERVER_PWD=""
SMTP_SERVER_STRATEGY="SMTP_TLS"
#changeEventConfig
OM_URI= "http://localhost:8585"
#extensionConfiguration
OM_RESOURCE_PACKAGES="[]"
OM_EXTENSIONS="[]"

View File

@ -158,10 +158,7 @@ services:
SMTP_SERVER_USERNAME: ${SMTP_SERVER_USERNAME:-""}
SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""}
SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"}
#changeEventConfig
OM_URI: ${OM_URI:- "http://localhost:8585"}
# Heap OPTS Configurations
OPENMETADATA_HEAP_OPTS: ${OPENMETADATA_HEAP_OPTS:--Xmx1G -Xms1G}
# Mask passwords values in UI
@ -304,9 +301,6 @@ services:
SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""}
SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"}
#changeEventConfig
OM_URI: ${OM_URI:- "http://localhost:8585"}
# Heap OPTS Configurations
OPENMETADATA_HEAP_OPTS: ${OPENMETADATA_HEAP_OPTS:--Xmx1G -Xms1G}
# Mask passwords values in UI

View File

@ -157,9 +157,6 @@ services:
SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""}
SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"}
#changeEventConfig
OM_URI: ${OM_URI:- "http://localhost:8585"}
# Heap OPTS Configurations
OPENMETADATA_HEAP_OPTS: ${OPENMETADATA_HEAP_OPTS:--Xmx1G -Xms1G}
# Mask passwords values in UI
@ -302,9 +299,6 @@ services:
SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""}
SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"}
#changeEventConfig
OM_URI: ${OM_URI:- "http://localhost:8585"}
# Heap OPTS Configurations
OPENMETADATA_HEAP_OPTS: ${OPENMETADATA_HEAP_OPTS:--Xmx1G -Xms1G}
# Mask passwords values in UI

View File

@ -1,23 +0,0 @@
package org.openmetadata.service;
import org.openmetadata.api.configuration.ChangeEventConfiguration;
public class ChangeEventConfig {
private static ChangeEventConfiguration instance;
private static volatile boolean initialized = false;
private ChangeEventConfig() {
/* Hide constructor for singleton */
}
public static void initialize(OpenMetadataApplicationConfig config) {
if (!initialized) {
instance = config.getChangeEventConfiguration();
initialized = true;
}
}
public static ChangeEventConfiguration getInstance() {
return instance;
}
}

View File

@ -132,7 +132,6 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
// init for dataSourceFactory
DatasourceConfig.initialize(catalogConfig.getDataSourceFactory().getDriverClass());
ChangeEventConfig.initialize(catalogConfig);
final Jdbi jdbi = createAndSetupJDBI(environment, catalogConfig.getDataSourceFactory());
CollectionDAO collectionDAO = jdbi.onDemand(CollectionDAO.class);
Entity.setCollectionDAO(collectionDAO);

View File

@ -22,7 +22,6 @@ import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import org.openmetadata.api.configuration.ChangeEventConfiguration;
import org.openmetadata.schema.api.configuration.events.EventHandlerConfiguration;
import org.openmetadata.schema.api.configuration.pipelineServiceClient.PipelineServiceClientConfiguration;
import org.openmetadata.schema.api.fernet.FernetConfiguration;
@ -94,9 +93,6 @@ public class OpenMetadataApplicationConfig extends Configuration {
@JsonProperty("web")
private OMWebConfiguration webConfiguration = new OMWebConfiguration();
@JsonProperty("changeEventConfig")
private ChangeEventConfiguration changeEventConfiguration;
@Override
public String toString() {
return "catalogConfig{"

View File

@ -15,12 +15,12 @@ package org.openmetadata.service.formatter.decorators;
import static org.openmetadata.service.events.subscription.AlertsRuleEvaluator.getEntity;
import static org.openmetadata.service.formatter.util.FormatterUtil.getFormattedMessages;
import static org.openmetadata.service.util.EmailUtil.getSmtpSettings;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.openmetadata.schema.type.ChangeEvent;
import org.openmetadata.service.ChangeEventConfig;
import org.openmetadata.service.Entity;
import org.openmetadata.service.events.subscription.email.EmailMessage;
import org.openmetadata.service.resources.feeds.MessageParser;
@ -59,7 +59,7 @@ public class EmailMessageDecorator implements MessageDecorator<EmailMessage> {
@Override
public String getEntityUrl(String entityType, String fqn) {
return String.format(
"<a href = '%s/%s/%s'>%s</a>", ChangeEventConfig.getInstance().getOmUri(), entityType, fqn.trim(), fqn.trim());
"<a href = '%s/%s/%s'>%s</a>", getSmtpSettings().getOpenMetadataUrl(), entityType, fqn.trim(), fqn.trim());
}
@Override

View File

@ -15,12 +15,12 @@ package org.openmetadata.service.formatter.decorators;
import static org.openmetadata.service.events.subscription.AlertsRuleEvaluator.getEntity;
import static org.openmetadata.service.formatter.util.FormatterUtil.getFormattedMessages;
import static org.openmetadata.service.util.EmailUtil.getSmtpSettings;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.openmetadata.schema.type.ChangeEvent;
import org.openmetadata.service.ChangeEventConfig;
import org.openmetadata.service.events.subscription.gchat.GChatMessage;
import org.openmetadata.service.resources.feeds.MessageParser;
@ -60,7 +60,7 @@ public class GChatMessageDecorator implements MessageDecorator<GChatMessage> {
public String getEntityUrl(String entityType, String fqn) {
return String.format(
"<%s/%s/%s|%s>",
ChangeEventConfig.getInstance().getOmUri(), entityType, fqn.trim().replace(" ", "%20"), fqn.trim());
getSmtpSettings().getOpenMetadataUrl(), entityType, fqn.trim().replace(" ", "%20"), fqn.trim());
}
@Override

View File

@ -15,12 +15,12 @@ package org.openmetadata.service.formatter.decorators;
import static org.openmetadata.service.events.subscription.AlertsRuleEvaluator.getEntity;
import static org.openmetadata.service.formatter.util.FormatterUtil.getFormattedMessages;
import static org.openmetadata.service.util.EmailUtil.getSmtpSettings;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.openmetadata.schema.type.ChangeEvent;
import org.openmetadata.service.ChangeEventConfig;
import org.openmetadata.service.events.subscription.msteams.TeamsMessage;
import org.openmetadata.service.resources.feeds.MessageParser;
@ -58,7 +58,7 @@ public class MSTeamsMessageDecorator implements MessageDecorator<TeamsMessage> {
@Override
public String getEntityUrl(String entityType, String fqn) {
return String.format("[%s](/%s/%s)", fqn.trim(), ChangeEventConfig.getInstance().getOmUri(), entityType);
return String.format("[%s](/%s/%s)", fqn.trim(), getSmtpSettings().getOpenMetadataUrl(), entityType);
}
@Override

View File

@ -15,13 +15,13 @@ package org.openmetadata.service.formatter.decorators;
import static org.openmetadata.service.events.subscription.AlertsRuleEvaluator.getEntity;
import static org.openmetadata.service.formatter.util.FormatterUtil.getFormattedMessages;
import static org.openmetadata.service.util.EmailUtil.getSmtpSettings;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.openmetadata.schema.tests.TestCase;
import org.openmetadata.schema.type.ChangeEvent;
import org.openmetadata.service.ChangeEventConfig;
import org.openmetadata.service.Entity;
import org.openmetadata.service.events.subscription.slack.SlackAttachment;
import org.openmetadata.service.events.subscription.slack.SlackMessage;
@ -62,7 +62,7 @@ public class SlackMessageDecorator implements MessageDecorator<SlackMessage> {
public String getEntityUrl(String entityType, String fqn) {
return String.format(
"<%s/%s/%s|%s>",
ChangeEventConfig.getInstance().getOmUri(), entityType, fqn.trim().replaceAll(" ", "%20"), fqn.trim());
getSmtpSettings().getOpenMetadataUrl(), entityType, fqn.trim().replaceAll(" ", "%20"), fqn.trim());
}
@Override

View File

@ -1,5 +1,6 @@
package org.openmetadata.service.resources.system;
import freemarker.template.TemplateException;
import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
@ -10,6 +11,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException;
import javax.json.JsonPatch;
import javax.validation.Valid;
import javax.ws.rs.Consumes;
@ -38,6 +40,7 @@ import org.openmetadata.service.jdbi3.ListFilter;
import org.openmetadata.service.jdbi3.SystemRepository;
import org.openmetadata.service.resources.Collection;
import org.openmetadata.service.security.Authorizer;
import org.openmetadata.service.util.EmailUtil;
import org.openmetadata.service.util.ResultList;
@Path("/v1/system")
@ -123,6 +126,25 @@ public class SystemResource {
return systemRepository.createOrUpdate(settingName);
}
@PUT
@Path("/email/test")
@Operation(
operationId = "sendTestEmail",
summary = "Sends a Test Email",
description = "Sends a Test Email with Provided Settings",
responses = {
@ApiResponse(
responseCode = "200",
description = "EmailTest",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = String.class)))
})
public Response sendTestEmail(@Context UriInfo uriInfo, @Context SecurityContext securityContext, String email)
throws TemplateException, IOException {
authorizer.authorizeAdmin(securityContext);
EmailUtil.sendTestEmail(email);
return Response.status(Response.Status.OK).entity("Test Email Sent Successfully.").build();
}
@PATCH
@Path("/settings/{settingName}")
@Operation(

View File

@ -29,6 +29,7 @@ import static org.openmetadata.service.exception.CatalogExceptionMessage.MAX_FAI
import static org.openmetadata.service.exception.CatalogExceptionMessage.SELF_SIGNUP_ERROR;
import static org.openmetadata.service.exception.CatalogExceptionMessage.TOKEN_EXPIRY_ERROR;
import static org.openmetadata.service.resources.teams.UserResource.USER_PROTECTED_FIELDS;
import static org.openmetadata.service.util.EmailUtil.getSmtpSettings;
import at.favre.lib.crypto.bcrypt.BCrypt;
import freemarker.template.TemplateException;
@ -166,7 +167,7 @@ public class BasicAuthenticator implements AuthenticatorHandler {
String emailVerificationLink =
String.format(
"%s/users/registrationConfirmation?user=%s&token=%s",
EmailUtil.buildBaseUrl(uriInfo.getRequestUri()), user.getFullyQualifiedName(), mailVerificationToken);
getSmtpSettings().getOpenMetadataUrl(), user.getFullyQualifiedName(), mailVerificationToken);
try {
EmailUtil.sendEmailVerification(emailVerificationLink, user);
} catch (TemplateException e) {
@ -187,7 +188,7 @@ public class BasicAuthenticator implements AuthenticatorHandler {
String passwordResetLink =
String.format(
"%s/users/password/reset?user=%s&token=%s",
EmailUtil.buildBaseUrl(uriInfo.getRequestUri()), user.getFullyQualifiedName(), mailVerificationToken);
getSmtpSettings().getOpenMetadataUrl(), user.getFullyQualifiedName(), mailVerificationToken);
try {
EmailUtil.sendPasswordResetLink(passwordResetLink, user, subject, templateFilePath);
} catch (TemplateException e) {

View File

@ -23,7 +23,6 @@ import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.IOException;
import java.io.StringWriter;
import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
@ -78,9 +77,10 @@ public class EmailUtil {
public static final String CHANGE_EVENT_TEMPLATE = "changeEvent.ftl";
public static final String INVITE_CREATE_PWD = "invite-createPassword.ftl";
public static final String TASK_NOTIFICATION_TEMPLATE = "taskAssignment.ftl";
private static final String REPORT_SUBJECT = "%s: Data Insights Weekly - %s";
public static final String DATA_INSIGHT_REPORT_TEMPLATE = "dataInsightReport.ftl";
public static final String TEST_EMAIL_TEMPLATE = "testMail.ftl";
public static final String TEST_EMAIL_SUBJECT = "%s : Test Email";
private static SmtpSettings storedSmtpSettings;
private static Mailer mailer;
private static final Configuration templateConfiguration = new Configuration(VERSION_2_3_28);
@ -110,11 +110,12 @@ public class EmailUtil {
strategy = SMTP;
break;
}
String username =
CommonUtil.nullOrEmpty(smtpServerSettings.getUsername()) ? null : smtpServerSettings.getUsername();
String password =
CommonUtil.nullOrEmpty(smtpServerSettings.getPassword()) ? null : smtpServerSettings.getPassword();
return MailerBuilder.withSMTPServer(
smtpServerSettings.getServerEndpoint(),
smtpServerSettings.getServerPort(),
smtpServerSettings.getUsername(),
smtpServerSettings.getPassword())
smtpServerSettings.getServerEndpoint(), smtpServerSettings.getServerPort(), username, password)
.withTransportStrategy(strategy)
.buildMailer();
}
@ -246,19 +247,6 @@ public class EmailUtil {
}
}
public static String buildBaseUrl(URI uri) {
try {
if (CommonUtil.nullOrEmpty(getSmtpSettings().getOpenMetadataUrl())) {
return String.format("%s://%s", uri.getScheme(), uri.getHost());
} else {
URI serverUrl = new URI(getSmtpSettings().getOpenMetadataUrl());
return String.format("%s://%s", serverUrl.getScheme(), serverUrl.getHost());
}
} catch (Exception ex) {
throw new IllegalArgumentException("Missing URI info from URI and SMTP settings.");
}
}
public static void sendInviteMailToAdmin(User user, String pwd) {
if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) {
Map<String, Object> templatePopulator = new HashMap<>();
@ -330,6 +318,18 @@ public class EmailUtil {
}
}
public static void sendTestEmail(String email) throws IOException, TemplateException {
if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) {
Map<String, Object> templatePopulator = new HashMap<>();
templatePopulator.put("userName", email.split("@")[0]);
templatePopulator.put("entity", getSmtpSettings().getEmailingEntity());
templatePopulator.put("supportUrl", getSmtpSettings().getSupportUrl());
sendMail(getTestEmailSubject(), templatePopulator, email, EMAIL_TEMPLATE_BASEPATH, TEST_EMAIL_TEMPLATE);
} else {
LOG.warn(EMAIL_IGNORE_MSG, email);
}
}
public static void testConnection() {
mailer.testConnection();
}
@ -358,6 +358,10 @@ public class EmailUtil {
return String.format(TASK_SUBJECT, getSmtpSettings().getEmailingEntity());
}
public static String getTestEmailSubject() {
return String.format(TEST_EMAIL_SUBJECT, getSmtpSettings().getEmailingEntity());
}
public static String getDataInsightReportSubject() {
return String.format(
REPORT_SUBJECT, getSmtpSettings().getEmailingEntity(), new SimpleDateFormat("dd-MM-yy").format(new Date()));
@ -375,7 +379,7 @@ public class EmailUtil {
return getSmtpSettings().getOpenMetadataUrl();
}
private static SmtpSettings getSmtpSettings() {
public static SmtpSettings getSmtpSettings() {
SmtpSettings emailConfig = SettingsCache.getSetting(SettingsType.EMAIL_CONFIGURATION, SmtpSettings.class);
if (!emailConfig.equals(storedSmtpSettings)) {
storedSmtpSettings = emailConfig;

View File

@ -15,6 +15,7 @@ package org.openmetadata.service.util;
import static org.openmetadata.service.Entity.TEAM;
import static org.openmetadata.service.Entity.USER;
import static org.openmetadata.service.util.EmailUtil.getSmtpSettings;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -162,7 +163,7 @@ public class NotificationHandler {
EmailUtil.sendTaskAssignmentNotificationToUser(
user.getName(),
user.getEmail(),
String.format("%s/users/%s/tasks", EmailUtil.buildBaseUrl(urlInstance), user.getName()),
String.format("%s/users/%s/tasks", getSmtpSettings().getOpenMetadataUrl(), user.getName()),
thread,
EmailUtil.getTaskAssignmentSubject(),
EmailUtil.TASK_NOTIFICATION_TEMPLATE);

View File

@ -126,11 +126,6 @@ public class PaginatedEntitiesSource implements Source<ResultList<? extends Enti
getUpdatedStats(stats, currentSuccess, currentFailed);
}
@Override
public StepStats getStats() {
return stats;
}
public String getLastFailedCursor() {
return lastFailedCursor;
}

View File

@ -0,0 +1,57 @@
<!-- [if !mso]>
<!-->
<!--![endif]-->
<!-- Normalize Styles -->
<!-- [if gte mso 9]>
<style type="text/css">
/* What it does: Normalize space between bullets and text. */
/* https://litmus.com/community/discussions/1093-bulletproof-lists-using-ul-and-li */
li {
text-indent: -1em;
}
</style>
<![endif]-->
<div style="display: none; font-size: 1px; line-height: 1px; max-height: 0; max-width: 0; opacity: 0; overflow: hidden; mso-hide: all; font-family: sans-serif;"> &nbsp; </div>
<table style="background: #F7F8FA; border: 0; border-radius: 0; width: 100%;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="tw-body" style="padding: 15px 15px 0;" align="center">
<table style="background: #F7F8FA; border: 0; border-radius: 0;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="" style="width: 600px;" align="center">
<p style="padding: 5px 5px 5px; font-size: 13px; margin: 0 0 0px; color: #316fea;" align="right"></p>
<table style="background: #ffffff; border: 0px; border-radius: 4px; width: 99.6672%; overflow: hidden;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="" style="padding: 0px; width: 100%;" align="center">
<table style="background: #336f85; border: 0px; border-radius: 0px; width: 599px; height: 53px; margin-left: auto; margin-right: auto;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="tw-card-header" style="padding: 5px 5px px; width: 366px; color: #ffff; text-decoration: none; font-family: sans-serif;" align="center">
<span style="font-weight: 600;">Email Test</span>
</td>
</tr>
</tbody>
</table>
<p>
<br />
<br />
</p>
<table dir="ltr" style="border: 0; width: 100%;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="tw-card-body" style="padding: 20px 35px; text-align: left; color: #6f6f6f; font-family: sans-serif; border-top: 0;">
<h1 class="tw-h1" style="font-size: 24px; font-weight: bold; mso-line-height-rule: exactly; line-height: 32px; margin: 0 0 20px; color: #474747;"> Hi ${userName},</h1>
<br />
<span style="font-weight: 400;">This is a Test Email, receiving this Email Confirms that you have successfully configured OpenMetadata to send Mails.</span>
<p class="" style="margin: 20px 0; font-size: 16px; mso-line-height-rule: exactly; line-height: 24px;"> Feel free to reachout to us on&nbsp; <a style="color: #316fea; text-decoration: none;" href="${supportUrl}" target="_blank" rel="noopener">Slack</a>&nbsp;for any questions you may have. </p>
<p class="tw-signoff" style="margin: 45px 0 5px; font-size: 16px; mso-line-height-rule: exactly; line-height: 24px;"> Thanks, <br />The ${entity} Team </p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>

View File

@ -216,7 +216,7 @@ email:
enableSmtpServer : false
emailingEntity: ""
supportUrl: ""
openMetadataUrl: ""
openMetadataUrl: "http://localhost:8585"
senderMail: ""
serverEndpoint: ""
serverPort: ""