• java--邮件发送


    1、什么是授权码?

    授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。
    适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。
    温馨提醒:为了你的帐户安全,更改QQ密码以及独立密码会触发授权码过期,需要重新获取新的授权码登录。
     
    2、怎么获取授权码?
    先进入设置-》帐户页面找到入口,按照以下流程操作。
    (1)点击“开启”
    (2)验证密保
    (3)获取授权码
    3、引入依赖的jia包
    在第三方客户端的密码框里面输入16位授权码进行验证。
    <dependency>
          <groupId>javax.mail</groupId>
          <artifactId>mail</artifactId>
          <version>1.4.7</version>
    </dependency>

    4、定义邮件发送模板

    import lombok.Data;
    
    import java.io.Serializable;
    
    @Data
    public class EmailTemplate implements Serializable {
        //发件人
        private String fromAddress;
        // 收件人(多个地址用逗号分隔)
        private String toAddress;
        // 抄送人(多个地址用逗号分隔)
        private String ccAddress;
        // 密送人(多个地址用逗号分隔)
        private String bccAddress;
        // 附件信息(暂不支持)
        //    private List<EmailAttachment> attachments;
        // 邮件主题
        private String subject;
        // 邮件的文本内容
        private String content;
    }

    5、发送邮件工具类(单独线程)

    import com.demo.model.EmailTemplate;
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Properties;
    
    public class SendMail extends Thread {
    
        //用于给用户发送邮件的邮箱
        private String emailFrom = "xxxxxx@qq.com";
        //邮箱授权码(修改密码会导致授权码过期)
        private String authKey = "上面获取的16位授权码";
        //发送邮件的服务器地址
        private String smtpHost = "smtp.qq.com";
    
        private EmailTemplate emailTemplate;
    
        public SendMail(EmailTemplate emailTemplate) {
            this.emailTemplate = emailTemplate;
        }
    
        //重写run方法的实现,在run方法中发送邮件给指定的用户
        @Override
        public void run() {
            try {
                Properties prop = new Properties();
                prop.setProperty("mail.smtp.host", smtpHost);
                prop.setProperty("mail.transport.protocol", "smtp");
                prop.setProperty("mail.smtp.auth", "true");
    
                // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可
                MailSSLSocketFactory sf = new MailSSLSocketFactory();
                sf.setTrustAllHosts(true);
                prop.put("mail.smtp.ssl.enable", "true");
                prop.put("mail.smtp.ssl.socketFactory", sf);
    
                //1、创建定义整个应用程序所需的环境信息的 Session 对象
                Session session = Session.getDefaultInstance(prop, new Authenticator() {
                    public PasswordAuthentication getPasswordAuthentication() {
                        //发件人邮件用户名、授权码
                        return new PasswordAuthentication(emailFrom, authKey);
                    }
                });
    
                //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
    //            session.setDebug(true);
    
                //2、通过session得到transport对象
                Transport ts = session.getTransport();
    
                //3、使用邮箱的用户名和授权码连上邮件服务器
                ts.connect(smtpHost, emailFrom, authKey);
    
                //4、创建邮件
                MimeMessage message = new MimeMessage(session);
                //发件人
                message.setFrom(new InternetAddress(emailFrom));
                //收件人
                if (emailTemplate.getToAddress() != null) {
                    message.setRecipients(Message.RecipientType.TO,
                            InternetAddress.parse(emailTemplate.getToAddress()));
                }
                //抄送人
                if (emailTemplate.getCcAddress() != null) {
                    message.setRecipients(Message.RecipientType.CC,
                            InternetAddress.parse(emailTemplate.getCcAddress()));
                }
                //密送人
                if (emailTemplate.getBccAddress() != null) {
                    message.setRecipients(Message.RecipientType.BCC,
                            InternetAddress.parse(emailTemplate.getBccAddress()));
                }
                //邮件的标题
                message.setSubject(emailTemplate.getSubject(),"UTF-8");
    
                message.setContent(emailTemplate.getContent(), "text/html;charset=UTF-8");
                message.saveChanges();
    
                //发送邮件
                ts.sendMessage(message, message.getAllRecipients());
                ts.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    
    }

    6、编写测试类

        public static void main(String[] args) throws InterruptedException {
            EmailTemplate template=new EmailTemplate();
            template.setToAddress("yyyy@163.com");
            template.setSubject("邮件测试2");
            template.setContent("详细信息:<a href='http://www.baidu.com'>http://www.baidu.com</a>");
            SendMail sendMail=new SendMail(template);
            sendMail.start();
            Thread.sleep(2000);
        }
  • 相关阅读:
    Springboot系列 1
    从-1起步学习SpringBoot
    WinForm与WPF下跨线程调用控件
    利用FileSystemWatcher实现磁盘文件监控
    HashTable初次体验
    【原创】国网远程加密机认证软件开发2(认证步骤及代码)
    【原创】国网远程加密机认证软件开发1(相关说明)
    第一次做socket的一些心得
    ArchLinux 安装记录
    oh my zsh安装
  • 原文地址:https://www.cnblogs.com/jvStarBlog/p/12501883.html
Copyright © 2020-2023  润新知