smilec3150 2017-01-11 07:34 采纳率: 0%
浏览 3432

Java利用163邮箱发送邮件出现问题,卡了我几天了,求大神为我解答!!!

我smtp服务开了,邮件可以发送,但是问题是
我第一次开启tomcat 发邮件填写正确密码,可以成功发送,如果再不重启tomcat的情况发再次发送邮件,就不管输入什么密码都能发送成功。
同样的,第一次发送邮件 如果输入的是错误的密码,在不重启tomcat的情况下 再次发送邮件 输入正确密码,还是提示身份验证失败。 求大神为我解惑啊。。

    public String findMail() throws Exception {
        try {

            Properties pro = new Properties();
            pro.put("mail.smtp.host", "smtp.163.com");
            pro.put("mail.smtp.auth", "true");
            // SSL加密
            pro.put("mail.smtp.ssl.enable", "true");
            pro.put("mail.smtp.ssl.socketFactory", "465");
            // 根据邮件的会话属性构造一个发送邮件的Session,这里需要注意的是用户名那里不能加后缀,否则便不是用户名了
            // 还需要注意的是,这里的密码不是正常使用邮箱的登陆密码,而是客户端生成的另一个专门的授权码
            MailAuthenticator authenticator = new MailAuthenticator(username, password);
            Session session = Session.getDefaultInstance(pro, authenticator);
            // 根据Session 构建邮件信息
            Message message = new MimeMessage(session);
            // 创建邮件发送者地址
            Address from = new InternetAddress(username);
            // 设置邮件消息的发送者
            message.setFrom(from);
            // 验证收件人邮箱地址
            List<String> toAddressList = new ArrayList<>();
            toAddressList.add(toemail);
            StringBuffer buffer = new StringBuffer();
            if (!toAddressList.isEmpty()) {
                String regEx = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
                Pattern p = Pattern.compile(regEx);
                for (int i = 0; i < toAddressList.size(); i++) {
                    Matcher match = p.matcher(toAddressList.get(i));
                    if (match.matches()) {
                        buffer.append(toAddressList.get(i));
                        if (i < toAddressList.size() - 1) {
                            buffer.append(",");
                        }
                    }
                }
            }
            String toAddress = buffer.toString();
            if (!toAddress.isEmpty()) {
                // 创建邮件的接收者地址
                Address[] to = InternetAddress.parse(toAddress);
                // 设置邮件接收人地址
                message.setRecipients(Message.RecipientType.TO, to);
                // 邮件主题
                // message.setSubject("java邮件测试");
                message.setSubject(subject);
                // 邮件容器
                MimeMultipart mimeMultiPart = new MimeMultipart();
                // 设置HTML
                BodyPart bodyPart = new MimeBodyPart();
                // 邮件内容
                String htmlText = body;
                bodyPart.setContent(htmlText, "text/html;charset=utf-8");
                mimeMultiPart.addBodyPart(bodyPart);
                // 添加附件
                List<String> fileAddressList = new ArrayList<String>();
                fileAddressList.add(file);
                if (fileAddressList != null) {
                    BodyPart attchPart = null;
                    for (int i = 0; i < fileAddressList.size(); i++) {
                        if (!fileAddressList.get(i).isEmpty()) {
                            attchPart = new MimeBodyPart();
                            // 附件数据源
                            DataSource source = new FileDataSource(
                                    fileAddressList.get(i));
                            // 将附件数据源添加到邮件体
                            attchPart.setDataHandler(new DataHandler(source));
                            // 设置附件名称为原文件名
                            attchPart.setFileName(MimeUtility.encodeText(source.getName()));
                            mimeMultiPart.addBodyPart(attchPart);
                        }
                    }
                }
                message.setContent(mimeMultiPart);
                message.setSentDate(new Date());
                // 保存邮件
                message.saveChanges();
                // 发送邮件
                Transport.send(message);
                System.out.println("发送成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("错误原因:"+e);
        }
        return null;
    }

异常信息:javax.mail.AuthenticationFailedException: Authentication failed

  • 写回答

2条回答 默认 最新

  • JPF1024 2017-01-11 07:59
    关注

    没明白你要是做一个发送邮件的服务类,然后别人输入自己的邮箱去发送邮件?

    你可以检查下在最后发送请求时候的密码是不是你新输入的。。。。。。

    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用