zoukankan      html  css  js  c++  java
  • 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);
        }
  • 相关阅读:
    DB2 for Z/os Statement prepare
    Foreign key (referential) constraints on DB2 LUW v105
    复制Informational constraints on LUW DB2 v105
    DB2 SQL Mixed data in character strings
    DB2 create partitioned table
    MVC中使用EF的技巧集(一)
    Asp.Net MVC 开发技巧(二)
    Linq使用技巧及查询示例(一)
    Asp.Net MVC 开发技巧(一)
    Asp.Net MVC Identity 2.2.1 使用技巧(八)
  • 原文地址:https://www.cnblogs.com/jvStarBlog/p/12501883.html
Copyright © 2011-2022 走看看