opends/resource/config/config.ldif
@@ -95,7 +95,19 @@ objectClass: ds-cfg-alert-handler cn: JMX Alert Handler ds-cfg-alert-handler-class: org.opends.server.extensions.JMXAlertHandler ds-cfg-alert-handler-enabled: true dn: cn=SMTP Alert Handler,cn=Alert Handlers,cn=config objectClass: top objectClass: ds-cfg-alert-handler objectClass: ds-cfg-smtp-alert-handler cn: JMX Alert Handler ds-cfg-alert-handler-class: org.opends.server.extensions.SMTPAlertHandler ds-cfg-alert-handler-enabled: false ds-cfg-sender-address: opends-alerts@example.com ds-cfg-recipient-address: directory-administrators@example.com ds-cfg-message-subject: OpenDS Alert %%alert-type%% ds-cfg-message-body: Alert Type: %%alert-type%%\n\nAlert ID: %%alert-id%%\n\nAlert Message: %%alert-message%% dn: cn=Backends,cn=config objectClass: top opends/resource/schema/02-config.ldif
@@ -1477,12 +1477,26 @@ X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.443 NAME 'ds-cfg-state-update-failure-policy' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'OpenDS Directory Server' ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.444 NAME 'ds-cfg-password-history-count' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 X-ORIGIN 'OpenDS Directory Server' ) SINGLE-VALUE X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.445 NAME 'ds-cfg-password-history-duration' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.446 NAME 'ds-cfg-smtp-server' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.447 NAME 'ds-cfg-sender-address' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.448 NAME 'ds-cfg-recipient-address' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.449 NAME 'ds-cfg-message-subject' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.450 NAME 'ds-cfg-message-body' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'OpenDS Directory Server' ) objectClasses: ( 1.3.6.1.4.1.26027.1.2.1 NAME 'ds-cfg-access-control-handler' SUP top STRUCTURAL @@ -1697,8 +1711,8 @@ ds-cfg-notify-abandoned-operations $ ds-cfg-size-limit $ ds-cfg-time-limit $ ds-cfg-proxied-authorization-identity-mapper-dn $ ds-cfg-writability-mode $ ds-cfg-reject-unauthenticated-requests $ ds-cfg-bind-with-dn-requires-password $ ds-cfg-lookthrough-limit ) X-ORIGIN 'OpenDS Directory Server' ) ds-cfg-bind-with-dn-requires-password $ ds-cfg-lookthrough-limit $ ds-cfg-smtp-server ) X-ORIGIN 'OpenDS Directory Server' ) objectClasses: ( 1.3.6.1.4.1.26027.1.2.41 NAME 'ds-cfg-root-dn' SUP top AUXILIARY MAY ds-cfg-alternate-bind-dn X-ORIGIN 'OpenDS Directory Server' ) objectClasses: ( 1.3.6.1.4.1.26027.1.2.42 NAME 'ds-cfg-root-dse' @@ -2089,4 +2103,9 @@ MAY ( ds-cfg-default-user-password-storage-scheme $ ds-cfg-default-auth-password-storage-scheme ) X-ORIGIN 'OpenDS Directory Server' ) objectClasses: ( 1.3.6.1.4.1.26027.1.2.118 NAME 'ds-cfg-smtp-alert-handler' SUP ds-cfg-alert-handler STRUCTURAL MUST ( ds-cfg-sender-address $ ds-cfg-recipient-address $ ds-cfg-message-subject $ ds-cfg-message-body ) X-ORIGIN 'OpenDS Directory Server' ) opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml
@@ -475,5 +475,31 @@ </adm:profile> </adm:property> <adm:property name="smtp-server" mandatory="false" multi-valued="true"> <adm:synopsis> Specifies the address (and optional port number) for a mail server that can be used to send e-mail messages via SMTP. It may be an IP address or resolvable hostname, optionally followed by a colon and a port number. </adm:synopsis> <adm:default-behavior> <adm:alias> <adm:synopsis> If no values are defined, then it will not be possible to take advantage of server features that may provide thea bility to send e-mail via SMTP. </adm:synopsis> </adm:alias> </adm:default-behavior> <adm:syntax> <adm:string /> </adm:syntax> <adm:profile name="ldap"> <ldap:attribute> <ldap:oid>1.3.6.1.4.1.26027.1.1.446</ldap:oid> <ldap:name>ds-cfg-smtp-server</ldap:name> </ldap:attribute> </adm:profile> </adm:property> </adm:managed-object> opends/src/admin/defn/org/opends/server/admin/std/SMTPAlertHandlerConfiguration.xml
New file @@ -0,0 +1,133 @@ <?xml version="1.0" encoding="utf-8"?> <!-- ! CDDL HEADER START ! ! The contents of this file are subject to the terms of the ! Common Development and Distribution License, Version 1.0 only ! (the "License"). You may not use this file except in compliance ! with the License. ! ! You can obtain a copy of the license at ! trunk/opends/resource/legal-notices/OpenDS.LICENSE ! or https://OpenDS.dev.java.net/OpenDS.LICENSE. ! See the License for the specific language governing permissions ! and limitations under the License. ! ! When distributing Covered Code, include this CDDL HEADER in each ! file and include the License file at ! trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, ! add the following below this CDDL HEADER, with the fields enclosed ! by brackets "[]" replaced with your own identifying information: ! Portions Copyright [yyyy] [name of copyright owner] ! ! CDDL HEADER END ! ! ! Portions Copyright 2007 Sun Microsystems, Inc. ! --> <adm:managed-object name="smtp-alert-handler" plural-name="smtp-alert-handlers" package="org.opends.server.admin.std" extends="alert-handler" xmlns:adm="http://www.opends.org/admin" xmlns:ldap="http://www.opends.org/admin-ldap"> <adm:synopsis> The <adm:user-friendly-name /> may be used to send e-mail messages to notify administrators of significant events that occur within the server. </adm:synopsis> <adm:profile name="ldap"> <ldap:object-class> <ldap:oid>1.3.6.1.4.1.26027.1.2.118</ldap:oid> <ldap:name>ds-cfg-smtp-alert-handler</ldap:name> <ldap:superior>ds-cfg-alert-handler</ldap:superior> </ldap:object-class> </adm:profile> <adm:property-override name="alert-handler-class"> <adm:default-behavior> <adm:defined> <adm:value> org.opends.server.extensions.SMTPAlertHandler </adm:value> </adm:defined> </adm:default-behavior> </adm:property-override> <adm:property name="sender-address" mandatory="true" multi-valued="false"> <adm:synopsis> Specifies the e-mail address to use as the sender for messages generated by this alert handler. </adm:synopsis> <adm:syntax> <adm:string /> </adm:syntax> <adm:profile name="ldap"> <ldap:attribute> <ldap:oid>1.3.6.1.4.1.26027.1.1.447</ldap:oid> <ldap:name>ds-cfg-sender-address</ldap:name> </ldap:attribute> </adm:profile> </adm:property> <adm:property name="recipient-address" mandatory="true" multi-valued="true"> <adm:synopsis> Specifies an e-mail address to which the messages should be sent. Multiple values may be provided if there should be more than one recipient. </adm:synopsis> <adm:syntax> <adm:string /> </adm:syntax> <adm:profile name="ldap"> <ldap:attribute> <ldap:oid>1.3.6.1.4.1.26027.1.1.448</ldap:oid> <ldap:name>ds-cfg-recipient-address</ldap:name> </ldap:attribute> </adm:profile> </adm:property> <adm:property name="message-subject" mandatory="true" multi-valued="false"> <adm:synopsis> Specifies the subject that should be used for e-mail messsages generated by this alert handler. The token "%%alert-type%%" will be dynamically replaced with the alert type string. The token "%%alert-id%%" will be dynamically replaced with the alert ID value. The token "%%alert-message%%" will be dynamically replaced with the alert message. The token "\n" will be replaced with an end-of-line marker. </adm:synopsis> <adm:syntax> <adm:string /> </adm:syntax> <adm:profile name="ldap"> <ldap:attribute> <ldap:oid>1.3.6.1.4.1.26027.1.1.449</ldap:oid> <ldap:name>ds-cfg-message-subject</ldap:name> </ldap:attribute> </adm:profile> </adm:property> <adm:property name="message-body" mandatory="true" multi-valued="false"> <adm:synopsis> Specifies the body that should be used for e-mail messsages generated by this alert handler. The token "%%alert-type%%" will be dynamically replaced with the alert type string. The token "%%alert-id%%" will be dynamically replaced with the alert ID value. The token "%%alert-message%%" will be dynamically replaced with the alert message. The token "\n" will be replaced with an end-of-line marker. </adm:synopsis> <adm:syntax> <adm:string /> </adm:syntax> <adm:profile name="ldap"> <ldap:attribute> <ldap:oid>1.3.6.1.4.1.26027.1.1.450</ldap:oid> <ldap:name>ds-cfg-message-body</ldap:name> </ldap:attribute> </adm:profile> </adm:property> </adm:managed-object> opends/src/server/org/opends/server/core/CoreConfigManager.java
@@ -30,6 +30,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.Set; import org.opends.server.admin.server.ConfigurationChangeListener; import org.opends.server.admin.std.server.GlobalCfg; @@ -46,6 +48,7 @@ import static org.opends.server.messages.ConfigMessages.*; import static org.opends.server.messages.MessageHandler.*; import static org.opends.server.util.ServerConstants.*; @@ -88,10 +91,50 @@ managementContext.getRootConfiguration(); // Get the global configuration, register with it as a change listener, and // apply the configuration to the server. // Get the global configuration and register with it as a change listener. GlobalCfg globalConfig = rootConfiguration.getGlobalConfiguration(); globalConfig.addChangeListener(this); // If there are any STMP servers specified, then make sure that if the value // contains a colon that the portion after it is an integer between 1 and // 65535. Set<String> smtpServers = globalConfig.getSMTPServer(); if (smtpServers != null) { for (String server : smtpServers) { int colonPos = server.indexOf(':'); if ((colonPos == 0) || (colonPos == (server.length()-1))) { int msgID = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER; String message = getMessage(msgID, server); throw new ConfigException(msgID, message); } else if (colonPos > 0) { try { int port = Integer.parseInt(server.substring(colonPos+1)); if ((port < 1) || (port > 65535)) { int msgID = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER; String message = getMessage(msgID, server); throw new ConfigException(msgID, message); } } catch (Exception e) { int msgID = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER; String message = getMessage(msgID, server); throw new ConfigException(msgID, message, e); } } } } // Apply the configuration to the server. applyGlobalConfiguration(globalConfig); } @@ -180,6 +223,34 @@ globalConfig.isBindWithDNRequiresPassword()); DirectoryServer.setLookthroughLimit(globalConfig.getLookthroughLimit()); ArrayList<Properties> mailServerProperties = new ArrayList<Properties>(); Set<String> smtpServers = globalConfig.getSMTPServer(); if ((smtpServers != null) && (! smtpServers.isEmpty())) { for (String smtpServer : smtpServers) { int colonPos = smtpServer.indexOf(':'); if (colonPos > 0) { String smtpHost = smtpServer.substring(0, colonPos); String smtpPort = smtpServer.substring(colonPos+1); Properties properties = new Properties(); properties.setProperty(SMTP_PROPERTY_HOST, smtpHost); properties.setProperty(SMTP_PROPERTY_PORT, smtpPort); mailServerProperties.add(properties); } else { Properties properties = new Properties(); properties.setProperty(SMTP_PROPERTY_HOST, smtpServer); mailServerProperties.add(properties); } } } DirectoryServer.setMailServerPropertySets(mailServerProperties); } @@ -217,6 +288,43 @@ configAcceptable = false; } Set<String> smtpServers = configuration.getSMTPServer(); if (smtpServers != null) { for (String server : smtpServers) { int colonPos = server.indexOf(':'); if ((colonPos == 0) || (colonPos == (server.length()-1))) { int msgID = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER; String message = getMessage(msgID, server); unacceptableReasons.add(message); configAcceptable = false; } else if (colonPos > 0) { try { int port = Integer.parseInt(server.substring(colonPos+1)); if ((port < 1) || (port > 65535)) { int msgID = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER; String message = getMessage(msgID, server); unacceptableReasons.add(message); configAcceptable = false; } } catch (Exception e) { int msgID = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER; String message = getMessage(msgID, server); unacceptableReasons.add(message); configAcceptable = false; } } } } return configAcceptable; } opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -361,9 +361,6 @@ // The set of import task listeners registered with the Directory Server. private CopyOnWriteArrayList<ImportTaskListener> importTaskListeners; // The sets of mail server properties private CopyOnWriteArrayList<Properties> mailServerPropertySets; // The set of persistent searches registered with the Directory Server. private CopyOnWriteArrayList<PersistentSearch> persistentSearches; @@ -443,6 +440,9 @@ // The set of connections that are currently established. private LinkedHashSet<ClientConnection> establishedConnections; // The sets of mail server properties private List<Properties> mailServerPropertySets; // The set of schema changes made by editing the schema configuration files // with the server offline. private List<Modification> offlineSchemaChanges; @@ -1071,11 +1071,6 @@ // Initialize information about the mail servers for use by the Directory // Server. initializeMailServerPropertySets(); // Initialize the server alert handlers. initializeAlertHandlers(); @@ -2045,25 +2040,17 @@ /** * Initializes the set of properties to use to connect to mail servers for * sending messages. * Specifies the set of mail server properties that should be used for SMTP * communication. * * @throws ConfigException If there is a configuration problem with any of * the mail server entries. * * @throws InitializationException If a problem occurs while initializing * the mail server property sets that is not * related to the server configuration. * @param mailServerPropertySets A list of {@code Properties} objects that * provide information that can be used to * communicate with SMTP servers. */ public void initializeMailServerPropertySets() throws ConfigException, InitializationException public static void setMailServerPropertySets(List<Properties> mailServerPropertySets) { mailServerPropertySets = new CopyOnWriteArrayList<Properties>(); // FIXME -- Actually read the information from the config handler. Properties defaultProperties = new Properties(); defaultProperties.setProperty("mail.smtp.host", "127.0.0.1"); mailServerPropertySets.add(defaultProperties); directoryServer.mailServerPropertySets = mailServerPropertySets; } @@ -2075,7 +2062,7 @@ * @return The sets of information about the mail servers configured for use * by the Directory Server. */ public static CopyOnWriteArrayList<Properties> getMailServerPropertySets() public static List<Properties> getMailServerPropertySets() { return directoryServer.mailServerPropertySets; } opends/src/server/org/opends/server/extensions/SMTPAlertHandler.java
New file @@ -0,0 +1,231 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Portions Copyright 2006-2007 Sun Microsystems, Inc. */ package org.opends.server.extensions; import java.util.ArrayList; import java.util.List; import org.opends.server.admin.server.ConfigurationChangeListener; import org.opends.server.admin.std.server.AlertHandlerCfg; import org.opends.server.admin.std.server.SMTPAlertHandlerCfg; import org.opends.server.api.AlertGenerator; import org.opends.server.api.AlertHandler; import org.opends.server.core.DirectoryServer; import org.opends.server.config.ConfigException; import org.opends.server.loggers.debug.DebugTracer; import org.opends.server.types.ConfigChangeResult; import org.opends.server.types.DebugLogLevel; import org.opends.server.types.ErrorLogCategory; import org.opends.server.types.ErrorLogSeverity; import org.opends.server.types.InitializationException; import org.opends.server.types.ResultCode; import org.opends.server.util.EMailMessage; import static org.opends.server.loggers.ErrorLogger.*; import static org.opends.server.loggers.debug.DebugLogger.*; import static org.opends.server.messages.ExtensionsMessages.*; import static org.opends.server.messages.MessageHandler.*; import static org.opends.server.util.StaticUtils.*; /** * This class implements a Directory Server alert handler that may be used to * send administrative alerts via SMTP. */ public class SMTPAlertHandler implements AlertHandler<SMTPAlertHandlerCfg>, ConfigurationChangeListener<SMTPAlertHandlerCfg> { /** * The tracer object for the debug logger. */ private static final DebugTracer TRACER = getTracer(); // The current configuration for this alert handler. private SMTPAlertHandlerCfg currentConfig; /** * Creates a new instance of this SMTP alert handler. */ public SMTPAlertHandler() { super(); // All initialization should be done in the initializeAlertHandler method. } /** * {@inheritDoc} */ public void initializeAlertHandler(SMTPAlertHandlerCfg configuration) throws ConfigException, InitializationException { // Make sure that the Directory Server is configured with information about // at least one SMTP server. if ((DirectoryServer.getMailServerPropertySets() == null) || DirectoryServer.getMailServerPropertySets().isEmpty()) { int msgID = MSGID_SMTPALERTHANDLER_NO_SMTP_SERVERS; String message = getMessage(msgID); throw new ConfigException(msgID, message); } configuration.addSMTPChangeListener(this); currentConfig = configuration; } /** * {@inheritDoc} */ public boolean isConfigurationAcceptable(AlertHandlerCfg configuration, List<String> unacceptableReasons) { return true; } /** * {@inheritDoc} */ public void finalizeAlertHandler() { // No action is required. } /** * {@inheritDoc} */ public void sendAlertNotification(AlertGenerator generator, String alertType, int alertID, String alertMessage) { SMTPAlertHandlerCfg cfg = currentConfig; ArrayList<String> recipients = new ArrayList<String>(cfg.getRecipientAddress()); String alertIDStr = String.valueOf(alertID); String subject = replaceTokens(cfg.getMessageSubject(), alertType, alertIDStr, alertMessage); String body = replaceTokens(cfg.getMessageBody(), alertType, alertIDStr, alertMessage); EMailMessage message = new EMailMessage(cfg.getSenderAddress(), recipients, subject); message.setBody(wrapText(body, 75)); try { message.send(); } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_SMTPALERTHANDLER_ERROR_SENDING_MESSAGE; String msg = getMessage(msgID, alertType, alertMessage, stackTraceToSingleLineString(e)); logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_WARNING, msg, msgID); } } /** * Replaces any occurrences of special tokens in the given string with the * appropriate value. Tokens supported include: * <UL> * <LI>%%alert-type%% -- Will be replaced with the alert type string</LI> * <LI>%%alert-id%% -- Will be replaced with the alert ID value</LI> * <LI>%%alert-message%% -- Will be replaced with the alert message</LI> * <LI>\n -- Will be replaced with an end-of-line character. * </UL> * * @param s The string to be processed. * @param alertType The string to use to replace the "%%alert-type%%" * token. * @param alertID The string to use to replace the "%%alert-id%%" * token. * @param alertMessage The string to use to replace the "%%alert-message%%" * token. * * @return A processed version of the provided string. */ private String replaceTokens(String s, String alertType, String alertID, String alertMessage) { return s.replace("%%alert-type%%", alertType). replace("%%alert-id%%", alertID). replace("%%alert-message%%", alertMessage). replace("\\n", "\r\n"); } /** * {@inheritDoc} */ public boolean isConfigurationChangeAcceptable( SMTPAlertHandlerCfg configuration, List<String> unacceptableReasons) { return true; } /** * {@inheritDoc} */ public ConfigChangeResult applyConfigurationChange( SMTPAlertHandlerCfg configuration) { currentConfig = configuration; return new ConfigChangeResult(ResultCode.SUCCESS, false); } } opends/src/server/org/opends/server/messages/ConfigMessages.java
@@ -7057,6 +7057,16 @@ /** * The message ID for the message that will be used if an SMTP server value is * not properly-formed. This takes a single argument, which is the invalid * server value. */ public static final int MSGID_CONFIG_CORE_INVALID_SMTP_SERVER = CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 697; /** * Associates a set of generic messages with the message IDs defined in this * class. */ @@ -7649,6 +7659,12 @@ "Configuration entry %s has an invalid value for " + "configuration attribute " + ATTR_NOTIFY_ABANDONED_OPS + " (it should be a Boolean value of true or false): %s"); registerMessage(MSGID_CONFIG_CORE_INVALID_SMTP_SERVER, "The provided SMTP server value '%s' is invalid. An " + "SMTP server value must have an IP address or a " + "resolvable name, and it may optionally be followed by a " + "colon and an integer value between 1 and 65535 to " + "specify the server port number"); registerMessage(MSGID_CONFIG_CORE_INVALID_PROXY_MAPPER_DN, "Configuration entry %s has an invalid value for " + "configuration attribute " + ATTR_PROXY_MAPPER_DN + opends/src/server/org/opends/server/messages/ExtensionsMessages.java
@@ -5512,6 +5512,27 @@ /** * The message ID for the message that will be used if the Directory Server is * not configured with information about any SMTP servers. This does not take * any configuration arguments. */ public static final int MSGID_SMTPALERTHANDLER_NO_SMTP_SERVERS = CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 531; /** * The message ID for the message that will be used if an error occurs while * trying to send an e-mail message. This takes three arguments, which are * the alert type, the alert message, and a string representation of the * exception that was caught. */ public static final int MSGID_SMTPALERTHANDLER_ERROR_SENDING_MESSAGE = CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 532; /** * Associates a set of generic messages with the message IDs defined in this * class. */ @@ -7919,6 +7940,17 @@ "The password policy state extended request included an " + "operation with an invalid or unsupported operation type " + "of %s"); registerMessage(MSGID_SMTPALERTHANDLER_NO_SMTP_SERVERS, "The Directory Server is not configured with any " + "SMTP servers. The SMTP alert handler cannot be used " + "unless the Directory Server is configured with " + "information about at least one SMTP server"); registerMessage(MSGID_SMTPALERTHANDLER_ERROR_SENDING_MESSAGE, "An error occurred when trying to send an e-mail message " + "for administrative alert with type %s and message %s: " + "%s"); } } opends/src/server/org/opends/server/util/EMailMessage.java
@@ -46,10 +46,10 @@ import javax.mail.internet.MimeMultipart; import org.opends.server.core.DirectoryServer; import static org.opends.server.loggers.debug.DebugLogger.*; import org.opends.server.loggers.debug.DebugTracer; import org.opends.server.types.DebugLogLevel; import static org.opends.server.loggers.debug.DebugLogger.*; import static org.opends.server.messages.MessageHandler.*; import static org.opends.server.messages.UtilityMessages.*; @@ -123,7 +123,9 @@ this.recipients = recipients; this.subject = subject; body = new StringBuilder(); body = new StringBuilder(); attachments = new LinkedList<MimeBodyPart>(); bodyMIMEType = "text/plain"; } @@ -427,6 +429,7 @@ try { Transport.send(message); return; } catch (SendFailedException sfe) { opends/src/server/org/opends/server/util/ServerConstants.java
@@ -2552,5 +2552,21 @@ */ public static final String SCHEMA_BASE_FILE_NAME_WITHOUT_REVISION = "schema.ldif."; /** * The name of the JavaMail property that can be used to specify the address * of the SMTP server. */ public static final String SMTP_PROPERTY_HOST = "mail.smtp.host"; /** * The name of the JavaMail property that can be used to specify the port for * the SMTP server. */ public static final String SMTP_PROPERTY_PORT = "mail.smtp.port"; }