IntrepidBlue
IntrepidBlue

Reputation: 21

Mail Authentication through Java

I am building an application that takes in the username and password from the user and helps to send mails, using Java to code the same. I am using the Authenticator class from JavaMail API to get the authentication done. I am using this code-

 import java.util.Date;
 import java.util.Properties;
 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.InternetAddress;
 import javax.mail.internet.MimeMessage;

 public class MailSender{

    GUI input = new GUI();
    String username2= input.username.getText();
    String password2 = input.password.getText();

    public void SendMail(String ToAddress, String Name, String username1, String password1, String subject, String message, String salutation) {

        String host = "smtp.gmail.com";
        String from = "[email protected]";
        String to = ToAddress;


        Properties props = new Properties();
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.port", 25);
        props.put("mail.debug", "true");
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");


        Session session = Session.getInstance(props, new GMailAuthenticator());

        try {


            Message msg = new MimeMessage(session);


            msg.setFrom(new InternetAddress(from));

            InternetAddress[] address = {new InternetAddress(to)};
            msg.setRecipients(Message.RecipientType.TO, address);


            msg.setSubject(subject);
            msg.setSentDate(new Date());


            msg.setText(salutation+" "+Name+","+ "\n"+ message);


            Transport.send(msg);

        }
        catch (MessagingException mex) {
            mex.printStackTrace();
        }

    }

    private static class GMailAuthenticator extends Authenticator {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username2, password2);
        }
    }

}

I have created a GUI class that takes in the username, password, subject, mail text as user input, which I was stating earlier in the code itself. Netbeans shows an error in GmailAuthentication class that a "non-static variable (like username2 and password2 here) can't be referenced from a static context."

How can I get around this issue? I need to take the username and password as user input from the GUI class and use them to authenticate for Gmail.

Upvotes: 0

Views: 2470

Answers (2)

Bill Shannon
Bill Shannon

Reputation: 29971

Note that you don't really need an Authenticator in this case; it just makes your program more complex.

Upvotes: 2

Bhushan
Bhushan

Reputation: 6181

Instead of:

private static class GMailAuthenticator extends Authenticator {

Try removing static keyword:

private class GMailAuthenticator extends Authenticator {

Upvotes: 0

Related Questions