天天看點

java通過javamail進行郵件發送(帶檔案附件)spring mvc版本springboot版本

spring mvc版本

jar包

通過maven引入jar包

<javax.mail.version>1.5.0-b01</javax.mail.version>
           
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>${javax.mail.version}</version>
</dependency>
           

引入成功後,就可以在代碼裡面引入

java代碼

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.List;

/**
 * @Project xiangweihui
 * @PackageName com.xiangweihui.core.bean
 * @ClassName SendEmailMessageBean
 * @Author jiahong.xing
 * @Date 2019/7/19 11:44
 * @Description 發送郵件對象
 */
@ToString
@Getter
@Setter
public class SendEmailMessageBean {

    //發送位址
    private String toMail;

    //标題
    private String title;


    //發送内容
    private String cont;

    //檔案對象
    private List<EmailFileBean> fileList;

    //發送備注/作用
    private String info;

    public SendEmailMessageBean() {
    }

    public SendEmailMessageBean(String toMail, String title, String cont, String info) {
        this.toMail = toMail;
        this.title = title;
        this.cont = cont;
        this.info = info;
    }
}
           

檔案對象

import lombok.Getter;
import lombok.Setter;

import java.io.File;

/**
 * @Project suishoukai-invoice
 * @PackageName com.suishoukai.invoice.core.bean
 * @ClassName EmailFileBean
 * @Author jiahong.xing
 * @Date 2019/5/6 17:57
 * @Description 郵件檔案對象
 */
@Getter
@Setter
public class EmailFileBean {

    //名稱
    private String name;

    //檔案
    private File file;

}
           

發送郵件核心代碼

/**
     * 根據所有資訊發送郵件,支援代理,直接發送,不異步
     *
     * @return
     */
    public static void sendEmail(SendEmailMessageBean sendEmailMessageBean) {
        //發送位址
        String toMail = sendEmailMessageBean.getToMail();
        //标題
        String title = sendEmailMessageBean.getTitle();
        //發送内容
        String cont = sendEmailMessageBean.getCont();

        // 2017.5.24因為不支援代理改變寫法
        if (!RegularUtil.testByRegular(toMail, RegularUtil.email_verify)) {
            throw new Exceptions("郵件位址格式錯誤:" + toMail);
        }

        EmailSetting emailSetting = SettingUtil.getEmailSetting();
        
        //SMTP伺服器位址
        String smtpHost = emailSetting.getSmtpHost();
        //SMTP伺服器位址(端口)
        String smtpPort = emailSetting.getSmtpPort();
        //發件人
        String smtpFromMail = emailSetting.getSmtpFromMail();
        //SMTP使用者名
        String smtpUsername = emailSetting.getSmtpUsername();
        //SMTP密碼
        String smtpPassword = emailSetting.getSmtpPassword();

        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
            javaMailSender.setHost(smtpHost);
            javaMailSender.setPort(Integer.parseInt(smtpPort));
            javaMailSender.setUsername(smtpUsername);
            javaMailSender.setPassword(smtpPassword);

            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
            mimeMessageHelper.setFrom(MimeUtility.encodeWord(emailSetting.getEmail_name()) + " <" + smtpFromMail + ">");
            mimeMessageHelper.setSubject(title);
            mimeMessageHelper.setTo(toMail);
            //處理檔案
            if (CollectionUtils.isNotEmptyCollection(sendEmailMessageBean.getFileList())) {
                for (EmailFileBean emailFileBean : sendEmailMessageBean.getFileList()) {
                    mimeMessageHelper.addAttachment(emailFileBean.getName(), emailFileBean.getFile());
                }
            }
            mimeMessageHelper.setText(cont, true);
            log.info("向" + toMail + "發送了一封郵件,标題為:" + title + ",内容為:" + cont);
            javaMailSender.send(mimeMessage);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
           

這裡可以用異步線程或者mq消息異步發送

效果

java通過javamail進行郵件發送(帶檔案附件)spring mvc版本springboot版本

已完成了郵件發送

springboot版本

需要在Configuration裡進行spring注入即可

注入同時加入了靜态引用

@Bean
    public JavaMailSender javaMailSender() {
        JavaMailSender javaMailSender = new JavaMailSenderImpl();
        Properties javaMailProperties = new Properties();
        javaMailProperties.setProperty("mail.smtp.auth", "true");
        javaMailProperties.setProperty("mail.smtp.timeout", "5000");
        javaMailProperties.setProperty("mail.smtp.starttls.enable", "false");
        javaMailProperties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

        ((JavaMailSenderImpl) javaMailSender).setJavaMailProperties(javaMailProperties);

        return javaMailSender;
    }

    @PostConstruct
    public void init() {
        //郵件
        JavaMailSenderImpl javaMailSender = (JavaMailSenderImpl) javaMailSender();
        EmailUtil.javaMailSender = javaMailSender;
    }
           

調用java代碼和上面保持一緻的

可以進行線程異步發送和mq消息發送,這兩個的使用見以後的文章