Author: pmouawad Date: Sun Feb 5 08:00:38 2012 New Revision: 1240674 URL: http://svn.apache.org/viewvc?rev=1240674&view=rev Log: Bug 52603 - MailerVisualizer : Enable SSL , TLS and Authentication Modified: jmeter/trunk/src/components/org/apache/jmeter/reporters/MailerModel.java jmeter/trunk/src/components/org/apache/jmeter/visualizers/MailerVisualizer.java jmeter/trunk/xdocs/changes.xml Modified: jmeter/trunk/src/components/org/apache/jmeter/reporters/MailerModel.java URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/reporters/MailerModel.java?rev=1240674&r1=1240673&r2=1240674&view=diff ============================================================================== --- jmeter/trunk/src/components/org/apache/jmeter/reporters/MailerModel.java (original) +++ jmeter/trunk/src/components/org/apache/jmeter/reporters/MailerModel.java Sun Feb 5 08:00:38 2012 @@ -24,8 +24,10 @@ import java.util.List; import java.util.Properties; import java.util.StringTokenizer; +import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; +import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; @@ -34,6 +36,7 @@ import javax.mail.internet.MimeMessage; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import org.apache.commons.lang.StringUtils; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.testelement.AbstractTestElement; import org.apache.jmeter.util.JMeterUtils; @@ -45,13 +48,31 @@ import org.apache.log.Logger; * */ public class MailerModel extends AbstractTestElement implements Serializable { - + public static enum MailAuthType { + SSL("SSL"), + TLS("TLS"), + NONE(""); + + final private String value; + MailAuthType(String value) { + this.value = value; + } + } + private static final long serialVersionUID = 233L; private static final Logger log = LoggingManager.getLoggerForClass(); private static final String MAIL_SMTP_HOST = "mail.smtp.host"; //$NON-NLS-1$ + private static final String MAIL_SMTP_PORT = "mail.smtp.port"; //$NON-NLS-1$ + + private static final String MAIL_SMTP_AUTH = "mail.smtp.auth"; //$NON-NLS-1$ + + private static final String MAIL_SMTP_SOCKETFACTORY_CLASS = "mail.smtp.socketFactory.class"; //$NON-NLS-1$ + + private static final String MAIL_SMTP_STARTTLS = "mail.smtp.starttls.enable"; //$NON-NLS-1$ + private long failureCount = 0; private long successCount = 0; @@ -68,6 +89,8 @@ public class MailerModel extends Abstrac private static final String HOST_KEY = "MailerModel.smtpHost"; //$NON-NLS-1$ + private static final String PORT_KEY = "MailerModel.smtpPort"; //$NON-NLS-1$ + private static final String SUCCESS_SUBJECT = "MailerModel.successSubject"; //$NON-NLS-1$ private static final String FAILURE_SUBJECT = "MailerModel.failureSubject"; //$NON-NLS-1$ @@ -76,8 +99,16 @@ public class MailerModel extends Abstrac private static final String SUCCESS_LIMIT_KEY = "MailerModel.successLimit"; //$NON-NLS-1$ + private static final String LOGIN = "MailerModel.login"; //$NON-NLS-1$ + + private static final String PASSWORD = "MailerModel.password"; //$NON-NLS-1$ + + private static final String MAIL_AUTH_TYPE = "MailerModel.authType"; //$NON-NLS-1$ + private static final String DEFAULT_LIMIT = "2"; //$NON-NLS-1$ + private static final int DEFAULT_SMTP_PORT = 25; + /** The listener for changes. */ private transient ChangeListener changeListener; @@ -180,7 +211,9 @@ public class MailerModel extends Abstrac if (addressList.size() != 0) { try { sendMail(getFromAddress(), addressList, getFailureSubject(), "URL Failed: " - + sample.getSampleLabel(), getSmtpHost()); + + sample.getSampleLabel(), getSmtpHost(), + getSmtpPort(), getLogin(), getPassword(), + getMailAuthType()); } catch (Exception e) { log.error("Problem sending mail: "+e); } @@ -215,6 +248,8 @@ public class MailerModel extends Abstrac notifyChangeListeners(); } + + /** * Resets the state of this object to its default. But: This method does not * reset any mail-specific attributes (like sender, mail-subject...) since @@ -257,8 +292,35 @@ public class MailerModel extends Abstrac * the message-body. * @param smtpHost * the smtp-server used to send the mail. + * @throws MessagingException + * @throws AddressException */ - public void sendMail(String from, List vEmails, String subject, String attText, String smtpHost) + public void sendMail(String from, List vEmails, String subject, String attText, String smtpHost) + throws AddressException, MessagingException { + sendMail(from, vEmails, subject, attText, smtpHost, null, null, null, null); + } + + /** + * Sends a mail with the given parameters using SMTP. + * + * @param from + * the sender of the mail as shown in the mail-client. + * @param vEmails + * all receivers of the mail. The receivers are seperated by + * commas. + * @param subject + * the subject of the mail. + * @param attText + * the message-body. + * @param smtpHost + * the smtp-server used to send the mail. + */ + public void sendMail(String from, List vEmails, String subject, + String attText, String smtpHost, + Integer smtpPort, + final String user, + final String password, + MailAuthType mailAuthType) throws AddressException, MessagingException { String host = smtpHost; boolean debug = Boolean.valueOf(host).booleanValue(); @@ -274,15 +336,39 @@ public class MailerModel extends Abstrac Properties props = new Properties(); props.put(MAIL_SMTP_HOST, host); - Session session = Session.getDefaultInstance(props, null); + if(smtpPort != null) { + props.put(MAIL_SMTP_PORT, smtpPort); + } + Authenticator authenticator = null; + if(mailAuthType != MailAuthType.NONE) { + props.put(MAIL_SMTP_AUTH, "true"); + switch (mailAuthType) { + case SSL: + props.put(MAIL_SMTP_SOCKETFACTORY_CLASS, + "javax.net.ssl.SSLSocketFactory"); + break; + case TLS: + props.put(MAIL_SMTP_STARTTLS, + "true"); + break; + + default: + break; + } + } + + if(!StringUtils.isEmpty(user)) { + authenticator = + new javax.mail.Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(user,password); + } + }; + } + Session session = Session.getInstance(props, authenticator); // N.B. properties are only used when the default session is first // created // so check if the mail host needs to be reset... - props = session.getProperties(); - if (!host.equalsIgnoreCase(props.getProperty(MAIL_SMTP_HOST))) { - props.setProperty(MAIL_SMTP_HOST, host); - } - session.setDebug(debug); // create a message @@ -305,7 +391,11 @@ public class MailerModel extends Abstrac log.info(attText); - sendMail(from, getAddressList(), subject, attText, smtpHost); + sendMail(from, getAddressList(), subject, attText, smtpHost, + getSmtpPort(), + getLogin(), + getPassword(), + getMailAuthType()); log.info("Test mail sent successfully!!"); } @@ -327,6 +417,26 @@ public class MailerModel extends Abstrac setProperty(HOST_KEY, str); } + public void setSmtpPort(Integer str) { + if(str== null) { + setProperty(PORT_KEY, DEFAULT_SMTP_PORT); + } else { + setProperty(PORT_KEY, str); + } + } + + public void setLogin(String login) { + setProperty(LOGIN, login); + } + + public void setPassword(String password) { + setProperty(PASSWORD, password); + } + + public void setMailAuthType(String value) { + setProperty(MAIL_AUTH_TYPE, value, ""); + } + public void setFailureSubject(String str) { setProperty(FAILURE_SUBJECT, str); } @@ -365,6 +475,10 @@ public class MailerModel extends Abstrac return getPropertyAsString(HOST_KEY); } + public int getSmtpPort() { + return getPropertyAsInt(PORT_KEY, DEFAULT_SMTP_PORT); + } + public String getFailureSubject() { return getPropertyAsString(FAILURE_SUBJECT); } @@ -388,4 +502,17 @@ public class MailerModel extends Abstrac public long getFailureCount() { return this.failureCount; } -} + + public String getLogin() { + return getPropertyAsString(LOGIN); + } + + public String getPassword() { + return getPropertyAsString(PASSWORD); + } + + public MailAuthType getMailAuthType() { + String authType = getPropertyAsString(MAIL_AUTH_TYPE, MailAuthType.NONE.toString()); + return MailAuthType.valueOf(authType); + } +} \ No newline at end of file Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/MailerVisualizer.java URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/MailerVisualizer.java?rev=1240674&r1=1240673&r2=1240674&view=diff ============================================================================== --- jmeter/trunk/src/components/org/apache/jmeter/visualizers/MailerVisualizer.java (original) +++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/MailerVisualizer.java Sun Feb 5 08:00:38 2012 @@ -24,19 +24,23 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; + import javax.mail.MessagingException; import javax.mail.internet.AddressException; import javax.swing.BorderFactory; import javax.swing.JButton; +import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; +import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import org.apache.commons.lang.StringUtils; import org.apache.jmeter.gui.util.VerticalPanel; import org.apache.jmeter.reporters.MailerModel; import org.apache.jmeter.reporters.MailerResultCollector; @@ -72,6 +76,8 @@ public class MailerVisualizer extends Ab private JTextField smtpHostField; + private JTextField smtpPortField; + private JTextField failureSubjectField; private JTextField successSubjectField; @@ -82,6 +88,13 @@ public class MailerVisualizer extends Ab private JTextField successLimitField; + private JTextField smtpLoginField; + + private JTextField smtpPasswordField; + + private JComboBox authTypeCombo; + + // private JPanel mainPanel; // private JLabel panelTitleLabel; @@ -180,6 +193,45 @@ public class MailerVisualizer extends Ab mailerPanel.add(smtpHostField); c.gridwidth = 1; + mailerPanel.add(new JLabel("SMTP Port:")); + + smtpPortField = new JTextField(25); + smtpPortField.setEditable(true); + c.gridwidth = GridBagConstraints.REMAINDER; + g.setConstraints(smtpPortField, c); + mailerPanel.add(smtpPortField); + + c.gridwidth = 1; + mailerPanel.add(new JLabel("SMTP Login:")); + + smtpLoginField = new JTextField(25); + smtpLoginField.setEditable(true); + c.gridwidth = GridBagConstraints.REMAINDER; + g.setConstraints(smtpLoginField, c); + mailerPanel.add(smtpLoginField); + + c.gridwidth = 1; + mailerPanel.add(new JLabel("SMTP Password:")); + + smtpPasswordField = new JPasswordField(25); + smtpPasswordField.setEditable(true); + c.gridwidth = GridBagConstraints.REMAINDER; + g.setConstraints(smtpPasswordField, c); + mailerPanel.add(smtpPasswordField); + + c.gridwidth = 1; + mailerPanel.add(new JLabel("AUTH TYPE")); + + authTypeCombo = new JComboBox(new Object[] { + MailerModel.MailAuthType.NONE.toString(), + MailerModel.MailAuthType.SSL.toString(), + MailerModel.MailAuthType.TLS.toString()}); + c.gridwidth = GridBagConstraints.REMAINDER; + g.setConstraints(authTypeCombo, c); + mailerPanel.add(authTypeCombo); + + + c.gridwidth = 1; mailerPanel.add(new JLabel("Failure Subject:")); failureSubjectField = new JTextField(25); @@ -322,6 +374,13 @@ public class MailerVisualizer extends Ab mailerModel.setFailureSubject(failureSubjectField.getText()); mailerModel.setFromAddress(fromField.getText()); mailerModel.setSmtpHost(smtpHostField.getText()); + mailerModel.setSmtpPort( + StringUtils.isEmpty(smtpPortField.getText()) ? + null : Integer.valueOf(smtpPortField.getText())); + mailerModel.setLogin(smtpLoginField.getText()); + mailerModel.setPassword(smtpPasswordField.getText()); + mailerModel.setMailAuthType( + authTypeCombo.getSelectedItem().toString()); mailerModel.setSuccessLimit(successLimitField.getText()); mailerModel.setSuccessSubject(successSubjectField.getText()); mailerModel.setToAddress(addressField.getText()); @@ -341,6 +400,10 @@ public class MailerVisualizer extends Ab addressField.setText(model.getToAddress()); fromField.setText(model.getFromAddress()); smtpHostField.setText(model.getSmtpHost()); + smtpPortField.setText(Integer.toString(model.getSmtpPort())); + smtpLoginField.setText(model.getLogin()); + smtpPasswordField.setText(model.getPassword()); + authTypeCombo.setSelectedItem(model.getMailAuthType().toString()); successSubjectField.setText(model.getSuccessSubject()); failureSubjectField.setText(model.getFailureSubject()); failureLimitField.setText(String.valueOf(model.getFailureLimit())); Modified: jmeter/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1240674&r1=1240673&r2=1240674&view=diff ============================================================================== --- jmeter/trunk/xdocs/changes.xml (original) +++ jmeter/trunk/xdocs/changes.xml Sun Feb 5 08:00:38 2012 @@ -118,6 +118,7 @@ or a Debug Sampler with all fields set t

Listeners

    +
  • Bug 52603 - MailerVisualizer : Enable SSL , TLS and Authentication

Timers, Assertions, Config, Pre- & Post-Processors