• Java实现邮件发送


    JavaWeb实现邮件发

    1、传输协议:

    • SMTP协议

      处理用户邮件发送的请求。

    • POP3协议

      处理用户邮件接收请的求。

    2、所需要的jar包

    Pom.xml文件:

    <!-- mail-1.4.7.jar -->
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
    
    <!-- activation-1.1.1.jar -->
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
    

    3、发送一封纯文本的邮件

    package com.xu;
    
    import com.sun.mail.util.MailSSLSocketFactory;
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Properties;
    
    public class sendMail01 {
        //简单邮件:纯文本内容
        //复杂邮件:文本+图片+附件
    
        //要发送邮件需要获取协议,开启POP3和SMTP服务
        public static void main(String[] args) throws Exception {
    
            Properties prop = new Properties();//创建一封邮件
            //以下三项的Key的值都是固定的
            prop.setProperty("mail.host","smtp.qq.com");//设置邮件服务器
            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);
    
            //==========使用JavaMail发送邮件的6个步骤======
    
            //1、创建定义整个应用程序所需要的环境信息的Session对象
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
                public PasswordAuthentication getPasswordAuthentication(){
                    //发件人邮箱的用户名和授权码(好像只有qq是授权码,其它的是密码)
                    return new PasswordAuthentication("1612893803@qq.com","授权码");
                }
            });
            //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
            session.setDebug(true);
            
            //2、通过Session得到transport对象
            Transport ts = session.getTransport();
    
            //3、使用邮箱的用户名和授权码连上邮件服务器
            ts.connect("SMTP.qq.com","1612893803@qq.com","授权码");
            //4、创建邮件
    
            //创建邮件对象
            MimeMessage message = new MimeMessage(session);
            //指明邮件的发件人
            message.setFrom(new InternetAddress("1612893803@qq.com"));
            //指明邮件的收件人
            message.setRecipient(Message.RecipientType.TO,new InternetAddress("212694926@qq.com"));
            //邮件的标题
            message.setSubject("只是一个普通的纯文本邮件");
            //邮件的文本内容
            message.setContent("你好哇,我来了!","text/html;charset=UTF-8");
            //5、发送邮件
            ts.sendMessage(message,message.getAllRecipients());
            //6、关闭连接
            ts.close();
        }
    }
    
    

    4、发送带图片和附件的邮件

    package com.xu;
    
    import com.sun.mail.util.MailSSLSocketFactory;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import java.util.Properties;
    
    public class sendMail02 {
        //简单邮件:纯文本内容
        //复杂邮件:文本+图片+附件
    
        /*
        *MimeMessage类表示整封邮件。
        *MimeBodyPart类表示邮件的一个MIME消息。
        *MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。
        */
    
        //要发送邮件需要获取协议,开启POP3和SMTP服务
        public static void main(String[] args) throws Exception {
    
            Properties prop = new Properties();//创建一封邮件
            //以下三项的Key的值都是固定的
            prop.setProperty("mail.host","smtp.qq.com");//设置邮件服务器
            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);
    
            //==========使用JavaMail发送邮件的6个步骤======
            
            //变量名字定义的有点乱,不想改了。将就下吧
    
            //1、创建定义整个应用程序所需要的环境信息的Session对象
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
                public PasswordAuthentication getPasswordAuthentication(){
                    //发件人邮箱的用户名和授权码
                    return new PasswordAuthentication("1612893803@qq.com","授权码");
                }
            });
            //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
            session.setDebug(true);
    
            //2、通过Session得到transport对象
            Transport ts = session.getTransport();
    
            //3、使用邮箱的用户名和授权码连上邮件服务器
            ts.connect("SMTP.qq.com","1612893803@qq.com","授权码");
            //4、创建邮件
    
            //创建邮件对象
            MimeMessage message = new MimeMessage(session);
            //指明邮件的发件人
            message.setFrom(new InternetAddress("1612893803@qq.com"));
            //指明邮件的收件人
            message.setRecipient(Message.RecipientType.TO,new InternetAddress("212694926@qq.com"));
            //邮件的标题
            message.setSubject("这是一个有文本、图片、附件的邮件");
            //邮件的内容
           //=================================================
           //准备图片数据 DataHandler:处理除文本外的数据
            MimeBodyPart image = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource("C:\Users\Think\Documents\image-20200220200136289.png"));
            image.setDataHandler(dh);
            image.setContentID("xx.png");//设置图片ID
            //ContentID用于为“multipart/related”组合消息中的内嵌资源指定一个唯一标识号,在HTML格式的正文中可以使用这个唯一标识号来引用该内嵌资源。
            //注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。
    
            //准备正文数据
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("这是一个带图片、文本、附件<img src='cid:xx.png'>的邮件","text/html;charset=UTF-8");
    
            //准备附件数据
            MimeBodyPart accessory = new MimeBodyPart();
            DataHandler dh2 = new DataHandler(new FileDataSource("C:\Users\Think\Pictures\Saved Pictures\illust_70110900_20191209_012234.jpg"));
            accessory.setDataHandler(dh2);
            accessory.setFileName(MimeUtility.encodeText("yan"));//给附件一个名字,发过去显示的就是这个设定的名字||MimeUtility.encodeText("")解决附件发送过去乱码;
    
            //*****************************!!!!!!!**********************
                /*
                     MimeBodyPart:表示复杂邮件的一个组成部分,它可以表示文本,附件,图片
                     DataHandler:表示可以读取图片或附件
                     MimeMultipart:表示二个邮件组成部分的关系,文本和图片的关系是"related"关系
                     Content-ID:表示图片的编号
                     related:图片|| mixed:附件
                 */
            //*****************************!!!!!!!**********************
    
            //拼接图片和文本
            MimeMultipart mm = new MimeMultipart();
            mm.addBodyPart(text);
            mm.addBodyPart(image);
            mm.setSubType("related");
    
            //将文本+图片封装成邮件的组成部分,即将关系看作成一个部分
            MimeBodyPart context = new MimeBodyPart();
            context.setContent(mm);
    
            //把附件也加上
            MimeMultipart file = new MimeMultipart();
            file.addBodyPart(context);
            file.addBodyPart(accessory);
            file.setSubType("mixed");
    
            //放到消息中
            message.setContent(file);//把编辑好的内容放入消息中
            message.saveChanges();//保存修改!
    
    
            //=================================================
            //5、发送邮件
            ts.sendMessage(message,message.getAllRecipients());//message:发送的消息||message.getAllRecipients():获取保存在里面的地址
            //6、关闭连接
            ts.close();
        }
         //对于,复杂类型的邮件,位置关系特别注意和加入的顺利要一致
    }
    
    
  • 相关阅读:
    移动应用滑动屏幕方向判断解决方案,JS判断手势方向
    M1808本地配置IP全过程
    嵌入式板子tftpd交叉编译及使用
    七牛云ARM64交叉编译流程
    记录M1808Ubuntu18.04固定IP配置方案
    so库移植记录
    c++ 动态库的编译
    Linux提示Syntax error: end of file unexpected (expecting "then") 提示错误
    ubuntu18.04设置静态ip
    WebFlux中thymeleaf视图找不到的问题解决
  • 原文地址:https://www.cnblogs.com/whitespaces/p/12350085.html
Copyright © 2020-2023  润新知