2023-04-27 16:23

Java自动发送邮件-实现发送邮箱验证码

码自答

JavaEE

(1035)

(0)

收藏

Java通过邮箱服务器自动发送邮件,实现发送注册验证码,获得密码保护,发送生成的随机密码等功能。

  • 添加依赖

  • <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>1.4.7</version>
    </dependency>


  • 邮件信息的封装类

    包括发送方的邮件信息和接收方的邮件信息,以及发送的邮件内容

    发送方的邮箱地址  邮件服务商的服务器地址 端口等信息,不同的邮件服务商提供的邮件服务器和端口有差异

    接收方的邮箱地址 

    邮件的标题,内容等信息

  • package com.wanmait.demo.pojo;
    
    public class EmailMessage
    {
        private String sendEmailServerHost;//发送邮件的服务器地址  不同的邮箱服务商  服务器地址不同
        private Integer sendEmailServerport;//发送邮件服务器的端口  不同的邮箱服务商  服务器端口不同
        private String fromEmail;//发送邮件的邮箱地址
        private String authorizationCode;//发送邮件的邮箱的授权码  发送邮件的服务器提供
        private String receiveEmail;//接收邮件的邮箱
        private String message;//邮件内容 可以有HTML标签
        private String title;//邮件标题
    }


  • 发送邮件

    发送邮件分成3个部分

    1   创建session会话

         这个session是javax.email.Session,在会话中,设置邮件服务器的地址,设置邮件传输协议smtp协议

    2  创建MimeMessage

        MimeMessage中间会设置邮件的主体

        包括发件人信息,收件人信息,以及邮件内容

    3  发送邮件

        创建Transport对象,链接发送服务器,发送邮件

  • package com.wanmait.demo.service;
    
    import com.wanmait.demo.pojo.EmailMessage;
    
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.io.UnsupportedEncodingException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Properties;
    
    
    public class SendMailServiceImpl
    {
        public void sendEmail(EmailMessage emailMessage) {
            //本例题以网易邮箱为例
            Properties props = new Properties();
            props.setProperty(emailMessage.getSendEmailServerHost(), "smtp");     //使用smpt的邮件传输协议
            props.setProperty("mail.smtp.host", emailMessage.getSendEmailServerHost());//主机地址
            props.setProperty("mail.smtp.auth", "true");      //授权通过
            //smtp.163.com是网易邮箱发送邮件的服务器地址
            javax.mail.Session session = Session.getInstance(props);
            //创建会话 Session不是JavaEE的web程序的session
    
            try {
                MimeMessage mimeMessage = new MimeMessage(session);
                mimeMessage.setFrom(new InternetAddress(emailMessage.getFromEmail()));
                //设置发件人
                mimeMessage.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(emailMessage.getReceiveEmail(), emailMessage.getReceiveEmail(), "utf-8"));
                //设置收件人
                mimeMessage.setSubject(emailMessage.getTitle(), "utf-8");
                //设置邮件标题
                mimeMessage.setSentDate(new Date());
    
                Multipart mul = new MimeMultipart();
                BodyPart mdp = new MimeBodyPart();  //创建BodyPart  用来存放邮件内容
                mdp.setContent(emailMessage.getMessage(), "text/html;charset=utf-8");
                //设置发送邮件内容  内容支持HTML标签
                mul.addBodyPart(mdp);  //将含有信件内容的BodyPart加入到MimeMultipart对象中
                mimeMessage.setContent(mul); //把mul作为消息内容
                mimeMessage.saveChanges();
    
    
                //创建一个支持邮件传输协议的传输对象
                Transport transport = session.getTransport("smtp");
                //建立与服务器的链接   SSL传输
                transport.connect(emailMessage.getSendEmailServerHost(), emailMessage.getSendEmailServerport(), emailMessage.getFromEmail(), emailMessage.getAuthorizationCode());
                //发送邮件
                transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
                //关闭邮件传输
                transport.close();
    
            } catch (AddressException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
    
    
    }

0条评论

点击登录参与评论