# AskMe項(xiàng)目 郵件發(fā)送 Freemarker

這次的郵件發(fā)送功能實(shí)現(xiàn)了,當(dāng)用戶(hù)登錄時(shí),向某個(gè)郵箱發(fā)送登錄異常的郵件,還處在學(xué)習(xí)階段,過(guò)程可供參考

發(fā)送郵箱的相關(guān)設(shè)置

需要打開(kāi)郵箱的SMTP,POP3等服務(wù)器連接,設(shè)置授權(quán)碼,之后的自動(dòng)發(fā)送中可以通過(guò)設(shè)置郵箱名的授權(quán)碼,來(lái)通過(guò)SMTP服務(wù)器發(fā)送郵件(打開(kāi)方法為登錄網(wǎng)頁(yè)版郵箱,在設(shè)置中查找相關(guān)的選項(xiàng)開(kāi)啟)

發(fā)送郵箱前的初始化

在SenMails類(lèi)中首先實(shí)現(xiàn)一個(gè)Bean初始化后的操作,即afterPropertiesSet中的內(nèi)容

@Service
public class SendMails implements InitializingBean {
    private JavaMailSenderImpl mailSender;
    private static final Logger logger= LoggerFactory.getLogger(SendMails.class) ;
    private FreeMarkerConfigurer freeMarkerConfigurer=new FreeMarkerConfigurer();
   
    //mailSender初始化
    @Override
    public void afterPropertiesSet() throws Exception {
        mailSender=new JavaMailSenderImpl();
        mailSender.setUsername("xxx@126.com");//設(shè)置發(fā)送郵箱名
        mailSender.setPassword("****");//設(shè)置Password
        mailSender.setHost("smtp.126.com");//設(shè)置郵箱SMTP服務(wù)器地址(可以在郵箱服務(wù)網(wǎng)站上找到)
        mailSender.setPort(465);
        //設(shè)置端口號(hào) !??!這里不要按照郵箱網(wǎng)站提供的端口,一開(kāi)始用126提供的25,報(bào)錯(cuò),后來(lái)在StackOverflow上找解決方法,改成465就好使了
        mailSender.setProtocol("smtps");//設(shè)置協(xié)議
        mailSender.setDefaultEncoding("utf8");//設(shè)置默認(rèn)編碼方式
        Properties javaMailProperties=new Properties();
        javaMailProperties.put("mail.smtp.auth", "true");
        javaMailProperties.put("mail.smtp.ssl.enable", "true");
        javaMailProperties.put("mail.smtp.socketFactory.fallback", "true");
        mailSender.setJavaMailProperties(javaMailProperties);
    }
}

具體郵件發(fā)送功能實(shí)現(xiàn)

//to--發(fā)給誰(shuí)  subject---標(biāo)題  template---模板  model---模板中變量的替換
    public boolean sendWithHTMLTemplate(String to, String subject, String template, Map<String,Object> model)
    {
        try
        {
            String nick = MimeUtility.encodeText("AskMe系統(tǒng)消息");
            InternetAddress from = new InternetAddress(nick + "<lily_young@126.com>");//加了一個(gè)昵稱(chēng)的發(fā)件人
            MimeMessage mimeMessage = mailSender.createMimeMessage();//創(chuàng)建郵件文本
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
            Configuration configuration=new Configuration();

            freeMarkerConfigurer.setConfiguration(configuration);
            Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate(template);
            String result = FreeMarkerTemplateUtils.processTemplateIntoString(tpl,model);
            //設(shè)置郵件發(fā)送的模板,和傳進(jìn)去的相關(guān)參數(shù)model
            mimeMessageHelper.setTo(to);
            mimeMessageHelper.setFrom(from);
            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(result, true);//第二個(gè)參數(shù)true說(shuō)明text是html格式的
            mailSender.send(mimeMessage);//發(fā)送
        }
        catch(Exception e)
        {
            logger.error("發(fā)送郵件失敗"+e);
            return false;
        }
        return true;
    }

發(fā)郵件的Handler

@Component
public class LoginExceptionHandler implements EventHandler{

    @Autowired
    SendMails sendMails;

    @Autowired
    UserService userService;

    @Override
    public void doHandle(EventModel event) {
        Map<String,Object> map=new HashMap<String,Object>();
        map.put("username",userService.getuserbyid(event.getUserid()).getName());
        sendMails.sendWithHTMLTemplate(event.getkeyvalue("mail"),"用戶(hù)登錄異常","/src/main/resources/templates/mails/LoginException.html",map);

    }

    @Override
    public List<EventType> getSupportEventType() {
        return Arrays.asList(EventType.LOGIN);
    }
}

在登錄頁(yè)面的Controller向異步隊(duì)列添加事件

eventProducer.fireEvent(new EventModel().setkeyvalue("mail","xx@xx.com").setUserid(userservice.getUserByName(username).getId()).setEventype(EventType.LOGIN));
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容