请教!java mail如何跳过邮箱满的账号?

鲤鱼爱上猫 2019-07-18 01:53:47
我最近试着用java mail来发送邮件,但是如果收件人的邮箱满了的话,那么就会被退回,并且报522错误,
请问一下,如何能跳过邮箱满的用户,发送给其他用户


public static void Mail(){


String s1 = "邮件ID:" + "127" + "<br>"
+ "邮件主题:" + "第一次测试" + "<br>"
+ "发送时间:" + "2018-08-05" + "<br>";
// 1.创建一个程序与邮件服务器会话对象 Session
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "SMTP");
props.setProperty("mail.smtp.host", "smtp.163.com");
props.setProperty("mail.smtp.port", "25");
// 指定验证为true
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.timeout","1000");

// 验证账号及密码,密码需要是第三方授权码
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication("XXXXXXXX@163.com", "XXXXXXXX");
}
};
Session session = Session.getInstance(props, auth);

// 2.创建一个Message,它相当于是邮件内容
Message message = new MimeMessage(session);
// 设置发送者
try {
message.setFrom(new InternetAddress("gan141425@163.com"));
} catch (MessagingException e) {
e.printStackTrace();
}
// 设置发送方式与接收者
try {
//抄送
message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("XXXXXX@163.com"));
//收件人
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("XXXXXX@qq.com"));
//添加收件人
message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("XXXXXX@qq.com"));
} catch (MessagingException e) {
e.printStackTrace();
}
// 设置主题
try {
message.setSubject("邮件发送测试");
} catch (MessagingException e) {
e.printStackTrace();
}
// 设置内容
try {
message.setContent(s1, "text/html;charset=utf-8");
} catch (MessagingException e) {
e.printStackTrace();
}
//设置邮件上的时间
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str1 = "2019-01-19 14:29:55";
Date date = new Date();
try {
date = format1.parse(str1);
} catch (ParseException e) {
e.printStackTrace();
}
// try {
// message.setSentDate(date);
// System.out.println(date);
// } catch (MessagingException e) {
// e.printStackTrace();
// }

// 3.创建 Transport用于将邮件发送
try {
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
...全文
72 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-07-18
  • 打赏
  • 举报
回复
java doc写的很清楚 Transpot.send
If any of the recipient addresses is detected to be invalid by the Transport during message submission, a SendFailedException is thrown. Clients can get more detail about the failure by examining the exception. Whether or not the message is still sent successfully to any valid addresses depends on the Transport implementation.
如果出错就不发送了,是否要继续发送,取决于Transport的实现
所以你可以自己写个类继承Transport,重写sendMessage(Message msg, Address[] addresses)方法,里面调用Transpot.send,根据抛出的SendFailedException异常,调用getValidUnsentAddresses()获得未发送的邮箱,然后继续Transpot.send,知道最后getValidUnsentAddresses()没有未发送的邮箱

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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