电子邮件无法访问Java中父对象的受保护方法
我有个问题:
包含内部类的java类。内部类(Authenticator
)扩展了javax.mail.Authenticator
(请注意,类和子类的名称相同)
问题是我不能访问受保护的方法getPasswordAuthentication
,除非内部类与扩展类同名(我的意思是Authenticator extends javax.mail.Authenticator
)。
如果我写private class SMTPAuthenticator extends javax.mail.Authenticator
,那么我就不能再访问受保护的getPasswordAuthentication
。
见下面的代码:
import java.util.Properties;
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;
import javax.mail.internet.MimeMessage.RecipientType;
public class MailWithPasswordAuthentication {
public static void main(String[] args) throws MessagingException {
new MailWithPasswordAuthentication().run();
}
private void run() throws MessagingException {
Message message = new MimeMessage(getSession());
message.addRecipient(RecipientType.TO, new InternetAddress("to@example.com"));
message.addFrom(new InternetAddress[] { new InternetAddress("from@example.com") });
message.setSubject("the subject");
message.setContent("the body", "text/plain");
Transport.send(message);
}
private Session getSession() {
Authenticator authenticator = new Authenticator();
Properties properties = new Properties();
properties.setProperty("mail.smtp.submitter", authenticator.getPasswordAuthentication().getUserName());
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.host", "mail.example.com");
properties.setProperty("mail.smtp.port", "25");
return Session.getInstance(properties, authenticator);
}
private class Authenticator extends javax.mail.Authenticator {
private PasswordAuthentication authentication;
public Authenticator() {
String username = "auth-user";
String password = "auth-password";
authentication = new PasswordAuthentication(username, password);
}
protected PasswordAuthentication getPasswordAuthentication() {
return authentication;
}
}
}
谢谢, A
# 1 楼答案
如果将验证器类重命名为SMTPAuthenticator,还应更改以下行:
到
出现错误的原因是只有
SMTPAuthenticator
类包含getPasswordAuthentication()
方法,而不是基类Authenticator
# 2 楼答案
如果您可以访问
Authenticator extends javax.mail.Authenticatore
,那么您应该能够访问class SMTPAuthenticator extends javax.mail.Authenticator
。如果不是,那么你的观察是错误的