如何使用Java来发送企业邮箱,并设计收到邮件的样式

最近再给公司写一个发送邮件的系统,收到同事反馈说收到的默认样式太丑了,于是我钻研了一下,设计了一下自己的邮箱前端样式,于是特此写下这篇文章

在这里插入图片描述

一.搭建环境

相信大家也在其余的博客中学习到了怎么使用qq邮箱来发送邮件,但是很有可能大家写的并不是很规范,没有考虑到复用性等等,那么我在这里提供一下自己的一个写法。

构建实体类

package com.znb.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    private int id;

    private String name;

    private String email;

    private String address;
}

书写配置环境

TestSent:
  Icee:857787854@qq.com
  Cy:1240152953@qq.com


emailinformation:
  #发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
  serviceSendEmailAccount: xxxxx
  serviceSendEmailPassword: xxxxxxx
  # 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般格式为: smtp.xxx.com  网易163邮箱的 SMTP 服务器地址为: smtp.163.com
  #    myEmailSMTPHost: smtp.qiye.163.com
  myEmailSMTPHost: smtp.qiye.aliyun.com
  #唯一标识  用来判断程序走哪个环境  dev test pro
  devTestProSystem: pro
  #项目发布地址,邮件跳转使用
  ipAddress: www.baidu.com

创建一个类来接收配置文件中的数据

这里要注意一下,此处和上述配置文件的数据一一对应,这样的好处是当我们需要改变什么的时候,直接在配置文件修改就可以了。

package com.znb.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "emailinformation")
public class EmailInformationProperties {

    //
    private String MyEmailSMTPHost;
    //
    private String serviceSendEmailAccount;
    //
    private String serviceSendEmailPassword;
    //
    private String devTestProSystem;

    private String IpAddress;
}

创建工具类

这里有三个关键的函数,一个是发送邮件,一个是创建邮件,一个是生成发送邮件的前端样式,样式我就随便写了一下,不要嫌弃

package com.znb.utils;

import com.znb.common.EmailInformationProperties;
import com.znb.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.Date;
import java.util.Properties;


public class EmailUtils {



    public static void SendEmilToUser(EmailInformationProperties emailInformationProperties,String addr,String title,String count) throws Exception {

        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
        Properties props = new Properties();                    // 参数配置
        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
        props.setProperty("mail.host", emailInformationProperties.getMyEmailSMTPHost());        // 发件人的邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.auth", "true");            // 请求认证,参数名称与具体实现有关

        // 2. 根据配置创建会话对象, 用于和邮件服务器交互

        javax.mail.Session session = javax.mail.Session.getDefaultInstance(props);
        session.setDebug(false);                                 // 设置为debug模式, 可以查看详细的发送 log

        createEmail(emailInformationProperties,session, addr,title,count);

    }
    private static void createEmail(EmailInformationProperties emailInformationProperties,javax.mail.Session session,String addr,String title,String count) throws Exception {
        MimeMessage message = createMimeMessage(session, emailInformationProperties.getServiceSendEmailAccount(), addr,title,count);
        // 4. 根据 Session 获取邮件传输对象
        Transport transport = session.getTransport();

        // 5. 使用 邮箱账号 和 密码 连接邮件服务器
        //    这里认证的邮箱必须与 message 中的发件人邮箱一致,否则报错
        transport.connect(emailInformationProperties.getServiceSendEmailAccount(), emailInformationProperties.getServiceSendEmailPassword());

        // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
        transport.sendMessage(message, message.getAllRecipients());

        // 7. 关闭连接
        transport.close();
    }

    public static MimeMessage createMimeMessage(javax.mail.Session session, String sendMail, String addr, String title, String count) throws Exception {
        // 1. 创建一封邮件
        MimeMessage message = new MimeMessage(session);

        // 2. From: 发件人
        message.setFrom(new InternetAddress(sendMail, "华为商店", "UTF-8"));

        // 3. To: 收件人(可以增加多个收件人、抄送、密送)
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(addr, "", "UTF-8"));

        // 4. Subject: 邮件主题
        message.setSubject(title, "UTF-8");

        // 5. Content: 邮件正文(可以使用html标签)
        message.setContent(count, "text/html;charset=UTF-8");

        // 6. 设置发件时间
        message.setSentDate(new Date());

        // 7. 保存设置
        message.saveChanges();

        return message;
    }

    public static String buildCopyCount(User userDO, String ipAddress) {
        String count="尊敬的"+userDO.getName()+":";
        count +="<br/>";
        count +="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;您好。";
        count +="<br/>";
        count +="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;恭喜您抽中华为Mate40pro一部<a href='"+ipAddress+"'>点击前往查看</a>";
        count +="<br/>";
        count +="<table border=\"1\" cellspacing=\"0\" width=\"100%\" style=\"text-align: center\">" +
                "<tr height=\"30px\" bgcolor=\"#00B83F\">" +
                "<td colspan=\"5\" style=\"color: white\">信息</td>" +
                "</tr>" +
                "<tr bgcolor=\"#1186bb\" style=\"color: white\">" +
                "<td>您的住址:</td>" +
                "</tr>" +
                "<tr>" +
                "<td>"+userDO.getAddress()+"</td>" +

                "</tr>" +
                "</table>";
        return count;
    }

}

发送请求

在这里就不在数据库中添加用户信息了,就随便模拟了一个,值得一提的是,当配置环境是test的时候,我们可以不调用发邮箱的函数,或者把要发送的邮箱换成测试邮箱,这样就不会给客户造成困扰了

package com.znb.controller;

import com.znb.common.EmailInformationProperties;
import com.znb.pojo.User;
import com.znb.utils.EmailUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class EmailController {
    @Autowired
    private EmailInformationProperties emailInformationProperties;
    public static List<User> getUser(){

        User user1=new User(1,"萧炎","857787854@qq.com","斗气大陆");
        User user2=new User(2,"唐三","243916422@qq.com","斗罗大陆");
        User user3=new User(3,"图图","123456789@qq.com","翻斗街道");
        List<User>userList=new ArrayList<>();
//        userList.add(user2);
        userList.add(user1);
//        userList.add(user3);

        return userList;
    }


    @RequestMapping("/senduser")
    public String Send(){
        List<User>list=EmailController.getUser();
        list.forEach((user)->{
            String count = EmailUtils.buildCopyCount(user, emailInformationProperties.getIpAddress());
            try {
                if (!emailInformationProperties.getDevTestProSystem().equals("test")){
                    EmailUtils.SendEmilToUser(emailInformationProperties,user.getEmail(),"您中奖啦",count);
                }else {
                    System.out.println("成功");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        return "发送成功";
    }
}

在这里插入图片描述
这个…样式是有点丑,我随便写的,大家可以自己写的好看一点

在这里插入图片描述

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
使用Java调用API发送企业邮箱,需要按照以下步骤操作: 1. 配置企业邮箱SMTP服务 首先需要在企业邮箱后台配置SMTP服务,获取SMTP服务器地址、端口号、用户名和密码等信息。一般情况下,SMTP服务器地址为smtp.exmail.qq.com,端口号为465或587。 2. 导入JavaMailJavaMail是一款Java邮件发送库,可以通过Maven或手动导入jar包的方式引入到项目中。 3. 编写Java代码 使用JavaMail发送邮件的代码示例: ``` public static void sendMail(String smtpServer, String smtpPort, String username, String password, String fromAddress, String toAddress, String subject, String content) throws MessagingException { Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.host", smtpServer); props.setProperty("mail.smtp.port", smtpPort); props.setProperty("mail.smtp.auth", "true"); props.setProperty("mail.smtp.ssl.enable", "true"); Session session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); Message message = new MimeMessage(session); message.setFrom(new InternetAddress(fromAddress)); message.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddress)); message.setSubject(subject); message.setContent(content, "text/html;charset=UTF-8"); Transport.send(message); } ``` 其中,smtpServer、smtpPort、username和password为企业邮箱SMTP服务的配置信息;fromAddress和toAddress为发件人和收件人的邮箱地址;subject为邮件主题;content为邮件正文。 4. 调用Java代码 在Java程序中调用sendMail()方法即可发送邮件。 示例代码: ``` public static void main(String[] args) throws Exception { String smtpServer = "smtp.exmail.qq.com"; String smtpPort = "465"; String username = "your_email@your_company.com"; String password = "your_password"; String fromAddress = "your_email@your_company.com"; String toAddress = "recipient_email@recipient_company.com"; String subject = "Test Email"; String content = "<h1>Hello, World!</h1>"; sendMail(smtpServer, smtpPort, username, password, fromAddress, toAddress, subject, content); } ``` 以上就是使用Java调用API发送企业邮箱的步骤和代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值