EmailNotification.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package holeg.addon.helper;
  2. import holeg.preferences.ImagePreference;
  3. import holeg.preferences.PreferenceKeys;
  4. import holeg.ui.view.image.Import;
  5. import java.awt.BorderLayout;
  6. import java.awt.ComponentOrientation;
  7. import java.awt.Dimension;
  8. import java.awt.FlowLayout;
  9. import java.awt.GridLayout;
  10. import java.util.prefs.Preferences;
  11. import javax.swing.BorderFactory;
  12. import javax.swing.JButton;
  13. import javax.swing.JFrame;
  14. import javax.swing.JLabel;
  15. import javax.swing.JPanel;
  16. import javax.swing.JPasswordField;
  17. import javax.swing.JTextField;
  18. import org.apache.commons.mail.DefaultAuthenticator;
  19. import org.apache.commons.mail.Email;
  20. import org.apache.commons.mail.EmailException;
  21. import org.apache.commons.mail.SimpleEmail;
  22. public class EmailNotification {
  23. private static final Preferences prefs = Preferences.userNodeForPackage(EmailNotification.class);
  24. private static final EmailSmtpInformation info = new EmailSmtpInformation();
  25. public static void main(String[] args) {
  26. OpenEmailSettings(null);
  27. }
  28. public static void OpenEmailSettings(JPanel parent) {
  29. loadPreferences();
  30. JFrame frame = new JFrame();
  31. frame.setTitle("Email Settings");
  32. frame.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
  33. frame.setContentPane(createEditFormular(frame));
  34. frame.pack();
  35. frame.setPreferredSize(new Dimension(400, frame.getHeight()));
  36. frame.pack();
  37. frame.setVisible(true);
  38. frame.setLocationRelativeTo(parent);
  39. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  40. }
  41. private static JPanel createEditFormular(JFrame frame) {
  42. JPanel panel = new JPanel();
  43. panel.setLayout(new BorderLayout());
  44. panel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
  45. JPanel infoPanel = new JPanel();
  46. GridLayout infoLayout = new GridLayout(0, 2);
  47. infoPanel.add(new JLabel("SMTP Hostname:"));
  48. JTextField hostnameTextField = new JTextField(info.Hostname);
  49. infoPanel.add(hostnameTextField);
  50. infoPanel.add(new JLabel("Port:"));
  51. JTextField portTextField = new JTextField(Integer.toString(info.Port));
  52. infoPanel.add(portTextField);
  53. infoPanel.add(new JLabel("Username:"));
  54. JTextField usernameTextField = new JTextField(info.Username);
  55. infoPanel.add(usernameTextField);
  56. infoPanel.add(new JLabel("Password:"));
  57. JPasswordField passwordTextField = new JPasswordField(info.Password);
  58. infoPanel.add(passwordTextField);
  59. infoPanel.add(new JLabel("From Email:"));
  60. JTextField fromEmailTextField = new JTextField(info.FromEmail);
  61. infoPanel.add(fromEmailTextField);
  62. infoPanel.add(new JLabel("To Email:"));
  63. JTextField toEmailTextField = new JTextField(info.ToEmail);
  64. infoPanel.add(toEmailTextField);
  65. infoPanel.setLayout(infoLayout);
  66. panel.add(infoPanel, BorderLayout.CENTER);
  67. JPanel controlPanel = new JPanel();
  68. controlPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
  69. controlPanel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
  70. JButton cancelButton = new JButton("Cancel");
  71. cancelButton.addActionListener(event -> frame.dispose());
  72. controlPanel.add(cancelButton);
  73. JButton applyButton = new JButton("Apply and Close");
  74. applyButton.addActionListener(event -> {
  75. // parse Textfields
  76. info.Hostname = hostnameTextField.getText();
  77. info.Port = Integer.parseInt(portTextField.getText());
  78. info.Username = usernameTextField.getText();
  79. info.Password = String.valueOf(passwordTextField.getPassword());
  80. info.FromEmail = fromEmailTextField.getText();
  81. info.ToEmail = toEmailTextField.getText();
  82. // Save Preferences
  83. savePreferences();
  84. frame.dispose();
  85. });
  86. controlPanel.add(applyButton);
  87. JButton testButton = new JButton("Send Test-Email");
  88. testButton.addActionListener(event -> {
  89. // parse Textfields
  90. EmailSmtpInformation testInfo = new EmailSmtpInformation();
  91. testInfo.Hostname = hostnameTextField.getText();
  92. testInfo.Port = Integer.parseInt(portTextField.getText());
  93. testInfo.Username = usernameTextField.getText();
  94. testInfo.Password = String.valueOf(passwordTextField.getPassword());
  95. testInfo.FromEmail = fromEmailTextField.getText();
  96. testInfo.ToEmail = toEmailTextField.getText();
  97. sendEmail(testInfo, "Holeg Notification Test", "Success.");
  98. });
  99. controlPanel.add(testButton);
  100. panel.add(controlPanel, BorderLayout.PAGE_END);
  101. return panel;
  102. }
  103. public static void sendEmail(String subject, String message) {
  104. loadPreferences();
  105. sendEmail(info, subject, message);
  106. }
  107. public static void sendEmail(EmailSmtpInformation info, String subject, String message) {
  108. Email email = new SimpleEmail();
  109. email.setHostName(info.Hostname);
  110. email.setSmtpPort(info.Port);
  111. email.setAuthenticator(new DefaultAuthenticator(info.Username, info.Password));
  112. email.setSSLOnConnect(true);
  113. email.setSubject(subject);
  114. try {
  115. email.setFrom(info.FromEmail);
  116. email.setMsg(message);
  117. email.addTo(info.ToEmail);
  118. email.send();
  119. } catch (EmailException e) {
  120. e.printStackTrace();
  121. }
  122. }
  123. private static void savePreferences() {
  124. prefs.put(PreferenceKeys.EmailNotification.Hostname, info.Hostname);
  125. prefs.putInt(PreferenceKeys.EmailNotification.Port, info.Port);
  126. prefs.put(PreferenceKeys.EmailNotification.Username, info.Username);
  127. prefs.put(PreferenceKeys.EmailNotification.Password, info.Password);
  128. prefs.put(PreferenceKeys.EmailNotification.FromEmail, info.FromEmail);
  129. prefs.put(PreferenceKeys.EmailNotification.ToEmail, info.ToEmail);
  130. }
  131. private static void loadPreferences() {
  132. info.Hostname = prefs.get(PreferenceKeys.EmailNotification.Hostname, "");
  133. info.Port = prefs.getInt(PreferenceKeys.EmailNotification.Port, 465);
  134. info.Username = prefs.get(PreferenceKeys.EmailNotification.Username, "");
  135. info.Password = prefs.get(PreferenceKeys.EmailNotification.Password, "");
  136. info.FromEmail = prefs.get(PreferenceKeys.EmailNotification.FromEmail, "");
  137. info.ToEmail = prefs.get(PreferenceKeys.EmailNotification.ToEmail, "");
  138. }
  139. public static class EmailSmtpInformation {
  140. public String Hostname;
  141. public int Port;
  142. public String Username;
  143. public String Password;
  144. public String FromEmail;
  145. public String ToEmail;
  146. }
  147. }