问题①: java发送qq邮件出现以下错误的解决方法:java
503 Error: need EHLO and AUTH first !spring
pop.put("mail.smtp.auth", "true");//注意value值不能不设置,而且不能是Boolean类型,应为字符串,不然会报如上所示错误问题②: Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1安全
缘由:socket
465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议.ide
解决方法:测试
配置文件须要加上以下代码便可解决.ui
pop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
附上全部的代码:this
配置文件:.net
mail: mailhost: smtp.qq.com mailport: 465 user: 邮箱用户名 password: 密码(qq为受权码) mailFrom: xxx@foxmail.com mailTo: xxx@qq.com,xxx@qq.com,xxx@foxmail.com properties: mail: smtp: auth: true mailtimeout: 1000 mailssl: javax.net.ssl.SSLSocketFactory starttls: enable: true required: truejava代码:code
@Value("${mailhost}") private String host; @Value("${mailport}") private Integer port; @Value("${user}") private String username; @Value("${password}") private String password; @Value("${mailFrom}") private String from; @Value("${mailTo}") private String [] to; @Value("${auth}") private String auth; @Value("${enable}") private Boolean enable; @Value("${required}") private Boolean required; @Value("${mailtimeout}") private Integer timeout; @Value("${mailssl}") private String ssl; public void onApplicationEvent(ApplicationEvent event) { System.out.println("email cfg...."); System.out.println("print:"+this.toString()); //建立一个发送者对象 JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setHost(this.host); mailSender.setPort(this.port); mailSender.setUsername(this.username); mailSender.setPassword(this.password); // 加认证机制 Properties pop = new Properties(); pop.put("mail.smtp.host", this.host); // pop.put("mail.smtp.port", this.port);//已经在上面加过 pop.put("mail.smtp.auth", this.auth);//必须是字符串而不能是boolean不然报错 pop.put("mail.smtp.starttls.enable", this.enable); pop.put("mail.smtp.timeout", this.timeout); pop.put("mail.smtp.socketFactory.class", this.ssl); mailSender.setJavaMailProperties(pop); //组织邮件参数并执行发送 SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(this.from); message.setTo(this.to); message.setSubject("主题:测试,spring boot发送邮件."); message.setText("测 试\n 邮件为程序发送,是否收到?请回答"); mailSender.send(message); System.out.println("send end...."); } @Override public String toString() { return "EmailConfiguration [host=" + host + ", port=" + port + ", username=" + username + ", password=" + password + ", from=" + from + ", to=" + to + ", auth=" + auth + ", enable=" + enable + ", required=" + required + ", timeout=" + timeout + "]"; }