springboot+RabbitMQ实现简单邮件服务,邮件发不出去

springboot+RabbitMQ实现简单邮件服务,邮件发不出去

@Configuration
public class RabbitMQConfig {

    //自定义消息转换器
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }

    //定制fanout类型的交换器
    @Bean
    public Exchange fanout_exchange(){
        return ExchangeBuilder.fanoutExchange("fanout_exchange").build();
    }

    //定义1个消息队列
    @Bean
    public Queue fanout_queue_email(){
        return new Queue("fanout_queue_email");
    }

    //把1个消息队列与交换器进行绑定
    @Bean
    public Binding bindingEmail(){
        return BindingBuilder.bind(fanout_queue_email()).to(fanout_exchange()).with("").noargs();
    }
}
@Service
public class EmailService {
    @Autowired
    private JavaMailSenderImpl mailSender;

    @Value("${spring.mail.username}")
    private String from;

    public void sendSimpleEmail(String to,String title,String content){
        //制作纯文本邮件
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(title);
        message.setText(content);

        try {
            mailSender.send(message);
        } catch (MailException e) {
            e.printStackTrace();
        }
    }
}
public class Mail {
    private Integer id;
    private String to;
    private String subject;
    private String content;

    //省略getter setter toString方法
}
@Service
public class RabbitMQService {

    @Autowired
    EmailService emailService;
    /*
    * 发布/订阅工作模式,处理邮件业务
    */
    @RabbitListener(queues = "fanout_queue_email")
    public void publishSubscribeConsumerEmail(Mail mail){
        System.out.println("收到邮件信息:"+mail);
        emailService.sendSimpleEmail(mail.getTo(),mail.getSubject(),mail.getContent());
        System.out.println("邮件已发送");
    }
}

测试方法

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void rabbitMQ(){
        Mail mail = new Mail();
        mail.setId(2);
        mail.setTo("limiq@qq.com");     //测试时改为正常邮箱
        mail.setSubject("主题是什么");
        mail.setContent("内容是内容");
        rabbitTemplate.convertAndSend("fanout_exchange","",mail);
    }

测试虽然是绿的,但是邮件没发送到,我看控制台有这么个信息

Workers not finished.

RabbitMQ管理页面里队列是这样的

有人知道怎么解决吗?

有没有设置smtp 服务器呢?还有一些参数要对应官方说明哦

补充没发出来的内容,application.properties里关于邮件服务的一些配置:

#配置邮件服务(163邮箱
spring.mail.host=smtp.163.com
#测试时填上了正确的用户名和授权码,这里是问答所以暂时删了这些信息
spring.mail.username=abc@163.com
spring.mail.password=ONK
spring.mail.default-encoding=UTF-8
#配置邮件服务超时设置
spring.mail.properties.mail.smtp.connectiontime=10000
spring.mail.properties.mail.smtp.timeout=10000
spring.mail.properties.mail.smtp.writetimeout=10000