java发送邮件常见问题
用java发送邮件,首先我们使用的email服务器是smtp.163.com,qq服务器现在使用非常麻烦,不赞成使用,推荐163邮箱.好进入正题,发送邮件最主要的就是发送邮箱的用户名和登录密码要正确!!!!可是163邮箱对第三方客户端验证的是授权密码,典型的报错形式见图:
这是因为你填写的密码是你在浏览器中的登录密码,而应该授权码,见图设置你的授权码:
这样就可以解决535的问题.
还有一个就是553的问题
这个问题就是:163邮箱要求发送邮箱服务器和发送邮箱必须一致,在会给发邮件,比如发送邮箱服务器为:a@163.com,发送邮箱必须为a@163.com,而不是b@163.com或者ab@163.com,这样就能正常发邮件了,附上一段能够正常发邮件的代码:
Properties props = new Properties();
props.setProperty(“mail.debug”, “”);
props.setProperty(“mail.smtp.auth”, “true”);
props.setProperty(“mail.transport.protocol”, “smtp”);
props.setProperty(“mail.smtp.host”, “smtp.163.com”);
props.setProperty(“mail.smtp.port”, “25”);
Session session = Session.getInstance(props);
session.setDebug(true);
Message msg = new MimeMessage(session);
//邮件体
MimeMultipart mmt = new MimeMultipart();
//一个具体的邮件体
MimeBodyPart bodyPart = new MimeBodyPart();
//发送邮件的正文内容
bodyPart.setContent("hello 你好,我给你发了邮件咯","text/html;charset=utf-8");
//把邮件体添加到邮件
mmt.addBodyPart(bodyPart);
//设置邮件内容
msg.setContent(mmt);
//设置邮件标题
msg.setSubject("账户操作");
//发件人邮箱必须与发件服务器相同
msg.setFrom(new InternetAddress("a@163.com"));
Transport transport = session.getTransport();
transport.connect("smtp.163.com", 25, 用户名, 你的密码);
//new Address[]{new InternetAddress("b@163.com")} 收件人邮箱地址
transport.sendMessage(msg, new Address[]{new InternetAddress(recevier)});
transport.close();