java 发送邮件的几种方式

java 发送邮件的几种方式| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission |

| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------|
| 16261702| java 发送邮件的几种方式| 2022-05-12T11:21:00| | BlogPost|

一、java mail发送邮件:
1.pom.xml

    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.6.2</version>
    </dependency>

2.代码
2.1email实体类

复制代码
@Data
public class EmailDto {
    private String serverName;
    private String port;
    private String userName;
    private String password;
    private String senderName;
    private String emailAddress;
    private String subject;
    private String to;
    private String cC;
    private String content;
@Override
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String toString() {
    </span><span style="color: #0000ff;">return</span> JSONObject.toJSONString(<span style="color: #0000ff;">this</span><span style="color: #000000;">);
}

}

复制代码

2.2邮件发送

复制代码
public class MailUtils {
    /**
     * 发送邮件
     * @param emailDto email配置信息
     * @param filePath  本地附件地址
     */
    public static void sendMail(EmailDto emailDto, JSONArray filePath) {
        Transport transport = null;
        try {
            Properties prop = new Properties();
            prop.setProperty("mail.host", emailDto.getServerName());  //邮箱发送
            prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
            prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码
            //1、创建定义整个应用程序所需的环境信息的 Session 对象
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    //传入发件人的姓名和授权码
                    return new PasswordAuthentication(emailDto.getUserName(), emailDto.getPassword());
                }
            });
            //2、通过session获取transport对象
            transport = session.getTransport();
            //3、通过transport对象邮箱用户名和授权码连接邮箱服务器
            transport.connect(emailDto.getServerName(), emailDto.getUserName(), emailDto.getPassword());
            //4、创建邮件,传入session对象
            MimeMessage mimeMessage = getMimeMessage(session, emailDto, filePath);
            //5、发送邮件
            transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (transport != null) {
                try {
                    transport.close();
                } catch (MessagingException e) {
                    e.printStackTrace();
                }
            }
        }
    }
</span><span style="color: #008000;">/**</span><span style="color: #008000;">
 * 组装发送信息
 * </span><span style="color: #808080;">@param</span><span style="color: #008000;"> session session
 * </span><span style="color: #808080;">@param</span><span style="color: #008000;"> emailDto 邮件配置信息
 * </span><span style="color: #808080;">@param</span><span style="color: #008000;"> filesPath 本地地址
 * </span><span style="color: #808080;">@return</span><span style="color: #008000;"> MimeMessage
 * </span><span style="color: #808080;">@throws</span><span style="color: #008000;"> Exception  Exception
 </span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> MimeMessage getMimeMessage(Session session, EmailDto emailDto, JSONArray filesPath) <span style="color: #0000ff;">throws</span><span style="color: #000000;"> Exception {
    </span><span style="color: #008000;">//</span><span style="color: #008000;">消息的固定信息</span>
    MimeMessage mimeMessage = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MimeMessage(session);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">发件人</span>
    mimeMessage.setFrom(<span style="color: #0000ff;">new</span><span style="color: #000000;"> InternetAddress(emailDto.getEmailAddress()));
    </span><span style="color: #008000;">//</span><span style="color: #008000;">收件人</span>
    <span style="color: #0000ff;">if</span><span style="color: #000000;"> (StringUtils.isNotBlank(emailDto.getTo())) {
        String[] tos </span>= emailDto.getTo().split(","<span style="color: #000000;">);
        </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (String to : tos) {
            mimeMessage.setRecipient(Message.RecipientType.TO, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> InternetAddress(to));
        }
    }
    </span><span style="color: #008000;">//</span><span style="color: #008000;">抄送人</span>
    <span style="color: #0000ff;">if</span><span style="color: #000000;"> (StringUtils.isNotBlank(emailDto.getCC())) {
        String[] ccs </span>= emailDto.getTo().split(","<span style="color: #000000;">);
        </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (String cc : ccs) {
            mimeMessage.setRecipient(Message.RecipientType.CC, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> InternetAddress(cc));
        }
    }
    </span><span style="color: #008000;">//</span><span style="color: #008000;">邮件标题</span>

mimeMessage.setSubject(emailDto.getSubject());
MimeMultipart multipart
= new MimeMultipart();
//附件
for (Object pathObj : filesPath) {
MimeBodyPart attachPart
= new MimeBodyPart();
File file
= new File((String) pathObj);
attachPart.setDataHandler(
new DataHandler(new FileDataSource(file)));
//避免中文乱码的处理
attachPart.setFileName(MimeUtility.encodeWord(file.getName()));
multipart.addBodyPart(attachPart);
//附件
}
//正文
MimeBodyPart contentPart = new MimeBodyPart();
contentPart.setContent(emailDto.getContent(),
"text/html;charset=utf-8");
multipart.addBodyPart(contentPart);
multipart.setSubType(
"mixed"); //正文和附件都存在邮件中,所有类型设置为mixed
//放到Message消息中
mimeMessage.setContent(multipart);
mimeMessage.saveChanges();
//保存修改
return mimeMessage;
}
}

复制代码

二、spring自带的邮件发送器发送邮件

1.pom.xml

    <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

2.代码

复制代码
    /**
     * 创建邮件发送器
     *
     * @param emailDto  邮件配置信息
     * @return 发送器
     */
    private static JavaMailSenderImpl createMailSender(EmailDto emailDto) {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setHost(emailDto.getServerName());
        sender.setPort(Integer.parseInt(emailDto.getPort()));
        sender.setUsername(emailDto.getUserName());
        sender.setPassword(emailDto.getPassword());
        sender.setDefaultEncoding("Utf-8");
        Properties p = new Properties();
        p.setProperty("mail.smtp.timeout", "25000");
        p.setProperty("mail.smtp.auth", "false");
        sender.setJavaMailProperties(p);
        return sender;
    }
</span><span style="color: #008000;">/**</span><span style="color: #008000;">
 * 发送邮件
 *
 * </span><span style="color: #808080;">@param</span><span style="color: #008000;"> emailDto emailDto
 * </span><span style="color: #808080;">@param</span><span style="color: #008000;"> files files(由于附件是服务接收的,故我这里用MultipartFile)
 * </span><span style="color: #808080;">@throws</span><span style="color: #008000;"> MessagingException 
 * </span><span style="color: #808080;">@throws</span><span style="color: #008000;"> UnsupportedEncodingException 自定义异常,可忽略
 </span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> sendMail(EmailDto emailDto, MultipartFile... files) <span style="color: #0000ff;">throws</span><span style="color: #000000;"> MessagingException, UnsupportedEncodingException {
    </span><span style="color: #0000ff;">long</span> startTime =<span style="color: #000000;"> System.currentTimeMillis();
    JavaMailSenderImpl mailSender </span>=<span style="color: #000000;"> createMailSender(emailDto);
    MimeMessage mimeMessage </span>=<span style="color: #000000;"> mailSender.createMimeMessage();
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> 设置utf-8或GBK编码,否则邮件会有乱码</span>
    MimeMessageHelper messageHelper = <span style="color: #0000ff;">new</span> MimeMessageHelper(mimeMessage, <span style="color: #0000ff;">true</span>, "UTF-8"<span style="color: #000000;">);
    messageHelper.setFrom(emailDto.getEmailAddress(), emailDto.getSenderName());
    messageHelper.setTo(emailDto.getTo().split(</span>","<span style="color: #000000;">));
    messageHelper.setSubject(emailDto.getSubject());
    messageHelper.setText(emailDto.getContent(), </span><span style="color: #0000ff;">true</span><span style="color: #000000;">);
    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (StringUtils.isNotBlank(emailDto.getCC())) {
        messageHelper.setCc(emailDto.getCC().split(</span>","<span style="color: #000000;">));
    }
    </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (MultipartFile file : files) {
        </span><span style="color: #0000ff;">if</span> (!file.isEmpty() &amp;&amp; file.getOriginalFilename() != <span style="color: #0000ff;">null</span><span style="color: #000000;">) {
            messageHelper.addAttachment(file.getOriginalFilename(), file);
        }
    }
    mailSender.send(mimeMessage);
    log.info(</span>"邮件发送耗时:" + (System.currentTimeMillis() - startTime) / 1000.0<span style="color: #000000;">);
}</span></pre>
复制代码

三、使用Apache commons-email发送html邮件
1.pom.xml

    <dependency>
         <groupId>org.apache.commons</groupId>
          <artifactId>commons-email</artifactId>
          <version>1.5</version>
    </dependency>

2.代码

复制代码
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import java.util.List;

/**

  • @className: MailUtil.java

  • @description: 邮件工具类
    */
    public class MailUtil {

    /**

    • 构建器
      */
      public static class EmailInfo {

      /**

      • SMTP 服务器 端口
        */
        private String mailServer;
        private Integer mailPort;

      /**

      • 发件人 账号
        */
        private String mailNick;

      /**

      • 发件人 账号
        */
        private String mailUsername;

      /**

      • 发件人 密码
        */
        private String mailPassword;

      /**

      • 邮件标题
        */
        private String title;

      /**

      • 邮件内容
        */
        private String content;

      /**

      • 收件人
        */
        private List<String> receivers;

      boolean ssl;

      public EmailInfo(String mailServer,Integer mailPort,String mailNick,String mailUsername,
      String mailPassword,String title,String content,List
      <String> receivers,boolean ssl) {
      this.mailServer = mailServer;
      this.mailPort = mailPort;
      this.mailNick = mailNick;
      this.mailUsername = mailUsername;
      this.mailPassword = mailPassword;
      this.title = title;
      this.content = content;
      this.receivers = receivers;
      this.ssl = ssl;
      }

      public MailUtil send() throws Exception {
      return new MailUtil(this);
      }
      }

    private MailUtil(EmailInfo emailInfo) throws Exception {
    HtmlEmail email
    = new HtmlEmail();
    // 通过Server 发送邮件
    email.setHostName(emailInfo.mailServer);
    email.setSmtpPort(emailInfo.mailPort);
    //设定smtp服务器的认证资料信息
    email.setAuthentication(emailInfo.mailUsername, emailInfo.mailPassword);
    email.setStartTLSEnabled(
    false);
    email.setSSLOnConnect(emailInfo.ssl);
    try {
    // 设定发件人
    email.setFrom(emailInfo.mailUsername,emailInfo.mailNick);
    // 设定收件人 (多人)
    int size = emailInfo.receivers.size();
    email.addTo(emailInfo.receivers.toArray(
    new String[size]));
    // 设定内容的语言集
    email.setCharset("UTF-8");
    email.setDebug(
    false);
    // 设定主题
    email.setSubject(emailInfo.title);
    // 设定邮件内容
    email.setHtmlMsg(emailInfo.content);
    // 发送邮件
    email.send();
    System.out.println(
    "邮件发送成功!");
    }
    catch (EmailException e) {
    System.out.println(
    "邮件发送失败!");
    throw new Exception(e);
    }
    }
    }

复制代码

 

| 648658| | 2022-05-12T11:21:00| false| | 2022-05-12T11:21:22.517| true| 一、java mail发送邮件:1.pom.xml <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency> 2.代码| Anonymous|
posted @   RalphLauren  阅读(530)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示