使用JavaMail与不同主机发送电子邮件
我正在创建一个用于通过Java程序发送电子邮件的应用程序。我目前拥有的代码检查电子邮件和密码是否有效。问题是,如果用户输入的内容不是example@live.com,那是行不通的 以下是我当前验证用户电子邮件和密码的代码:使用JavaMail与不同主机发送电子邮件,java,authentication,jakarta-mail,Java,Authentication,Jakarta Mail,我正在创建一个用于通过Java程序发送电子邮件的应用程序。我目前拥有的代码检查电子邮件和密码是否有效。问题是,如果用户输入的内容不是example@live.com,那是行不通的 以下是我当前验证用户电子邮件和密码的代码: import java.util.Properties; import javax.mail.AuthenticationFailedException; import javax.mail.MessagingException; import javax.mail.No
import java.util.Properties;
import javax.mail.AuthenticationFailedException;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.swing.JOptionPane;
public class Authenticator {
static Data d = new Data();
public static void authenticate() throws MessagingException {
d.password = LoginWindow.passwordField.getText();
d.username = LoginWindow.usernameField.getText();
Properties props = System.getProperties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "smtp.live.com");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
Session session = Session.getDefaultInstance(props);
try {
Transport trans = session.getTransport("smtp");
try {
trans.connect("smtp.live.com", 587, d.username, d.password);
JOptionPane.showMessageDialog(null, "Working, great!");
} catch (AuthenticationFailedException e) {
JOptionPane.showMessageDialog(null, "Password or Email Incorrect!");
}
} catch (NoSuchProviderException e) {
e.printStackTrace();
}
}
}
我可以做些什么,让所有域都可以工作,而不仅仅是live.com域?您可以使用SMTP服务来实现这一点。您的代码中对此无能为力,这是由服务器强制执行的。@pvg您知道有哪些服务允许这样做吗?Sendgrid、AWS和其他许多服务。通常会花费一些费用,除了非常低的数量,并且需要一定的设置以确保您不是垃圾邮件发送者。正如我在中所述,如果您想使用用户的邮件服务器和帐户发送电子邮件,除了用户名和密码之外,您还需要询问许多其他信息。简单的方法是询问用户。更复杂的方法是创建一个“表”,将普通电子邮件地址映射到相应的服务器名称,然后向用户询问该表未处理的情况。例如,如果地址是@gmail.com,您可以知道gmail的邮件服务器名称。Thunderbird已经有了一个工具来实现这一点,它有一堆xml文件,其中包含有关流行邮件服务器的信息。如果你不想自己重新发明它,你可以研究一下。但是,除了询问用户之外,任何事情都需要做更多的工作。