我用的是网易邮箱, spring 封装了一个简单易用的关于邮件发送的工具类JavaMailSenderImpl ,所以可以用JavaMailSenderImpl 来实现邮件发送。当然还需引入java的email包,我用的是javax.mail-1.5.2.jar(当然你也可以用java直接发送邮件)
这是代码
public class send{
private static final String HOST = "smtp.163.com";
private static final String USERNAME = "账号@163.com";private static final String PASSWORD = "授权码";
private static final String EMAILFORM = "账号@163.com";
private static final int PORT = 25;
private JavaMailSenderImpl mailSender = createMailSender();
/**
* 邮件发送器
*
* @return 配置好的工具
*/
public JavaMailSenderImpl createMailSender() {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost(HOST);
sender.setPort(PORT);
sender.setUsername(USERNAME);
sender.setPassword(PASSWORD);
sender.setDefaultEncoding("utf-8");
Properties p = new Properties();
p.setProperty("mail.smtp.timeout", "25000");
p.setProperty("mail.smtp.auth", "false");
sender.setJavaMailProperties(p);
return sender;
}
/**
* 发送邮件
*
* @param to 接受人
* @param subject 主题
* @param html 发送内容
* @throws MessagingException 异常
* @throws UnsupportedEncodingException 异常
*/
@RequestMapping(value="/find")
public void sendHtmlMail(String email, String subject, String html) throws MessagingException,UnsupportedEncodingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
// 设置utf-8或GBK编码,否则邮件会有乱码
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setFrom(EMAILFORM, "系统名称");
subject ="找回密码";
html="你的密码是";
messageHelper.setTo(email);
messageHelper.setSubject(subject);
messageHelper.setText(html, true);
mailSender.send(mimeMessage);
}
}
执行后总是遇到Mail from must equal authorized user 这个问题我困扰了很久,明明我填的账户授权码都对,就是这个问题,我还去断点调试发现变量里面的值都正确就是不知道怎么回事? 后来我才想到账户是不是有问题,结果才发现原来我的网易邮箱不是手机号@163.com而是前面还有个字母m,所以上面的USERNAME和EMAILFORM都错了,最后改好后终于成功运行了