#1075 Mail sender - allow to turn off TLS for port 25

This commit is contained in:
ljacqu 2017-02-26 14:12:51 +01:00
parent a2b8ca683d
commit a847deac16
5 changed files with 42 additions and 26 deletions

View File

@ -30,6 +30,7 @@ import fr.xephi.authme.service.BackupService;
import fr.xephi.authme.service.BukkitService; import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.service.MigrationService; import fr.xephi.authme.service.MigrationService;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.settings.properties.SecuritySettings; import fr.xephi.authme.settings.properties.SecuritySettings;
@ -269,6 +270,12 @@ public class AuthMe extends JavaPlugin {
&& settings.getProperty(PluginSettings.SESSIONS_ENABLED)) { && settings.getProperty(PluginSettings.SESSIONS_ENABLED)) {
ConsoleLogger.warning("WARNING!!! You set session timeout to 0, this may cause security issues!"); ConsoleLogger.warning("WARNING!!! You set session timeout to 0, this may cause security issues!");
} }
// Use TLS property only affects port 25
if (!settings.getProperty(EmailSettings.PORT25_USE_TLS)
&& settings.getProperty(EmailSettings.SMTP_PORT) != 25) {
ConsoleLogger.warning("Note: You have set Email.useTls to false but this only affects mail over port 25");
}
} }
/** /**

View File

@ -1,9 +1,13 @@
package fr.xephi.authme.command.executable.authme.debug; package fr.xephi.authme.command.executable.authme.debug;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.data.auth.PlayerAuth; import fr.xephi.authme.data.auth.PlayerAuth;
import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.mail.EmailService; import fr.xephi.authme.mail.SendMailSSL;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import javax.inject.Inject; import javax.inject.Inject;
@ -18,7 +22,10 @@ class TestEmailSender implements DebugSection {
private DataSource dataSource; private DataSource dataSource;
@Inject @Inject
private EmailService emailService; private SendMailSSL sendMailSSL;
@Inject
private Server server;
@Override @Override
@ -33,7 +40,7 @@ class TestEmailSender implements DebugSection {
@Override @Override
public void execute(CommandSender sender, List<String> arguments) { public void execute(CommandSender sender, List<String> arguments) {
if (!emailService.hasAllInformation()) { if (!sendMailSSL.hasAllInformation()) {
sender.sendMessage(ChatColor.RED + "You haven't set all required configurations in config.yml " + sender.sendMessage(ChatColor.RED + "You haven't set all required configurations in config.yml " +
"for sending emails. Please check your config.yml"); "for sending emails. Please check your config.yml");
return; return;
@ -43,7 +50,7 @@ class TestEmailSender implements DebugSection {
// getEmail() takes care of informing the sender of the error if email == null // getEmail() takes care of informing the sender of the error if email == null
if (email != null) { if (email != null) {
boolean sendMail = emailService.sendTestEmail(email); boolean sendMail = sendTestEmail(email);
if (sendMail) { if (sendMail) {
sender.sendMessage("Test email sent to " + email + " with success"); sender.sendMessage("Test email sent to " + email + " with success");
} else { } else {
@ -75,4 +82,19 @@ class TestEmailSender implements DebugSection {
return null; return null;
} }
} }
private boolean sendTestEmail(String email) {
HtmlEmail htmlEmail;
try {
htmlEmail = sendMailSSL.initializeMail(email);
} catch (EmailException e) {
ConsoleLogger.logException("Failed to create email for sample email:", e);
return false;
}
htmlEmail.setSubject("AuthMe test email");
String message = "Hello there!<br />This is a sample email sent to you from a Minecraft server ("
+ server.getName() + ") via /authme debug mail. If you're seeing this, sending emails should be fine.";
return sendMailSSL.sendEmail(message, htmlEmail);
}
} }

View File

@ -94,21 +94,6 @@ public class EmailService {
return sendMailSSL.sendEmail(message, htmlEmail); return sendMailSSL.sendEmail(message, htmlEmail);
} }
public boolean sendTestEmail(String email) {
HtmlEmail htmlEmail;
try {
htmlEmail = sendMailSSL.initializeMail(email);
} catch (EmailException e) {
ConsoleLogger.logException("Failed to create email for sample email:", e);
return false;
}
htmlEmail.setSubject("AuthMe test email");
String message = "Hello there!<br />This is a sample email sent to you from a Minecraft server ("
+ serverName + ") via /authme debug mail. If you're seeing this, sending emails should be fine.";
return sendMailSSL.sendEmail(message, htmlEmail);
}
private File generateImage(String name, String newPass) throws IOException { private File generateImage(String name, String newPass) throws IOException {
ImageGenerator gen = new ImageGenerator(newPass); ImageGenerator gen = new ImageGenerator(newPass);
File file = new File(dataFolder, name + "_new_pass.jpg"); File file = new File(dataFolder, name + "_new_pass.jpg");

View File

@ -24,12 +24,8 @@ import static fr.xephi.authme.settings.properties.EmailSettings.MAIL_PASSWORD;
*/ */
public class SendMailSSL { public class SendMailSSL {
private final Settings settings;
@Inject @Inject
SendMailSSL(Settings settings) { private Settings settings;
this.settings = settings;
}
/** /**
* Returns whether all necessary settings are set for sending mails. * Returns whether all necessary settings are set for sending mails.
@ -115,8 +111,10 @@ public class SendMailSSL {
} }
break; break;
case 25: case 25:
email.setStartTLSEnabled(true); if (settings.getProperty(EmailSettings.PORT25_USE_TLS)) {
email.setSSLCheckServerIdentity(true); email.setStartTLSEnabled(true);
email.setSSLCheckServerIdentity(true);
}
break; break;
case 465: case 465:
email.setSslSmtpPort(Integer.toString(port)); email.setSslSmtpPort(Integer.toString(port));

View File

@ -19,6 +19,10 @@ public class EmailSettings implements SettingsHolder {
public static final Property<Integer> SMTP_PORT = public static final Property<Integer> SMTP_PORT =
newProperty("Email.mailPort", 465); newProperty("Email.mailPort", 465);
@Comment("Only affects port 25: enable TLS/STARTTLS?")
public static final Property<Boolean> PORT25_USE_TLS =
newProperty("Email.useTls", true);
@Comment("Email account which sends the mails") @Comment("Email account which sends the mails")
public static final Property<String> MAIL_ACCOUNT = public static final Property<String> MAIL_ACCOUNT =
newProperty("Email.mailAccount", ""); newProperty("Email.mailAccount", "");