java通过javamail进行邮件发送(带文件附件)

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消息异步发送

效果

已完成了邮件发送

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消息发送,这两个的使用见以后的文章

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
可以使用JavaMail API来发送附件邮件。下面是一个示例代码: ```java import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class SendEmailWithAttachment { public static void main(String[] args) { final String username = "your_email_address"; final String password = "your_email_password"; Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("from_address")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("to_address")); message.setSubject("Testing Subject"); // 创建一个多部分消息 Multipart multipart = new MimeMultipart(); // 创建文本消息部分 MimeBodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText("This is message body"); // 添加文本消息部分到多部分消息 multipart.addBodyPart(messageBodyPart); // 创建附件部分 MimeBodyPart attachPart = new MimeBodyPart(); // 读取附件文件 String filename = "attachment_file_path"; DataSource source = new FileDataSource(filename); attachPart.setDataHandler(new DataHandler(source)); attachPart.setFileName("attachment_file_name"); // 添加附件部分到多部分消息 multipart.addBodyPart(attachPart); // 将多部分消息设置为消息内容 message.setContent(multipart); // 发送消息 Transport.send(message); System.out.println("邮件已发送"); } catch (MessagingException e) { throw new RuntimeException(e); } } } ``` 在代码中,你需要替换以下变量: - `your_email_address`:你的邮箱地址 - `your_email_password`:你的邮箱密码 - `from_address`:发件人邮箱地址 - `to_address`:收件人邮箱地址 - `attachment_file_path`:附件文件路径 - `attachment_file_name`:附件文件名 注意:在使用JavaMail API发送邮件时,你需要提供你所使用的邮件服务的SMTP服务器地址和端口号。在上面的代码中,我使用的是Gmail的SMTP服务器,如果你使用的是其他邮件服务,请替换相应的SMTP服务器地址和端口号。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成都java小生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值