用javamail写了个群发邮件的程序,问题是如果一个收件地址错误,全部邮件都发不出去!?求解决办法 JavaMail 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 正则表达式可以判断email正确与否 http://stevenjohn.iteye.com/blog/1058739 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败 public static boolean sendEmails(String content, String title, String[] address) { if (title.length() > 30) { title = title.substring(0, 30) + "..."; } String receivers = ""; boolean isSend = false; try { Address[] tos = null; if (address != null && address.length != 0) { tos = new InternetAddress[address.length]; for (int i = 0; i < address.length; i++) { String s = address[i]; tos[i] = new InternetAddress(s); receivers += s + ","; } } Properties p = new Properties(); p.put("mail.smtp.auth", "true"); p.put("mail.transport.protocol", "smtp"); p.put("mail.smtp.host", "mail.XXX.com"); p.put("mail.smtp.port", "25"); Session session = Session.getInstance(p); Message msg = new MimeMessage(session); msg.setContent(content, "text/html;charset=utf8"); msg.setFrom(new InternetAddress("[email protected]")); msg.setRecipients(Message.RecipientType.TO, tos); msg.setSentDate(new Date()); msg.setSubject(title); msg.setContent(content, "text/html;charset=utf8"); Transport tran = session.getTransport("smtp"); tran.connect("mail.XXX.com", "[email protected]", "XXXXXX"); tran.sendMessage(msg, msg.getAllRecipients()); tran.isConnected(); isSend = true; } catch (Exception e) { isSend = false; } return isSend; } ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题 ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题群发其实就是把待发的地址放到一起,然后一个一个的发,和短信一样,不是一下子都发出去的,所以你要检查一个地址发送一个,不符合就跳过,检查下一个,直到所有地址循环一遍,循环结束再返回错误地址 ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题群发其实就是把待发的地址放到一起,然后一个一个的发,和短信一样,不是一下子都发出去的,所以你要检查一个地址发送一个,不符合就跳过,检查下一个,直到所有地址循环一遍,循环结束再返回错误地址好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人 有可能tos获取的收件人地址有问题,你有没有打印出来看看? ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题群发其实就是把待发的地址放到一起,然后一个一个的发,和短信一样,不是一下子都发出去的,所以你要检查一个地址发送一个,不符合就跳过,检查下一个,直到所有地址循环一遍,循环结束再返回错误地址好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人哦,那我知道是怎么回事了,你说的这种问题我遇到过,不过我是在局域网里,公司内部邮件,用的Outlook Express,每次发送都会检查,如果有地址不存在,那就一个都不能发送,这应该是正常现象 ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题群发其实就是把待发的地址放到一起,然后一个一个的发,和短信一样,不是一下子都发出去的,所以你要检查一个地址发送一个,不符合就跳过,检查下一个,直到所有地址循环一遍,循环结束再返回错误地址好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人哦,那我知道是怎么回事了,你说的这种问题我遇到过,不过我是在局域网里,公司内部邮件,用的Outlook Express,每次发送都会检查,如果有地址不存在,那就一个都不能发送,这应该是正常现象是啊 ,我发现客户端发送能跳过无效地址,就是不知道JavaMail怎么处理 ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题群发其实就是把待发的地址放到一起,然后一个一个的发,和短信一样,不是一下子都发出去的,所以你要检查一个地址发送一个,不符合就跳过,检查下一个,直到所有地址循环一遍,循环结束再返回错误地址好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人哦,那我知道是怎么回事了,你说的这种问题我遇到过,不过我是在局域网里,公司内部邮件,用的Outlook Express,每次发送都会检查,如果有地址不存在,那就一个都不能发送,这应该是正常现象是啊 ,我发现客户端发送能跳过无效地址,就是不知道JavaMail怎么处理你理解错了吧,如果其中一个地址不存在,那这封邮件就不能发送,这是正常现象,不会跳过无效地址的 将收件人地址设置成InternetAddress[] 具体操作为:InternetAddress[] tos= new InternetAddress[address.length];for (int i = 0; i < address.length; i++) { if(!address[i].trim().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)+$")){ System.exit(-1); } tos[i] = new InternetAddress(address[i].trim());}mimeMsg.setRecipients(MimeMessage.RecipientType.TO,tos);//设置收件人,抄送这样可以跳过不存在的地址。实例地址 http://download.csdn.net/detail/wenxinhanmei/5397705 java邮件发送程序,在配置文件中配置配置邮件内容,收件人信息。 将收件人地址设置成InternetAddress[] 具体操作为:InternetAddress[] tos= new InternetAddress[address.length];for (int i = 0; i < address.length; i++) { if(!address[i].trim().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)+$")){ System.exit(-1); } tos[i] = new InternetAddress(address[i].trim());}mimeMsg.setRecipients(MimeMessage.RecipientType.TO,tos);//设置收件人,抄送这样可以跳过不存在的地址。实例地址 http://download.csdn.net/detail/wenxinhanmei/5397705 java邮件发送程序,在配置文件中配置配置邮件内容,收件人信息。不是地址格式上的检测,是某个邮箱地址看上去是合法,但实际不存在这个用户的情况下 就会失败,也不能跳过有问题的地址继续发送 将收件人地址设置成InternetAddress[] 具体操作为:InternetAddress[] tos= new InternetAddress[address.length];for (int i = 0; i < address.length; i++) { if(!address[i].trim().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)+$")){ System.exit(-1); } tos[i] = new InternetAddress(address[i].trim());}mimeMsg.setRecipients(MimeMessage.RecipientType.TO,tos);//设置收件人,抄送这样可以跳过不存在的地址。实例地址 http://download.csdn.net/detail/wenxinhanmei/5397705 java邮件发送程序,在配置文件中配置配置邮件内容,收件人信息。不是地址格式上的检测,是某个邮箱地址看上去是合法,但实际不存在这个用户的情况下 就会失败,也不能跳过有问题的地址继续发送用InternetAddress[] 设置收件人地址,就会跳过不存在地址,继续发送。上面的实例是测试通过的。 好像用smtp命令可以判定邮件地址是否有效.通过邮箱专用smtp命令,尝试向邮箱发送邮件,邮箱服务器会返回邮箱是否真实存在,实际上并不发送邮件。http://www.hbcms.com/cms/e7/361.html 参见http://www.cnblogs.com/Rockay/archive/2009/05/29/1491771.html 我也遇到群发失败的问题,其实很好解决,1.在catch里拿到SendFailedException,2.校验下是否能转为SMTPAddressFailedException如果能转型,则转型3.从SMTPAddressFailedException里能拿到校验不通过的用户,从收件人地址里删除,然后重发即可多了一次发送请求而已。 能不能帮我看看这个函数 jar文件混淆问题 驾!jar!驾!jar!驾!jar!驾!jar!驾!jar!驾!jar!驾!jar! 恒生(基金事业部)怎么样? vector类型的数据在JTable显示问题 大家帮我看以下java代码,这些错误该如何解决?谢谢 菜鸟问问 菜鸟朋友问菜鸟一个问题,菜鸟不知做,请java高手帮忙啊??否则菜鸟的牛就白吹了!!! 新手的问题???? 求教这个功能怎么实现? 这道多线程的题目我搞不懂。。。求助 java C/S 数据库更新时如何通知java程序
if (title.length() > 30) {
title = title.substring(0, 30) + "...";
}
String receivers = "";
boolean isSend = false;
try {
Address[] tos = null;
if (address != null && address.length != 0) {
tos = new InternetAddress[address.length];
for (int i = 0; i < address.length; i++) {
String s = address[i];
tos[i] = new InternetAddress(s);
receivers += s + ",";
}
}
Properties p = new Properties();
p.put("mail.smtp.auth", "true");
p.put("mail.transport.protocol", "smtp");
p.put("mail.smtp.host", "mail.XXX.com");
p.put("mail.smtp.port", "25");
Session session = Session.getInstance(p);
Message msg = new MimeMessage(session); msg.setContent(content, "text/html;charset=utf8");
msg.setFrom(new InternetAddress("[email protected]"));
msg.setRecipients(Message.RecipientType.TO, tos);
msg.setSentDate(new Date());
msg.setSubject(title);
msg.setContent(content, "text/html;charset=utf8");
Transport tran = session.getTransport("smtp");
tran.connect("mail.XXX.com", "[email protected]", "XXXXXX");
tran.sendMessage(msg, msg.getAllRecipients());
tran.isConnected();
isSend = true;
} catch (Exception e) {
isSend = false;
}
return isSend;
}
好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人
好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人哦,那我知道是怎么回事了,你说的这种问题我遇到过,不过我是在局域网里,公司内部邮件,用的Outlook Express,每次发送都会检查,如果有地址不存在,那就一个都不能发送,这应该是正常现象
好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人哦,那我知道是怎么回事了,你说的这种问题我遇到过,不过我是在局域网里,公司内部邮件,用的Outlook Express,每次发送都会检查,如果有地址不存在,那就一个都不能发送,这应该是正常现象是啊 ,我发现客户端发送能跳过无效地址,就是不知道JavaMail怎么处理
好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人哦,那我知道是怎么回事了,你说的这种问题我遇到过,不过我是在局域网里,公司内部邮件,用的Outlook Express,每次发送都会检查,如果有地址不存在,那就一个都不能发送,这应该是正常现象是啊 ,我发现客户端发送能跳过无效地址,就是不知道JavaMail怎么处理你理解错了吧,如果其中一个地址不存在,那这封邮件就不能发送,这是正常现象,不会跳过无效地址的
InternetAddress[] tos= new InternetAddress[address.length];
for (int i = 0; i < address.length; i++) {
if(!address[i].trim().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)+$")){
System.exit(-1);
}
tos[i] = new InternetAddress(address[i].trim());
}
mimeMsg.setRecipients(MimeMessage.RecipientType.TO,tos);//设置收件人,抄送
这样可以跳过不存在的地址。实例地址 http://download.csdn.net/detail/wenxinhanmei/5397705 java邮件发送程序,在配置文件中配置配置邮件内容,收件人信息。
InternetAddress[] tos= new InternetAddress[address.length];
for (int i = 0; i < address.length; i++) {
if(!address[i].trim().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)+$")){
System.exit(-1);
}
tos[i] = new InternetAddress(address[i].trim());
}
mimeMsg.setRecipients(MimeMessage.RecipientType.TO,tos);//设置收件人,抄送
这样可以跳过不存在的地址。实例地址 http://download.csdn.net/detail/wenxinhanmei/5397705 java邮件发送程序,在配置文件中配置配置邮件内容,收件人信息。不是地址格式上的检测,是某个邮箱地址看上去是合法,但实际不存在这个用户的情况下 就会失败,也不能跳过有问题的地址继续发送
InternetAddress[] tos= new InternetAddress[address.length];
for (int i = 0; i < address.length; i++) {
if(!address[i].trim().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)+$")){
System.exit(-1);
}
tos[i] = new InternetAddress(address[i].trim());
}
mimeMsg.setRecipients(MimeMessage.RecipientType.TO,tos);//设置收件人,抄送
这样可以跳过不存在的地址。实例地址 http://download.csdn.net/detail/wenxinhanmei/5397705 java邮件发送程序,在配置文件中配置配置邮件内容,收件人信息。不是地址格式上的检测,是某个邮箱地址看上去是合法,但实际不存在这个用户的情况下 就会失败,也不能跳过有问题的地址继续发送
用InternetAddress[] 设置收件人地址,就会跳过不存在地址,继续发送。上面的实例是测试通过的。
通过邮箱专用smtp命令,尝试向邮箱发送邮件,邮箱服务器会返回邮箱是否真实存在,实际上并不发送邮件。
http://www.hbcms.com/cms/e7/361.html
http://www.cnblogs.com/Rockay/archive/2009/05/29/1491771.html
1.在catch里拿到SendFailedException,
2.校验下是否能转为SMTPAddressFailedException如果能转型,则转型
3.从SMTPAddressFailedException里能拿到校验不通过的用户,从收件人地址里删除,然后重发即可
多了一次发送请求而已。