用Javamail发送邮件时,在Transport.send时卡住,不报错没有异常

wang_pangHu 2019-04-09 03:55:37
在本地发送邮件一切正常,
将项目部署到服务器上,
通过telnet 邮箱服务器及端口 可以连接邮箱服务器,
但是执行发送邮件时执行到最后一步 Transport.send(message) 卡住,没有报错也没有异常:
// 初始化连接邮件服务器的会话信息
private static Properties props = null;

static {
props = new Properties();
props.setProperty("mail.transport.protocol", PROTOCOL);
props.setProperty("mail.smtp.host", HOST);
props.setProperty("mail.smtp.port", PORT);
props.setProperty("mail.smtp.auth", IS_AUTH);
props.setProperty("mail.debug",IS_ENABLED_DEBUG_MOD);
}

/**
* 向邮件服务器提交认证信息
*/
static class MyAuthenticator extends Authenticator {

private String username = "用户名";

private String password = "密码";

public MyAuthenticator() {
super();
}

public MyAuthenticator(String username, String password) {
super();
this.username = username;
this.password = password;
}

@Override
protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(username, password);
}
}

//发送带附件邮件
public static void sendMultipleEmail(String fileNames,String subject,String content,String toUsers) {
String charset = "utf-8"; // 指定中文编码格式
// 创建Session实例对象
Session session = Session.getInstance(props,new MyAuthenticator());
_log.info("设置邮箱服务器及端口成功");
// 创建MimeMessage实例对象
MimeMessage message = new MimeMessage(session);
// 设置主题
try {
message.setSubject(subject);
message.setFrom(new InternetAddress(from,"张三",charset));

_log.info("设置邮件主题:"+subject);
// 设置发送人

_log.info("设置邮件发件人:"+from);

// 设置收件人
String[] toUserArr = toUsers.split(";");
Address[] address = null;
if (toUserArr.length > 0) {
address = new InternetAddress[toUserArr.length];
for (int i = 0; i < toUserArr.length; i++) {

address[i] = new InternetAddress(toUserArr[i],toUserArr[i],charset);

}
}
message.setRecipients(RecipientType.TO,address);

_log.info("设置邮件收件人:"+toUsers);

// 设置发送时间
message.setSentDate(new Date());

// 设置优先级(1:紧急 3:普通 5:低)
message.setHeader("X-Priority", "3");

// 创建一个MIME子类型为"mixed"的MimeMultipart对象,表示这是一封混合组合类型的邮件
MimeMultipart mailContent = new MimeMultipart("mixed");
message.setContent(mailContent);

// 附件
String[] files = fileNames.split(";");
for (int i = 0; i < files.length; i++) {
MimeBodyPart attach = new MimeBodyPart();
DataSource ds = new FileDataSource(files[i]);
DataHandler dh = new DataHandler(ds);
attach.setDataHandler(dh);
attach.setFileName(MimeUtility.encodeText(files[i].substring(files[i].lastIndexOf("\\")+1)));
mailContent.addBodyPart(attach);
}

MimeBodyPart mailBody = new MimeBodyPart();

// 将附件和内容添加到邮件当中
mailContent.addBodyPart(mailBody);

_log.info("添加附件");

// 邮件正文
MimeMultipart body = new MimeMultipart("related"); //邮件正文也是一个组合体,需要指明组合关系
mailBody.setContent(body);

MimeBodyPart htmlPart = new MimeBodyPart();

body.addBodyPart(htmlPart);

// html邮件内容
MimeMultipart htmlMultipart = new MimeMultipart("alternative");
htmlPart.setContent(htmlMultipart);
MimeBodyPart htmlContent = new MimeBodyPart();
htmlContent.setContent( content, "text/html;charset=gbk");
htmlMultipart.addBodyPart(htmlContent);
_log.info("设置正文:"+content);
// 保存邮件内容修改
message.saveChanges();
_log.info("保存修改");

// 发送邮件
Transport.send(message);
_log.info("发送成功");
} catch (MessagingException e) {
_log.error("邮件参数设置出错:"+e.getMessage());
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
_log.error("不支持的编码:"+e.getMessage());
e.printStackTrace();
}
}
请各路大神指出可能的原因,谢谢!
...全文
2096 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 z_open 的回复:
楼主怎么解决的
请问楼主怎么解决的?
z_open 2020-03-08
  • 打赏
  • 举报
回复
楼主怎么解决的
济南彭于晏 2019-04-12
  • 打赏
  • 举报
回复
看看是不是你的邮箱发送的内容进了黑名单了。我也遇到过,把发件人换一个试试
wang_pangHu 2019-04-12
  • 打赏
  • 举报
回复
问题找到了,是由于虽然可以登录邮箱服务器,但是邮箱服务器无法给出回应,而在邮箱设置中没有设置超时时间,所以会在Transport.send处持续发送请求,不抛出异常

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧