尝试使用Javamail从我的Java代码发送电子邮件时,我会得到异常。我正在尝试使用Gmail SMTP(SSL,端口465)。TLS作品(端口587)。
这是我在做的。
mailServerProperties = System.getProperties();
mailServerProperties.put("mail.smtp.port", "465");
mailServerProperties.put("mail.smtp.auth", "true");
mailServerProperties.put("mail.smtp.socketFactory.port", "465");
mailServerProperties.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
getMailSession = Session.getDefaultInstance(mailServerProperties, null);
generateMailMessage = new MimeMessage(getMailSession);
generateMailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(ei.getToaddr()));
generateMailMessage.setFrom(new InternetAddress(ei.getUser()));
generateMailMessage.setSubject(ei.getSubject());
generateMailMessage.setText(ei.getMessage());
transport = getMailSession.getTransport("smtp");
transport.connect("smtp.gmail.com", "user", "password");
获得此例外...
2017-10-01 06:53:51.094 UTC SEVERE: 2542: EnhancedEmailer.generateAndSendEmail: Exception sending email
Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2042)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697)
任何属性看起来都错了吗?
请按照以下步骤:
- 在您的电子邮件中禁用"两个因素身份验证"
- 导航到:" https://myaccount.google.com/lesssecureapps?pli=1",然后打开"访问较低的安全应用程序"
- 下载javamail api" https://www.oracle.com/technetwork/java/javamail/javamail/index-138643.html"
代码
import java.util.Properties;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class email_try {
public static void main(String ap[]) {
String myEmail = "YOUR EMAIL";
String password = "YOUR PASSWORD";
String opponentEmail = "THEIR EMAIL";
Properties pro = new Properties();
pro.put("mail.smtp.host", "smtp.gmail.com");
pro.put("mail.smtp.starttls.enable", "true");
pro.put("mail.smtp.auth", "true");
pro.put("mail.smtp.port", "587");
Session ss = Session.getInstance(pro, new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(myEmail, password);
}
});
try {
Message msg = new MimeMessage(ss);
msg.setFrom(new InternetAddress(myEmail));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(opponentEmail));
msg.setSubject("Your Wish");
msg.setText("java email app");
Transport trans = ss.getTransport("smtp");
Transport.send(msg);
System.out.println("message sent");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
//尝试此代码,并放置正确的电子邮件ID和密码
检查BLEW属性对我有效
props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
props.put("mail.smtp.socketFactory.port", "465"); //SSL Port
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory"); //SSL Factory Class
props.put("mail.smtp.auth", "true"); //Enabling SMTP Authentication
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", "465"); //SMTP Port
props.put("mail.smtp.ssl.enable", "true");
我也认为您的代码中缺少以下属性
props.put("mail.smtp.ssl.enable", "true");
请参阅链接到生成应用程序的密码。https://devanswers.co/create-application-percific-password-gmail/
然后尝试
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "smtp.gmail.com");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.debug", "true");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user,appPass);
}
}
);
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject(subject);
message.setText(body);
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
}