Suh*_*pta 12 java gmail smtp javax.mail
此程序尝试发送电子邮件但会引发运行时异常:
javax.mail.AuthenticationFailedException: failed to connect, no password specified?
Run Code Online (Sandbox Code Playgroud)
当我提供正确的用户名和密码进行身份验证时,为什么会出现此异常?
发件人和收件人都有g-mail帐户.发件人和收件人都有g-mail帐号.发件人已禁用两步验证流程.
这是代码:
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
class tester {
public static void main(String args[]) {
Properties props = new Properties();
props.put("mail.smtp.host" , "smtp.gmail.com");
props.put("mail.stmp.user" , "username");
//To use TLS
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.password", "password");
//To use SSL
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session session = Session.getDefaultInstance( props , null);
String to = "me@gmail.com";
String from = "from@gmail.com";
String subject = "Testing...";
Message msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(from));
msg.setRecipient(Message.RecipientType.TO,
new InternetAddress(to));
msg.setSubject(subject);
msg.setText("Working fine..!");
Transport transport = session.getTransport("smtp");
transport.connect("smtp.gmail.com" , 465 , "username", "password");
transport.send(msg);
System.out.println("fine!!");
}
catch(Exception exc) {
System.out.println(exc);
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使在给出密码后我也得到了例外.为什么不进行身份验证?
小智 12
您需要将对象身份验证作为参数添加到会话中.如
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
"XXXX@gmail.com", "XXXXX");// Specify the Username and the PassWord
}
});
Run Code Online (Sandbox Code Playgroud)
现在你不会得到这种例外......
javax.mail.AuthenticationFailedException: failed to connect, no password specified?
Run Code Online (Sandbox Code Playgroud)
尝试创建一个javax.mail.Authenticator对象,并将其与属性对象一起发送到Session对象.
验证者 编辑:
您可以修改此选项以接受用户名和密码,您可以将它们存储在那里或任何您想要的地方.
public class SmtpAuthenticator extends Authenticator {
public SmtpAuthenticator() {
super();
}
@Override
public PasswordAuthentication getPasswordAuthentication() {
String username = "user";
String password = "password";
if ((username != null) && (username.length() > 0) && (password != null)
&& (password.length () > 0)) {
return new PasswordAuthentication(username, password);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
在您发送电子邮件的班级中:
SmtpAuthenticator authentication = new SmtpAuthenticator();
javax.mail.Message msg = new MimeMessage(Session
.getDefaultInstance(emailProperties, authenticator));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95591 次 |
| 最近记录: |