此程序首先尝试连接smtp.rediffmail.com
来发送电子邮件。没有编译时错误或编译时异常。但是当我尝试运行以下程序时,它会生成以下异常。
javax.mail.SendFailedException:地址无效; 嵌套异常是: com.sun.mail.smtp.SMTPAddressFailedException:421授权失败:请通过身份验证进行身份验证 先做消息
我无法弄清楚异常是什么以及为什么我会收到此异常。
这是完整的程序。在此我尝试与rediffmail服务器进行 TLS 连接。
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
class rediff {
public static void main(String args[]) {
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.rediffmail.com");
props.put("mail.stmp.user", "from");
//To use TLS
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.password", "password");
Session session = Session.getDefaultInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
String username = "from";
String password = "password";
return new PasswordAuthentication("from", "password");
}
});
String to = "me@gmail.com";
String from = "from@rediff.com";
String subject = "Testing...";
MimeMessage msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(from));
msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to));
msg.setSubject(subject);
msg.setText("rediff program working...!");
Transport transport = session.getTransport("smtp");
transport.send(msg);
System.out.println("fine!!");
} catch(Exception exc) {
System.out.println(exc);
}
}
}
为什么我会得到这个例外?
答案 0 :(得分:1)
根据:http://www.techtalkz.com/microsoft-outlook/193842-pop3.html
在您的帐户设置中,启用“之前登录到传入服务器” 在您的帐户属性的“发送服务器”标签上发送邮件。如何 找到这些属性和选项卡是Outlook版本特定的,但你 决定信息并不重要。
该错误特定于您尝试从客户端使用的SMTP服务。这不是代码问题。检查您的rediffmail.com
帐户设置
答案 1 :(得分:0)
代码的问题是:
Transport transport = session.getTransport("smtp");
transport.send(msg);
send方法是一种静态方法,您不应该使用Transport类的实例访问它。它应该是 - Transport.send(msg);
答案 2 :(得分:-1)
您正在尝试使用TLS身份验证,但我没有在您的代码中看到任何端口设置。通常smtp服务器使用不同的端口进行TLS / SSL身份验证,尝试通过mail.smtp.socketFactory.port
进行设置。对于TLS,默认值为587
,对于SSL - 993
,据我所知。
props.put("mail.smtp.socketFactory.port", port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");