Javamail代码发送失败
Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2
Using mechanism LOGIN
AUTH LOGIN command trace suppressed
解决办法:
登陆授权失败!
弄了半天,将上述代码开启安全协议改了下:
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.socketFactory.port", "465");
prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
最终发送成功了!!!
完整代码:
props = new Properties();
props.setProperty("mail.transport.protocol", PROTOCOL); // 邮件发送协议
props.setProperty("mail.smtp.host", HOST); // SMTP邮件服务器
props.setProperty("mail.smtp.port", PORT); // SMTP邮件服务器默认端口
props.setProperty("mail.smtp.auth", IS_AUTH); // 是否要求身份认证
props.setProperty("mail.debug", IS_ENABLED_DEBUG_MOD); // 是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息)
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
String sendEmail = SPUtils.getInstance().getString(LoginRepository.SEND_EMAIL);
String sendEmailPassword = SPUtils.getInstance().getString(LoginRepository.SEND_EMAIL_PASSWORD);
try {
MimeBodyPart fileBodyPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource(附件路径);//要发送的附件地址
fileBodyPart.setDataHandler(new DataHandler(fds));
fileBodyPart.setFileName(info.getName() + fds.getName());// 设置附件的名称
Multipart container = new MimeMultipart();
container.addBodyPart(fileBodyPart);
// 创建Session实例对象
Session session = Session.getDefaultInstance(props);
// 创建MimeMessage实例对象
MimeMessage message = new MimeMessage(session);
// 设置发件人
message.setFrom(new InternetAddress(sendEmail));
// 设置邮件主题
message.setSubject(String.format("%s 同学指纹", info.getName()));
// 设置收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 设置发送时间
message.setSentDate(new Date());
// 设置纯文本内容为邮件正文
// message.setText(text);
// message.setFileName(file.getAbsolutePath());
message.setContent(container, "utf-8"); // 添加 文本文件和附件
// 保存并生成最终的邮件内容
message.saveChanges();
// 获得Transport实例对象
Transport transport = session.getTransport();
// 打开连接
transport.connect(sendEmail, sendEmailPassword); //邮箱账户,授权码
transport.addTransportListener(new TransportListener() {
@Override
public void messageDelivered(TransportEvent transportEvent) {//全部成功
System.out.println("消息全部发送成功");
}
@Override
public void messageNotDelivered(TransportEvent transportEvent) {//全部失败
System.out.println("消息全部发送失败");
}
@Override
public void messagePartiallyDelivered(TransportEvent transportEvent) {//部分成功
System.out.println("消息部分发送成功");
}
});
// 将message对象传递给transport对象,将邮件发送出去
transport.sendMessage(message, message.getAllRecipients()); //未执行成功
// 关闭连接
transport.close();
} catch (MessagingException e) {
}
包:
// javamail[2019.2.19]
implementation 'com.sun.mail:android-mail:1.6.2'
implementation 'com.sun.mail:android-activation:1.6.2'