Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaMail与不同主机发送电子邮件_Java_Authentication_Jakarta Mail - Fatal编程技术网

使用JavaMail与不同主机发送电子邮件

使用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

我正在创建一个用于通过Java程序发送电子邮件的应用程序。我目前拥有的代码检查电子邮件和密码是否有效。问题是,如果用户输入的内容不是example@live.com,那是行不通的

以下是我当前验证用户电子邮件和密码的代码:

 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文件,其中包含有关流行邮件服务器的信息。如果你不想自己重新发明它,你可以研究一下。但是,除了询问用户之外,任何事情都需要做更多的工作。