Java mail使用QQ邮箱发送邮件配置方案

Java mail使用QQ邮箱发送邮件配置方案

java mail配置了QQ邮箱作为服务器发送邮件,结果导致出现503异常:

Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl). 

如果要正确发送邮件,需要确定几件事情:

QQ邮箱的POP3/SMTP服务已开启,并获取授权码(当密码使用)

Java mail使用QQ邮箱发送邮件配置方案_第1张图片

正确的邮件服务配置

我使用的是零配置的方式:

 @Bean(name = "javaMailSender")
    public JavaMailSenderImpl javaMailSender(){
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
        javaMailSender.setHost("smtp.qq.com");
        javaMailSender.setPort(465);
        javaMailSender.setUsername("邮箱名@foxmail.com");
        javaMailSender.setPassword("授权码");
        Properties properties = new Properties();
        properties.setProperty("mail.host", "smtp.qq.com");
        properties.setProperty("mail.transport.protocol", "smtp");
        properties.setProperty("mail.smtp.auth", "true");
        properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        properties.setProperty("mail.smtp.port", "465");
        properties.setProperty("mail.smtp.socketFactory.port", "465");

        javaMailSender.setJavaMailProperties(properties);
        return javaMailSender;
    }
@Autowired
JavaMailSenderImpl javaMailSender;

public void sendMail(String code) {
        MimeMessage mailMessage = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true, "utf-8");
            helper.setFrom("邮箱名@foxmail.com");// 设置发件人
            helper.setTo("收件人@163.com");// 设置收件人
//            helper.setCc(cc);// 设置抄送
            helper.setSubject("验证码");// 设置主题
            helper.setText("验证码:【"+code+"】");// 邮件体
            javaMailSender.send(mailMessage);// 发送邮件
            log.info("邮件发送成功...");
        } catch (Exception e) {
            log.error("邮件发送发生异常:" + e.getMessage(), e);
            try {
                Thread.sleep(1000 * 1000);
                this.sendMail(code);
            } catch (InterruptedException e1) {
                log.error("重发邮件发生异常:" + e1.getMessage(), e1);
            }
        }
    }

这里面最重要的是端口【mail.smtp.port】和协议【mail.transport.protocol】,一定不能写错。

另外,如果不是QQ邮箱,可以参考以下配置:

配置一个邮件发送类,然后再配置一个任务线程池,每次发送邮件的时候,将发送任务放到任务线程池中,提高性能,减少发送邮件过程对性能的影响。

    /**
     * 邮件发送类
     * @return
     */
    @Bean(name="javaMailSender")
    public JavaMailSender javaMailSender(){
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
        javaMailSender.setDefaultEncoding(emailEncoding);
        javaMailSender.setHost(emailHost);
        javaMailSender.setPort(emailPort);
        javaMailSender.setUsername(emailUsername);
        javaMailSender.setPassword(emailPassword);
        Properties pp = new Properties();
        pp.setProperty("email.smtp.auth", "true");
        pp.setProperty("email.smtp.timeout", "50000");
        javaMailSender.setJavaMailProperties(pp);
        return javaMailSender;
    }
    /**
     * 任务线程池
     * @return
     */
    @Bean(name="taskExecutor")
    public ThreadPoolTaskExecutor taskExecutor(){
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(theadPoolMinSize);
        taskExecutor.setMaxPoolSize(theadPoolMaxSize);
        taskExecutor.setQueueCapacity(theadPoolQueueSize);
        taskExecutor.initialize();
        return taskExecutor;
    }
    @Autowired
    private JavaMailSender javaMailSender;
    @Autowired
    private ThreadPoolTaskExecutor taskExecutor;

    /**
     * 发送邮件
     * @param recipient 收件人
     * @param subject   主题(邮件标题)
     * @param content   邮件内容
     */
    public void sendMail(final String recipient, final String subject, final String content){
        taskExecutor.execute(new Runnable() {
            public void run() {
                try {
                    SimpleMailMessage message = new SimpleMailMessage();
                    message.setFrom(MAIL_FROM);
                    message.setTo(recipient);
                    message.setSubject(subject);
                    message.setText(content);
                    javaMailSender.send(message);
                } catch (Exception e) {
                    logger.error("邮件发送失败:", e);
                }
            }
        });
    }

你可能感兴趣的:(java,qq邮箱,邮件,Spring)