springboot实现邮箱简单内容发送(可以自己进行邮箱维护并发送多个人员)

6 篇文章 1 订阅

一、pom.xml

<dependencies>
	<!-- springboot的所需要的包配置 -->
	
	<!-- 关键 springboot集成email发送依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
</dependencies>

二、配置yml文件(这一步仅是为了能使email这个包生效,发送的邮箱可以根据下面的实现方法自行调整)
1、QQ邮箱配置(支持SSL安全发送):

#邮箱配置
spring:
  mail:
    default-encoding: UTF-8
    host: smtp.qq.com
    username: 邮箱
    password: 授权码
    # 端口号465或587,但是经过我的测试,发现只有587能用
    port: 587
    # 使用SSL方式
    properties:
      mail:
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory

2、163邮箱配置(支持SSL安全发送):

spring:
  mail:
    default-encoding: UTF-8
    host: smtp.163.com
    username: 邮箱
    password: 授权码
    # 端口号465或944,但是经过我的测试,发现两个都能用
    port: 944
    # 使用SSL方式
    properties:
      mail:
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory

qq邮箱和163邮箱授权码跟端口如何获取跟查看,请看本文章最后的参考链接

三、实现代码(Controller层)

public JavaMailSenderImpl getJavaMailSender(Map<String,Object> map) {
        // 邮件发送者
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
        javaMailSender.setHost(map.get("EMAILTYPE").toString());
        //5、SMTP服务器: 默认端口 163邮箱与qq邮箱端口不一样
        if (map.get("EMAILTYPE").toString().equals("smtp.163.com")){
            javaMailSender.setPort(25);
        }else if (map.get("EMAILTYPE").toString().equals("smtp.qq.com")){
            javaMailSender.setPort(587);
        }

        //6、//发送邮件协议名称
        javaMailSender.setProtocol("smtp");
        //7、编码格式
        javaMailSender.setDefaultEncoding("UTF-8");
        javaMailSender.setUsername(map.get("EMAILURL").toString());
        javaMailSender.setPassword(map.get("EMAILPWD").toString());
        //8、创建连接对象,连接到邮箱服务器
        Properties properties = new Properties();
        //发送服务器需要身份验证,要采用指定用户名密码的方式去认证
        properties.put("mail.smtp.auth", true);
        properties.put("mail.smtp.starttls.enable", true);
        //9、添加连接对象到邮件对象中
        javaMailSender.setJavaMailProperties(properties);
        return javaMailSender;
    }

    //声明一个Message对象(代表一封邮件),从session中创建
    private MimeMessage getMimeMessage(String username, String toEmail, String subject, String text, JavaMailSenderImpl javaMailSender) throws MessagingException {

        MimeMessage mimeMessage = javaMailSender.createMimeMessage();

        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
        //发件人
        mimeMessageHelper.setFrom(username);
        //收件人  : 可以发送给多个收件人,该方法有一个重载的 数组形参
        mimeMessageHelper.setTo(toEmail);
        //邮件主题
        mimeMessageHelper.setSubject(subject);
        //邮件内容
        mimeMessageHelper.setText(text, true);

        return mimeMessage;
    }

    @RequestMapping("/sendMail")
    @ResponseBody
    public Map<String,Object> sendMail(HttpServletRequest request, HttpServletResponse response) throws Exception{
        Map<String,Object> mapOut = new HashMap<>();
        //获取参数 我这里是封装好的方法,请按自己的方法修改
        Map<String, Object> mapArgu = CFunc.PackArguToMap(request, response);
        //从数据库中取得邮箱  这里不多展示  自己写死邮箱都可以
        Map<String,Object> email = firstTrialService.getEmailDetail();
        if (email==null){
            mapOut.put("status","error");
            mapOut.put("message","发件邮箱不存在,请进行维护");
            return mapOut;
        }
        String username = email.get("EMAILURL").toString();
        
        
        String toEmail = "发送邮箱的email";
        
        String subject = "标题";
        String text = "内容";
        

        //发送邮件
        JavaMailSenderImpl javaMailSender = getJavaMailSender(email);
        MimeMessage mimeMessage = getMimeMessage(username, toEmail, subject, text, javaMailSender);
        javaMailSender.send(mimeMessage);

        mapOut.put("status","ok");
        return mapOut;
    }

参考链接:
https://blog.csdn.net/qq_42449963/article/details/123285035
https://www.csdn.net/tags/OtDaUg2sMjA3MzYtYmxvZwO0O0OO0O0O.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 中,实现邮箱的群发和发送多个附件可以使用 JavaMail API。下面是一个简单的示例代码: ```java import java.io.File; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; public class EmailService { private String host; // SMTP服务器主机名 private String username; // 发件人账号 private String password; // 发件人密码 public EmailService(String host, String username, String password) { this.host = host; this.username = username; this.password = password; } public void sendEmail(String[] to, String[] cc, String[] bcc, String subject, String content, String[] attachments) throws Exception { Properties props = new Properties(); props.put("mail.smtp.host", host); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.ssl.enable", "true"); Authenticator auth = new EmailAuthenticator(username, password); Session mailSession = Session.getInstance(props, auth); MimeMessage message = new MimeMessage(mailSession); message.setFrom(new InternetAddress(username)); InternetAddress[] toAddresses = new InternetAddress[to.length]; for (int i = 0; i < to.length; i++) { toAddresses[i] = new InternetAddress(to[i]); } message.setRecipients(Message.RecipientType.TO, toAddresses); if (cc != null && cc.length > 0) { InternetAddress[] ccAddresses = new InternetAddress[cc.length]; for (int i = 0; i < cc.length; i++) { ccAddresses[i] = new InternetAddress(cc[i]); } message.setRecipients(Message.RecipientType.CC, ccAddresses); } if (bcc != null && bcc.length > 0) { InternetAddress[] bccAddresses = new InternetAddress[bcc.length]; for (int i = 0; i < bcc.length; i++) { bccAddresses[i] = new InternetAddress(bcc[i]); } message.setRecipients(Message.RecipientType.BCC, bccAddresses); } message.setSubject(subject); MimeMultipart contentPart = new MimeMultipart(); MimeBodyPart textPart = new MimeBodyPart(); textPart.setText(content); contentPart.addBodyPart(textPart); if (attachments != null && attachments.length > 0) { for (String attachment : attachments) { MimeBodyPart attachPart = new MimeBodyPart(); File file = new File(attachment); attachPart.attachFile(file); attachPart.setFileName(MimeUtility.encodeText(file.getName())); contentPart.addBodyPart(attachPart); } } message.setContent(contentPart); Transport.send(message); } private static class EmailAuthenticator extends Authenticator { private String username; private String password; public EmailAuthenticator(String username, String password) { this.username = username; this.password = password; } @Override protected javax.mail.PasswordAuthentication getPasswordAuthentication() { return new javax.mail.PasswordAuthentication(username, password); } } } ``` 然后就可以在你的代码中使用这个 EmailService 类来发送邮件了: ```java EmailService emailService = new EmailService("smtp.example.com", "username@example.com", "password"); String[] to = {"recipient1@example.com", "recipient2@example.com"}; String[] cc = {"cc1@example.com", "cc2@example.com"}; String[] bcc = {"bcc1@example.com", "bcc2@example.com"}; String subject = "Test email"; String content = "This is a test email."; String[] attachments = {"/path/to/attachment1", "/path/to/attachment2"}; emailService.sendEmail(to, cc, bcc, subject, content, attachments); ``` 其中,`to`、`cc`、`bcc` 分别表示邮件的收件人、抄送人、密送人,`subject` 表示邮件主题,`content` 表示邮件内容,`attachments` 表示邮件的附件路径数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值