a_wing啊 2021-04-11 22:43 采纳率: 50%
浏览 103
已结题

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管理页面里队列是这样的

有人知道怎么解决吗?

  • 写回答

2条回答 默认 最新

  • 关注

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

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月23日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器