2 smilec3150 smilec3150 于 2017.01.11 15:34 提问

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个回答

dcxy0
dcxy0   Ds   Rxr 2017.01.11 15:59

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

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

smilec3150
smilec3150 回复dcxy0: 我用debug运行,最后发送请求的时候的密码都是我新输入的
一年多之前 回复
smilec3150
smilec3150 回复dcxy0: 是的,参数是都可以获取到的,现在的问题是验证身份只能验证一次,如果第一次验证通过了,那么接下来每一次不管输什么密码都能够验证通过
一年多之前 回复
dcxy0
dcxy0 回复smilec3150: 那也是可以的啊,SSH不也可以获取用户输入的参数?
一年多之前 回复
smilec3150
smilec3150 回复dcxy0: 主要是我们这个项目用的框架是SSH,这个是不能变的。
一年多之前 回复
dcxy0
dcxy0 回复smilec3150: 那你可以用servlet去做吧,让用户前台输入用户名和密码,然后你连接,在发送就可以了
一年多之前 回复
smilec3150
smilec3150 是的 做一个发送邮件的服务类,然后别人来发邮件,现在我是输入自己的邮箱和163的授权码,但是出现了上述问题
一年多之前 回复
yang292292
yang292292   2017.01.11 15:59

这个问题 貌似是你调用的
Session session = Session.getDefaultInstance(pro, authenticator);
这里的问题 你可以试试 使用 Session.getInstance 方法

smilec3150
smilec3150 回复shamyang: 这个方法我试过了,问题没有解决
一年多之前 回复
smilec3150
smilec3150 这个方法我试过了,问题解决不了
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
javaMail发邮件的模板代码,如果你用网易邮箱的账号发送邮件失败的话,可以看看
刚开始用的邮箱账号是在网易163刚注册的号码,结果总是失败,以为是自己的代码哪里有问题,可是和别人的代码对照检查了一遍,也没找到问题,十分纠结,突然想我使用的smtp发送的邮件,我查看了网易邮箱的设置有一个POP3/SMTP/IMAP选项: 点击后: 看到这个之后顿时感觉无语。。默认竟然是关闭STMP服务!!!! 所以换了一个公司的邮箱,腾讯的邮箱发送没问题,但是接收可能存在问题,但应该不是代码的问题。 package cn.Lionel.javamail; import java.io.Fi
javamail 通过163邮箱发送邮件
1.使用javamail的jar包 2.在163邮箱的设置中开启POP3/SMTP/IMAPpublic static boolean sendMail(String to, String code) { try { Properties props = new Properties(); props.put("userna
纯Java实现网易邮箱发送邮件
纯Java实现网易邮箱发送邮件 基于Java开发的邮件发送程序。因为使用的是网易的smtp服务器,所以发件人邮箱要求网页邮箱。博主亲测126邮箱和163邮箱有效,yeah邮箱没有测试。
使用JavaMail进行简单SMTP邮件发送测试,从网易邮箱发送到QQ邮箱
本文使用的JavaMail版本为1.5.2 import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication;
利用mail 发送163 邮件
//发送163邮箱代码 //所需的JAR包已上传commons-email-1.2.jar  如果有侵权,请作者联系,忘记原出处了 package test1; import org.apache.commons.mail.EmailException;   import org.apache.commons.mail.HtmlEmail;  public class MailUtil
使用javamail实现发送邮件(QQ邮箱和163邮箱)
今日研究了一下java发送邮件的程序,有两种方法,一种是用java.mail;一种是用commons-email。 一、JAVA Mail是很常用的用于发送邮件的包,我们可以从这里获取,或者在maven中添加如下配置: com.sun.mail javax.mail 1.5.5 示例代码如下:package cn.mail.test; import java.uti
Python3实现163邮箱SMTP发送邮件
SMTP协议 首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。 发送邮件之前的配置: 上面说了是使用SMTP协议发送的邮件,所以需要先查看你的发件人邮箱是否有开启SMTP协议,如没有,则需要开启,我测
phpmailer使用qq邮箱、163邮箱成功发送邮件实例代码
以前使用qq邮箱、163服务器发送邮件,帐号直接使用密码,现在不行了,得使用授权码,简单记录下 1、首先开通POP3/SMTP服务,qq邮箱——帐号——设置,找到POP3/SMTP点开启,输入短信会有授权码,复制好,发送邮件需要用到 2、下载phpmailer:https://github.com/PHPMailer/PHPMailer 下载后只取用到的: class.
java调用163邮箱发送邮件
1:注册一个163邮箱,http://mail.163.com 调用发送邮件代码,查询smtp.163.com,作为发送邮件的服务器ip,类似的邮箱服务器应该也可以。MailSenderInfo mailInfo = new MailSenderInfo(); mailInfo.setMailServerHost("121.195.178.51");//邮件服务器ip地址。smtp.163.co
怎么在 CSDN 博客中添加QQ 邮箱的邮我功能和网易邮箱的给我写信功能呢?马上给我写信吧2014.09
由于 CSDN 不支持外部的图片,而且相册功能也不能用了。所以我就想到了一个方法。聪明如你,可能已经想到了,那就是使用博客文章中的配图。这里我上传了一个邮我的图片: ,然后在QQ 邮箱-》设置-》账户下找到邮我的设置项。 获取响应按钮的代码,然后用博客中图片的地址进行替换,就可以了。