我已经尝试了一个带有gmail的示例程序,该程序成功运行并尝试修改相同的outlook,主要是更改服务器和端口名称。得到如下错误:
javax.mail.MessagingException:无法连接到SMTP主机:smtp.outlook.com,port:25;嵌套异常是: javax.net.ssl.SSLException:无法识别的SSL消息,明文连接?
这是我的代码如下:
package mailsend;
import javax.mail.Authenticator;
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 Outlook {
final String senderEmailID = "xxx";
final String senderPassword = "xxx";
final String emailSMTPserver = "smtp.outlook.com";
//final String emailSMTPserver = "Smtp.live.com";
final String emailServerPort = "25";
String receiverEmailID = null;
static String emailSubject = "Test Mail";
static String emailBody = ":)";
//mail.smtp.ssl.enable = "true";
public Outlook(String receiverEmailID, String Subject, String Body) {
this.receiverEmailID = receiverEmailID;
this.emailSubject = Subject;
this.emailBody = Body;
Properties props = new Properties();
//System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
props.put("mail.smtp.user", senderEmailID);
props.put("mail.smtp.host", emailSMTPserver);
props.put("mail.smtp.port", emailServerPort);
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", emailServerPort);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.ssl.enable", "true");
/*prop key="mail.smtp.starttls.enable" */
SecurityManager security = System.getSecurityManager();
//mail.smtp.ssl.enable "true"
try {
// SMTPAuthenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, new SMTPAuthenticator("xxx", xxx"));
MimeMessage msg = new MimeMessage(session);
msg.setText(emailBody);
msg.setSubject(emailSubject);
msg.setFrom(new InternetAddress(senderEmailID));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(receiverEmailID));
Transport.send(msg);
//sendMessage(msg, msg.getAllRecipients());
System.out.println("Message send Successfully:)");
}
catch (Exception mex) {
mex.printStackTrace();
}
}
public class SMTPAuthenticator extends Authenticator {
String user;
String pwd;
SMTPAuthenticator(String senderEmailID, String senderPassword) {
super();
this.user = senderEmailID;
this.pwd = senderPassword;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, pwd);
}
}
public static void main(String[] args) {
Outlook obj1 = new Outlook("xxx", "hi", "test");
}
}
答案 0 :(得分:0)
您必须使用端口587上的TLS连接到smtp-mail.outlook.com。