Spring mail 邮件服务

作者: ChinaXieShuai | 来源:发表于2017-08-22 21:24 被阅读35次

    业务发展的过程中,需要对业务的关键点进行监控,当监控到业务出现异常的时候,大多数时候希望以邮件的方式通知 干系人。Spring为我们提供了 发邮件 的工具类与接口

    applicationContext.xml 文件中添加:

    <context:property-placeholder location="classpath*:mailUrl.properties" />
    <!--email的配置-->
        <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
            <property name="host" value="${mail.host}" />
            <property name="username" value="${mail.username}" />
            <property name="password" value="${mail.password}" />
            <property name="defaultEncoding" value="UTF-8"></property>
            <property name="javaMailProperties">
                <props>
                    <prop key="mail.smtp.auth">true</prop>
                    <prop key="mail.from">${mail.username}</prop>
                    <prop key="mail.transport.protocol">smtps</prop>
                </props>
            </property>
        </bean>
    

    mailUrl.properties 文件的内容:

    mail.host=someonehost
    mail.username=someoneMailUserName
    mail.password=someoneMailPassWord
    

    此时,spring中mail配置已经做完了,只需要创建一个service进行发送邮件就行

    NotifyService 的内容为:

    import org.apache.commons.lang3.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMessageHelper;
    import org.springframework.stereotype.Service;
    
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeUtility;
    import java.io.File;
    import java.util.Map;
    
    /**
     * Created by shuai
     */
    @Service
    public class NotifyService {
    
        private static Logger logger = LoggerFactory.getLogger(NotifyService.class);
    
        @Autowired
        private JavaMailSender mailSender;
    
        public boolean notifyEmail(MailVo mail) {
            try {
                MimeMessage mimeMessage = mailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
                // 发送人
                if (null != mail.getMsgFrom()) {
                    helper.setFrom(mail.getMsgFrom());
                }
                // 密送
                if (null != mail.getBcc()) {
                    helper.setBcc(StringUtils.split(mail.getBcc(), ","));
                }
                // 抄送
                if (null != mail.getCc()) {
                    helper.setCc(StringUtils.split(mail.getCc(), ","));
                }
                // 收件人
                if (null != mail.getMsgTo()) {
                    helper.setTo(StringUtils.split(mail.getMsgTo(), ","));
                }
                // 邮件主题
                helper.setSubject(mail.getSubject());
                // 邮件的内容
                helper.setText(mail.getText(), true);
                // 附件
                if (null != mail.getAttachmentList()) {
                    for (Map.Entry<String, Object> entry : mail.getAttachmentList().entrySet()) {
                        if (entry.getValue() instanceof File) {
                            helper.addAttachment(MimeUtility.encodeText(entry.getKey()), (File) entry.getValue());
                        }
                    }
                }
                // 图片
                if (null != mail.getImagesList()) {
                    for (Map.Entry<String, Object> entry : mail.getImagesList().entrySet()) {
                        if (entry.getValue() instanceof File) {
                            helper.addInline(entry.getKey(), (File) entry.getValue());
                        }
                    }
                }
                // 发送邮件
                mailSender.send(mimeMessage);
                return true;
            } catch (Exception e) {
                logger.error("notify email error. informetion{}, 异常信息{}", mail, e);
                return false;
            }
        }
    }
    

    mailVo 文件的内容为:

    import java.io.Serializable;
    import java.util.Map;
    
    import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
    /**
     * Created by shuai
     */
    public class MailVo implements Serializable {
    
        private static final long serialVersionUID = 1L;
        // ID
        private long id;
        // 发送人
        private String msgFrom;
        // 收件人
        private String msgTo;
        // 密送
        private String bcc;
        // 抄送
        private String cc;
        // 主题
        private String subject;
        // 消息
        private String text;
        // 附件ID
        private String fileIds;
        // 图片ID
        private String imgIds;
        // 附件
        private Map<String, Object> attachmentList;
        // 图片
        private Map<String, Object> imagesList;
        // 状态
        private String status;
        // 响应消息
        private String resInfo;
    
        // getAndSetMethod()...
          
        @Override
        public String toString() {
            return ReflectionToStringBuilder.toString(this);
        }
    }
    

    此时只需要调用 NotifyService 中的方法就行了。

    MailVo mail = new MailVo();
    mail.setMsgTo("someOneEmailAddress");
    mail.setText("这是一个测试邮件发送的内容");
    mail.setSubject("测试的邮件Title");
    // 发送邮件
    notifyService.notifyEmail(mail);
    

    相关文章

      网友评论

        本文标题:Spring mail 邮件服务

        本文链接:https://www.haomeiwen.com/subject/quhrdxtx.html