解决方案 »

  1.   

    正则表达式可以判断email正确与否
      

  2.   

    http://stevenjohn.iteye.com/blog/1058739
      

  3.   

     不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败
      

  4.   

    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;
    }
      

  5.   

    ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题
      

  6.   

    ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题群发其实就是把待发的地址放到一起,然后一个一个的发,和短信一样,不是一下子都发出去的,所以你要检查一个地址发送一个,不符合就跳过,检查下一个,直到所有地址循环一遍,循环结束再返回错误地址
      

  7.   

    ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题群发其实就是把待发的地址放到一起,然后一个一个的发,和短信一样,不是一下子都发出去的,所以你要检查一个地址发送一个,不符合就跳过,检查下一个,直到所有地址循环一遍,循环结束再返回错误地址
    好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人
      

  8.   

    有可能tos获取的收件人地址有问题,你有没有打印出来看看?
      

  9.   

    ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题群发其实就是把待发的地址放到一起,然后一个一个的发,和短信一样,不是一下子都发出去的,所以你要检查一个地址发送一个,不符合就跳过,检查下一个,直到所有地址循环一遍,循环结束再返回错误地址
    好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人哦,那我知道是怎么回事了,你说的这种问题我遇到过,不过我是在局域网里,公司内部邮件,用的Outlook Express,每次发送都会检查,如果有地址不存在,那就一个都不能发送,这应该是正常现象
      

  10.   

    ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题群发其实就是把待发的地址放到一起,然后一个一个的发,和短信一样,不是一下子都发出去的,所以你要检查一个地址发送一个,不符合就跳过,检查下一个,直到所有地址循环一遍,循环结束再返回错误地址
    好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人哦,那我知道是怎么回事了,你说的这种问题我遇到过,不过我是在局域网里,公司内部邮件,用的Outlook Express,每次发送都会检查,如果有地址不存在,那就一个都不能发送,这应该是正常现象是啊 ,我发现客户端发送能跳过无效地址,就是不知道JavaMail怎么处理
      

  11.   

    ++ 不是地址格式问题,是比如[email protected]这个邮件地址不存在,就会发送失败或者能不能解决一个地址有问题 群发的全部邮件都失败的问题群发其实就是把待发的地址放到一起,然后一个一个的发,和短信一样,不是一下子都发出去的,所以你要检查一个地址发送一个,不符合就跳过,检查下一个,直到所有地址循环一遍,循环结束再返回错误地址
    好像不能再发送前检查地址,还有就是如果按你这样说的一个一个发 收件人那看到的就不是群发。 我要收件人也知道这是群发邮件 看得到所有收件人哦,那我知道是怎么回事了,你说的这种问题我遇到过,不过我是在局域网里,公司内部邮件,用的Outlook Express,每次发送都会检查,如果有地址不存在,那就一个都不能发送,这应该是正常现象是啊 ,我发现客户端发送能跳过无效地址,就是不知道JavaMail怎么处理你理解错了吧,如果其中一个地址不存在,那这封邮件就不能发送,这是正常现象,不会跳过无效地址的
      

  12.   

    将收件人地址设置成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邮件发送程序,在配置文件中配置配置邮件内容,收件人信息。
      

  13.   

    将收件人地址设置成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邮件发送程序,在配置文件中配置配置邮件内容,收件人信息。不是地址格式上的检测,是某个邮箱地址看上去是合法,但实际不存在这个用户的情况下  就会失败,也不能跳过有问题的地址继续发送
      

  14.   

    将收件人地址设置成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[] 设置收件人地址,就会跳过不存在地址,继续发送。上面的实例是测试通过的。
      

  15.   

    好像用smtp命令可以判定邮件地址是否有效.
    通过邮箱专用smtp命令,尝试向邮箱发送邮件,邮箱服务器会返回邮箱是否真实存在,实际上并不发送邮件。
    http://www.hbcms.com/cms/e7/361.html
      

  16.   

    参见
    http://www.cnblogs.com/Rockay/archive/2009/05/29/1491771.html
      

  17.   

    我也遇到群发失败的问题,其实很好解决,
    1.在catch里拿到SendFailedException,
    2.校验下是否能转为SMTPAddressFailedException如果能转型,则转型
    3.从SMTPAddressFailedException里能拿到校验不通过的用户,从收件人地址里删除,然后重发即可
    多了一次发送请求而已。