java邮件发送_java发送邮件 - CSDN
  • 话不多说直接上代码: ...MailUtil.java package com.myproject.aiplatform.aiopenplatform.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileO...

    话不多说直接上代码:
    MailUtil类(核心)

    MailUtil.java
    package com.myproject.aiplatform.aiopenplatform.util;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.util.Properties;
    
    import javax.mail.MessagingException;
    import javax.mail.internet.MimeMessage;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.mail.javamail.JavaMailSenderImpl;
    import org.springframework.mail.javamail.MimeMessageHelper;
    
    public class MailUtil {
        private static final String HOST = MailConfig.host;
        private static final Integer PORT = MailConfig.port;
        private static final String USERNAME = MailConfig.userName;
        private static final String PASSWORD = MailConfig.passWord;
        private static final String emailForm = MailConfig.emailForm;
        private static final String timeout = MailConfig.timeout;
        private static final String personal = MailConfig.personal;
        private static final String subject = MailConfig.subject;
        private static final String html = MailConfig.html;
        private static JavaMailSenderImpl mailSender = createMailSender();
    
        /**
         * 邮件发送器
         *
         * @return 配置好的工具
         */
        private static JavaMailSenderImpl createMailSender() {
            JavaMailSenderImpl sender = new JavaMailSenderImpl();
            sender.setHost(HOST);
            sender.setPort(PORT);
            sender.setUsername(USERNAME);
            sender.setPassword(PASSWORD);
            sender.setDefaultEncoding("Utf-8");
            Properties p = new Properties();
            p.setProperty("mail.smtp.timeout", timeout);
            p.setProperty("mail.smtp.auth", "false");
            sender.setJavaMailProperties(p);
            return sender;
        }
    
        /**
         * 发送邮件
         *
         * @param to 接受人
         * @param subject 主题
         * @param html 发送内容
         * @throws MessagingException 异常
         * @throws UnsupportedEncodingException 异常
         */
        public static void sendMail(String to, String html) throws MessagingException,UnsupportedEncodingException {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            // 设置utf-8或GBK编码,否则邮件会有乱码
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            messageHelper.setFrom(emailForm, personal);
            messageHelper.setTo(to);
            messageHelper.setSubject(subject);
            messageHelper.setText(html, true);
    //      messageHelper.addAttachment("", new File(""));//附件
            mailSender.send(mimeMessage);
        }
    
    }
    

    MailConfig类(获取.properties文件内容)

    package com.myproject.aiplatform.aiopenplatform.util;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.Properties;
    
    public class MailConfig {
        private static final String PROPERTIES_DEFAULT = "mailConfig.properties";
        public static String host;
        public static Integer port;
        public static String userName;
        public static String passWord;
        public static String emailForm;
        public static String timeout;
        public static String personal;
        public static String html;
        public static String subject;
        public static Properties properties;
    
        static{
            init();
        }
    
        /**
         * 初始化
         */
        private static void init() {
            properties = new Properties();
            try{
                InputStream inputStream = MailConfig.class.getClassLoader().getResourceAsStream(PROPERTIES_DEFAULT);
    //          properties.load(inputStream);
    //          inputStream.close();
                //解决中文乱码,采取reader把inputStream转换成reader用字符流来读取中文
                BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream));  
                properties.load(bf); 
                host = properties.getProperty("mailHost");
                port = Integer.parseInt(properties.getProperty("mailPort"));
                userName = properties.getProperty("mailUsername");
                passWord = properties.getProperty("mailPassword");
                emailForm = properties.getProperty("mailFrom");
                timeout = properties.getProperty("mailTimeout");
                personal = properties.getProperty("personal");
                html = properties.getProperty("html");
                subject = properties.getProperty("subject");
            } catch(IOException e){
                e.printStackTrace();
            }
        }
    }
    

    mailConfig.properties(配置一些邮件主题、发件人等信息)

    #服务器
    mailHost=smtp.163.com
    #端口号
    mailPort=25
    #邮箱账号
    mailUsername=***@163.com
    #邮箱授权码
    mailPassword=***
    #时间延迟
    mailTimeout=25000
    #发送人
    mailFrom=***@163.com
    #发件人
    personal=黑白色调
    #主题
    subject=***
    #内容模板
    html=您的邮箱验证码为:

    PS:1、必须登录163邮箱授权第三方使用(也就是得到邮箱授权码)。
    2、.properties文件中邮箱账号和发送人必须一致。
    邮箱授权码获取(登录邮箱—设置—客户端授权密码—开启):
    这里写图片描述

    展开全文
  • Java邮件发送详解

    万次阅读 多人点赞 2019-08-13 09:06:30
    电子邮件 要在网络上实现邮件功能,必须要有专门的邮件服务器。 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。 SMTP服务器地址:一般是 smtp....

    电子邮件

    要在网络上实现邮件功能,必须要有专门的邮件服务器。

    这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

    SMTP服务器地址:一般是 smtp.xxx.com比如163邮箱是smtp.163.comqq邮箱是smtp.qq.com

    电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请。比如我们要使用QQ邮箱,就需要开通邮箱功能;
    在这里插入图片描述

    传输协议

    SMTP协议

    发送邮件:

    我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。

    POP3协议

    接收邮件:

    我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

    邮件收发原理

    在这里插入图片描述

    1. 首先通过smtp协议连接到Smtp服务器,然后发送一封邮件给网易的邮件服务器
    2. 网易分析发现需要去QQ的邮件服务器,通过smtp协议将邮件转投给QQ的Smtp服务器
    3. QQ将接收到的邮件存储在545646733@qq.com这个邮件账号的空间中
    4. 再通过Pop3协议连接到Pop3服务器收取邮件
    5. 从545646733@qq.com这个邮件账号的空间中取出邮件
    6. Pop3服务器将取出来的邮件送出去

    注意】有可能填写的收件人地址,发件人地址等信息都正确了,控制台也打印了正确的信息,但是在收件箱就是收不到信息。这是因为可能收件箱服务器拒收了你发的邮件(比如认为你的邮件是广告),这时候可能在垃圾箱里能找到,可能找不到。解决办法是重复的邮件内容不要多次发送,或者更换收件箱试试

    Java发送邮件

    概述

    我们将用代码完成邮件的发送。这在实际项目中应用的非常广泛,比如注册需要发送邮件进行账号激活,再比如OA项目中利用邮件进行任务提醒等等。

    使用Java发送 E-mail 十分简单,但是首先你应该准备 JavaMail API 和Java Activation Framework 。

    得到两个jar包:

    • mail.jar
    • activation.jar

    JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面所讲的SMTP,POP3,IMAP,还有MIME等。我们在使用JavaMail API 编写邮件时,无须考虑邮件的底层实现细节,只要调用JavaMail 开发包中相应的API类就可以了。

    我们可以先尝试发送一封简单的邮件,首先请确保电脑可以连接网络。

    • 创建包含邮件服务器的网络连接信息的Session对象。
    • 创建代表邮件内容的Message对象
    • 创建Transport对象,连接服务器,发送Message,关闭连接

    主要有四个核心类,我们在编写程序时,记住这四个核心类,就很容易编写出Java邮件处理程序,如图所示:
    在这里插入图片描述

    纯文本邮件

    先在项目中导入jar包
    导入的就是在概述中提到的activation,jar和mail.jar包,如图所示:
    1563456199217.png

    QQ邮箱中获取对应的权限

    QQ邮箱需要安全验证,我们需要获取他对应的权限;

    进入QQ邮箱–>邮箱设置–>账户,下滑找到POP3/IMAP/SMTP/Exchange/CardDav/CalDav服务,开启POP3/SMTP服务,如图所示:
    在这里插入图片描述
    在这里插入图片描述
    记住这16位授权码,然后开始编写测试程序:

    import com.sun.mail.util.MailSSLSocketFactory;
    
    import java.util.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    
    public class SendEmail {
    
        public static void main(String[] args) throws Exception {
    
            Properties prop = new Properties();
            prop.setProperty("mail.host", "smtp.qq.com");  设置QQ邮件服务器
            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发送邮件的5个步骤
    
            //创建定义整个应用程序所需的环境信息的 Session 对象
    
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
                public PasswordAuthentication getPasswordAuthentication() {
                    //发件人邮件用户名、授权码
                    return new PasswordAuthentication("545646733@qq.com", "授权码");
                }
            });
    
    
            //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
            session.setDebug(true);
    
            //2、通过session得到transport对象
            Transport ts = session.getTransport();
    
            //3、使用邮箱的用户名和授权码连上邮件服务器
            ts.connect("smtp.qq.com", "545646733@qq.com", "授权码");
    
            //4、创建邮件
    
            //创建邮件对象
            MimeMessage message = new MimeMessage(session);
    
            //指明邮件的发件人
            message.setFrom(new InternetAddress("545646733@qq.com"));
    
            //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
            message.setRecipient(Message.RecipientType.TO, new InternetAddress("545646733@qq.com"));
    
            //邮件的标题
            message.setSubject("只包含文本的简单邮件");
    
            //邮件的文本内容
            message.setContent("你好啊!", "text/html;charset=UTF-8");
    
            //5、发送邮件
            ts.sendMessage(message, message.getAllRecipients());
    
            ts.close();
        }
    
    }
    

    带图片和附件的邮件

    先认识两个类一个名词:

    MIME(多用途互联网邮件扩展类型)

    MimeBodyPart类

    javax.mail.internet.MimeBodyPart类 表示的是一个MIME消息,它和MimeMessage类一样都是从Part接口继承过来。

    MimeMultipart类

    javax.mail.internet.MimeMultipart是抽象类 Multipart的实现子类,它用来组合多个MIME消息。一个MimeMultipart对象可以包含多个代表MIME消息的MimeBodyPart对象。

    1563462870340.png

    创建包含内嵌图片的邮件

    前面的例子中是单独的使用HTML或者是纯文本内容,但是有时候我们需要在纯文本中使用内嵌的方式显示一些图片,因此就要将纯文本和内嵌图片单独存放在MimeBodyPart中然后再将其存放在一个Mimemultipart对象中即可。
    代码如下:

    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 SendImageEmail {
        public static void main(String[] args) throws Exception {
    
            Properties prop = new Properties();
            prop.setProperty("mail.host", "smtp.qq.com");  设置QQ邮件服务器
            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发送邮件的5个步骤
    
            //1、创建定义整个应用程序所需的环境信息的 Session 对象
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
                public PasswordAuthentication getPasswordAuthentication() {
                    //发件人邮件用户名、授权码
                    return new PasswordAuthentication("545646733@qq.com", "授权码");
                }
            });
    
    
            //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
            session.setDebug(true);
    
            //2、通过session得到transport对象
            Transport ts = session.getTransport();
    
            //3、使用邮箱的用户名和授权码连上邮件服务器
            ts.connect("smtp.qq.com", "545646733@qq.com", "授权码");
    
            //4、创建邮件
    
            //创建邮件
            MimeMessage message = new MimeMessage(session);
    
            // 设置邮件的基本信息
            //发件人
            message.setFrom(new InternetAddress("545646733@qq.com"));
            //收件人
            message.setRecipient(Message.RecipientType.TO, new InternetAddress("545646733@qq.com"));
            //邮件标题
            message.setSubject("带图片的邮件");
    
            // 准备邮件数据
    
            // 准备图片数据
            MimeBodyPart image = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg"));
            image.setDataHandler(dh);
            image.setContentID("bz.jpg");
    
            // 准备正文数据
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("这是一封邮件正文带图片<img src='cid:bz.jpg'>的邮件", "text/html;charset=UTF-8");
    
            // 描述数据关系
            MimeMultipart mm = new MimeMultipart();
            mm.addBodyPart(text);
            mm.addBodyPart(image);
            mm.setSubType("related");
    
            //设置到消息中,保存修改
            message.setContent(mm);
            message.saveChanges();
    
            //5.发送邮件
            ts.sendMessage(message, message.getAllRecipients());
            ts.close();
        }
    }
    

    带图片和附件的复杂邮件发送
    代码如下:

    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.security.GeneralSecurityException;
    import java.util.Properties;
    
    public class SendFileMail {
        public static void main(String[] args) throws MessagingException, GeneralSecurityException {
    
            //创建一个配置文件保存并读取信息
            Properties properties = new Properties();
    
            //设置qq邮件服务器
            properties.setProperty("mail.host","smtp.qq.com");
            //设置发送的协议
            properties.setProperty("mail.transport.protocol","smtp");
            //设置用户是否需要验证
            properties.setProperty("mail.smtp.auth", "true");
    
    
            //=================================只有QQ存在的一个特性,需要建立一个安全的链接
            // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            properties.put("mail.smtp.ssl.enable", "true");
            properties.put("mail.smtp.ssl.socketFactory", sf);
    
            //=================================准备工作完毕
    
            //1.创建一个session会话对象;
            Session session = Session.getDefaultInstance(properties, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("545646733@qq.com", "授权码");
                }
            });
    
            //可以通过session开启Dubug模式,查看所有的过程
            session.setDebug(true);
    
    
            //2.获取连接对象,通过session对象获得Transport,需要捕获或者抛出异常;
            Transport tp = session.getTransport();
    
            //3.连接服务器,需要抛出异常;
            tp.connect("smtp.qq.com","545646733@qq.com","授权码");
    
            //4.连接上之后我们需要发送邮件;
            MimeMessage mimeMessage = imageMail(session);
    
            //5.发送邮件
            tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
    
            //6.关闭连接
            tp.close();
    
        }
    
    
        public static MimeMessage imageMail(Session session) throws MessagingException {
    
            //消息的固定信息
            MimeMessage mimeMessage = new MimeMessage(session);
    
            //邮件发送人
            mimeMessage.setFrom(new InternetAddress("545646733@qq.com"));
            //邮件接收人,可以同时发送给很多人,我们这里只发给自己;
            mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("545646733@qq.com"));
            mimeMessage.setSubject("我也不知道是个什么东西就发给你了"); //邮件主题
    
    
            /*
            编写邮件内容
            1.图片
            2.附件
            3.文本
             */
    
            //图片
            MimeBodyPart body1 = new MimeBodyPart();
            body1.setDataHandler(new DataHandler(new FileDataSource("src/resources/yhbxb.png")));
            body1.setContentID("yhbxb.png"); //图片设置ID
    
            //文本
            MimeBodyPart body2 = new MimeBodyPart();
            body2.setContent("请注意,我不是广告<img src='cid:yhbxb.png'>","text/html;charset=utf-8");
    
            //附件
            MimeBodyPart body3 = new MimeBodyPart();
            body3.setDataHandler(new DataHandler(new FileDataSource("src/resources/log4j.properties")));
            body3.setFileName("log4j.properties"); //附件设置名字
    
            MimeBodyPart body4 = new MimeBodyPart();
            body4.setDataHandler(new DataHandler(new FileDataSource("src/resources/1.txt")));
            body4.setFileName(""); //附件设置名字
    
            //拼装邮件正文内容
            MimeMultipart multipart1 = new MimeMultipart();
            multipart1.addBodyPart(body1);
            multipart1.addBodyPart(body2);
            multipart1.setSubType("related"); //1.文本和图片内嵌成功!
    
            //new MimeBodyPart().setContent(multipart1); //将拼装好的正文内容设置为主体
            MimeBodyPart contentText =  new MimeBodyPart();
            contentText.setContent(multipart1);
    
            //拼接附件
            MimeMultipart allFile =new MimeMultipart();
            allFile.addBodyPart(body3); //附件
            allFile.addBodyPart(body4); //附件
            allFile.addBodyPart(contentText);//正文
            allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed;
    
    
            //放到Message消息中
            mimeMessage.setContent(allFile);
            mimeMessage.saveChanges();//保存修改
    
    
            return mimeMessage;
    
        }
    
    }
    

    JavaWeb发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息。今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以Email的形式发送到用户的注册邮箱当中,实现发送邮件功能就得借助于JavaMail了。

    项目实现:

    1. 新建一个JavaWeb项目,配置tomcat的参数,然后添加jar包(记得在tomcat目录下的common目录下也导包,不然会报500错误),并且添加实体类User,Servlet类RegisterServlet,工具类Sendmail,如图所示:
      在这里插入图片描述
    2. User类代码如下:
    public class User {
    
        private String username;
        private String password;
        private String email;
    
        public User() {
        }
    
        public User(String username, String password, String email) {
            this.username = username;
            this.password = password;
            this.email = email;
        }
    
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    ", email='" + email + '\'' +
                    '}';
        }
    }
    
    1. 前端注册页面register.jsp代码如下:
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>注册</title>
    </head>
    <body>
    
    <form action="${pageContext.request.contextPath}/RegisterServlet.do" method="post">
        用户名:<input type="text" name="username"><br/>
        密码:<input type="password" name="password"><br/>
        邮箱:<input type="text" name="email"><br/>
        <input type="submit" value="注册">
    </form>
    
    </body>
    </html>
    
    1. 工具类Sendmail类代码如下:
    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 Sendmail extends Thread {
    
        //用于给用户发送邮件的邮箱
        private String from = "24736743@qq.com";
        //邮箱的用户名
        private String username = "24736743@qq.com";
        //邮箱的密码
        private String password = "授权码";
        //发送邮件的服务器地址
        private String host = "smtp.qq.com";
    
        private User user;
        public Sendmail(User user){
            this.user = user;
        }
    
        //重写run方法的实现,在run方法中发送邮件给指定的用户
        @Override
        public void run() {
            try{
                Properties prop = new Properties();
                prop.setProperty("mail.host", host);
                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("24736743@qq.com", "授权码");
                    }
                });
    
                //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
                session.setDebug(true);
    
                //2、通过session得到transport对象
                Transport ts = session.getTransport();
    
                //3、使用邮箱的用户名和授权码连上邮件服务器
                ts.connect(host, username, password);
    
                //4、创建邮件
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(from)); //发件人
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail())); //收件人
                message.setSubject("用户注册邮件"); //邮件的标题
    
                String info = "恭喜您注册成功,您的用户名:" + user.getUsername() + ",您的密码:" + user.getPassword() + ",请妥善保管,如有问题请联系网站客服!!";
    
                message.setContent(info, "text/html;charset=UTF-8");
                message.saveChanges();
    
                //发送邮件
                ts.sendMessage(message, message.getAllRecipients());
                ts.close();
            }catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    
    1. Servlet类RegisterServlet类代码如下:
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class RegisterServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
                //接收用户请求,封装成对象
                String username = request.getParameter("username");
                String password = request.getParameter("password");
                String email = request.getParameter("email");
                User user = new User(username,password,email);
    
                //用户注册成功之后,给用户发送一封邮件
                //我们使用线程来专门发送邮件,防止出现耗时,和网站注册人数过多的情况;
                Sendmail send = new Sendmail(user);
                //启动线程,线程启动之后就会执行run方法来发送邮件
                send.start();
    
                //注册用户
                request.setAttribute("message", "注册成功,我们已经发了一封带了注册信息的电子邮件,请查收!如网络不稳定,可能过会儿才能收到!!");
                request.getRequestDispatcher("info.jsp").forward(request, response);
            } catch (Exception e) {
                e.printStackTrace();
                request.setAttribute("message", "注册失败!!");
                request.getRequestDispatcher("info.jsp").forward(request, response);
            }
        }
    
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    1. 配置web.xml,代码如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>register</servlet-name>
            <servlet-class>com.kuang.servlet.RegisterServlet</servlet-class>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>register</servlet-name>
            <url-pattern>/RegisterServlet.do</url-pattern>
        </servlet-mapping>
    </web-app>
    
    1. 编写反馈页面info.jsp,代码如下:
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>提示信息</title>
    </head>
    <body>
        ${message}
    </body>
    </html>
    
    展开全文
  • Java 发送邮件的几种方式

    万次阅读 多人点赞 2018-10-24 14:53:38
    发送文件的项目地址(free):https://download.csdn.net/download/qq_36474549/10741073 导入jar包:activation-1.1.jar...发送一封只包含文本的简单邮件 SendEmail_text.java  2.发送包含内嵌图片的邮件 Send...

    发送文件的项目地址(free):https://download.csdn.net/download/qq_36474549/10741073

    导入jar包:activation-1.1.jar   javax.mail-1.6.2.jar

    内容:1.发送一封只包含文本的简单邮件    SendEmail_text.java

               2.发送包含内嵌图片的邮件     SendEmail_photo.java

               3.发送包含附件的邮件     SendEmail_attachments.java

               4.发送包含内嵌图片和附件的复杂邮件     SendEmail_Photo_Attachments.java

    1. 发送一封只包含文本的简单邮件

    package cn.wz.util;
    
    import java.util.Properties;
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    /**
     * @ClassName: Sendmail
     * @Description: 发送一封只包含文本的简单邮件
     */
    public class SendEmail_text {
    	private static String mailFrom = null;// 指明邮件的发件人
    	private static String password_mailFrom = null;// 指明邮件的发件人登陆密码
    	private static String mailTo = null;	// 指明邮件的收件人
    	private static String mailTittle = null;// 邮件的标题
    	private static String mailText =null;	// 邮件的文本内容
    	private static String mail_host =null;	// 邮件的服务器域名
    	
    	public static void main(String[] args) throws Exception {
    		mailFrom = "test1@wz.com";
    		password_mailFrom="test";
    		mailTo = "test2@xk.com";
    		mailTittle="节日快乐2!";
    		mailText = "这是一个简单的邮件";
    		mail_host="wz.com";
    		
    		Properties prop = new Properties();
    		prop.setProperty("mail.host", mail_host);
    		prop.setProperty("mail.transport.protocol", "smtp");
    		prop.setProperty("mail.smtp.auth", "true");
    
    		// 使用JavaMail发送邮件的5个步骤
    
    		// 1、创建session
    		Session session = Session.getInstance(prop);
    		// 开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
    		session.setDebug(true);
    		// 2、通过session得到transport对象
    		Transport ts = session.getTransport();
    		// 3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
    		ts.connect(mail_host,mailFrom, password_mailFrom);
    		// 4、创建邮件
    		Message message = createSimpleMail(session,mailFrom,mailTo,mailTittle,mailText);
    		// 5、发送邮件
    		ts.sendMessage(message, message.getAllRecipients());
    		ts.close();
    	}
    
    	/**
    	 * @Method: createSimpleMail
    	 * @Description: 创建一封只包含文本的邮件
    	 */
    	public static MimeMessage createSimpleMail(Session session, String mailfrom, String mailTo, String mailTittle,
    			String mailText) throws Exception {
    		// 创建邮件对象
    		MimeMessage message = new MimeMessage(session);
    		// 指明邮件的发件人
    		message.setFrom(new InternetAddress(mailfrom));
    		// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
    		message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));
    		// 邮件的标题
    		message.setSubject(mailTittle);
    		// 邮件的文本内容
    		message.setContent(mailText, "text/html;charset=UTF-8");
    		// 返回创建好的邮件对象
    		return message;
    	}
    }
    

    2.发送包含内嵌图片的邮件

    package cn.wz.util;
    
    import java.io.FileOutputStream;
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    
    /**
     * @Description: 发送包含内嵌图片的邮件
     */
    public class SendEmail_photo {
    
    	private static String mailFrom = null;// 指明邮件的发件人
    	private static String password_mailFrom = null;// 指明邮件的发件人登陆密码
    
    	private static String mailTo = null; // 指明邮件的收件人
    
    	private static String mailTittle = null;// 邮件的标题
    
    	private static String mailText = null; // 邮件的文本内容
    
    	private static String mail_host = null; // 邮件的服务器域名
    
    	private static String photoSrc = null; // 发送图片的路径
    
    	public static void main(String[] args) throws Exception {
    
    		mailFrom = "test1@wz.com";
    		password_mailFrom = "test";
    		mailTo = "test2@wz.com";
    		mailTittle = "带图片的邮件";
    		mailText = "这是一封邮件正文带图片的邮件";
    		mail_host = "wz.com";
    		photoSrc = "resource\\images\\3.jpg";
    
    		Properties prop = new Properties();
    		prop.setProperty("mail.host", mail_host);// 需要修改
    		prop.setProperty("mail.transport.protocol", "smtp");
    		prop.setProperty("mail.smtp.auth", "true");
    		// 使用JavaMail发送邮件的5个步骤
    		// 1、创建session
    		Session session = Session.getInstance(prop);
    		// 开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
    		session.setDebug(true);
    		// 2、通过session得到transport对象
    		Transport ts = session.getTransport();
    		// 3、连上邮件服务器,需要发件人提供邮箱的用户名和密码进行验证
    		ts.connect(mail_host, mailFrom, password_mailFrom);// 需要修改
    		// 4、创建邮件
    		Message message = createImageMail(session);
    		// 5、发送邮件
    		ts.sendMessage(message, message.getAllRecipients());
    		ts.close();
    	}
    
    	/**
    	 * @Method: createImageMail
    	 * @Description: 生成一封邮件正文带图片的邮件
    	 * @param session
    	 * @return
    	 * @throws Exception
    	 */
    	public static MimeMessage createImageMail(Session session) throws Exception {
    		// 创建邮件
    		MimeMessage message = new MimeMessage(session);
    		// 设置邮件的基本信息
    
    		message.setFrom(new InternetAddress(mailFrom)); // 发件人
    
    		message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo)); // 收件人
    		// 邮件标题
    		message.setSubject(mailTittle);
    
    		// 准备邮件数据
    		// 准备邮件正文数据
    		MimeBodyPart text = new MimeBodyPart();
    		text.setContent(mailText + "<img src='cid:xxx.jpg'>", "text/html;charset=UTF-8");// 需要修改
    		// 准备图片数据
    		MimeBodyPart image = new MimeBodyPart();
    		DataHandler dh = new DataHandler(new FileDataSource(photoSrc));// 需要修改
    		image.setDataHandler(dh);
    		image.setContentID("xxx.jpg");// 需要修改
    		// 描述数据关系
    		MimeMultipart mm = new MimeMultipart();
    		mm.addBodyPart(text);
    		mm.addBodyPart(image);
    		mm.setSubType("related");
    
    		message.setContent(mm);
    		message.saveChanges();
    		// 将创建好的邮件写入到F盘以文件的形式进行保存
    		message.writeTo(new FileOutputStream("F:/Program Files/TestMail/ImageMail.eml"));// 需要修改
    		// 返回创建好的邮件
    		return message;
    	}
    }

    3.发送包含附件的邮件

    package cn.wz.util;
    
    import java.io.FileOutputStream;
    import java.util.Properties;
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    
    /**
     * @Description: 发送包含附件的邮件
     */
    
    public class SendEmail_attachments {
    
    	private static String mailFrom = null;// 指明邮件的发件人
    	private static String password_mailFrom = null;// 指明邮件的发件人登陆密码
    	private static String mailTo = null; // 指明邮件的收件人
    	private static String mailTittle = null;// 邮件的标题
    	private static String mailText = null; // 邮件的文本内容
    	private static String mail_host = null; // 邮件的服务器域名
    	private static String photoSrc = null; // 发送图片的路径
    	public static void main(String[] args) throws Exception {
    
    		mailFrom = "test1@wz.com";
    		password_mailFrom = "test";
    		mailTo = "test2@wz.com";
    		mailTittle = "JavaMail邮件发送测试";
    		mailText = "使用JavaMail创建的带附件的邮件";
    		mail_host = "wz.com";
    		photoSrc = "resource\\images\\5.jpg";
    
    		Properties prop = new Properties();
    		prop.setProperty("mail.host", mail_host);// 需要修改
    		prop.setProperty("mail.transport.protocol", "smtp");
    		prop.setProperty("mail.smtp.auth", "true");
    
    		// 使用JavaMail发送邮件的5个步骤
    		// 1、创建session
    		Session session = Session.getInstance(prop);
    		// 开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
    		session.setDebug(true);
    		// 2、通过session得到transport对象
    		Transport ts = session.getTransport();
    		// 3、连上邮件服务器,需要发件人提供邮箱的用户名和密码进行验证
    		ts.connect(mail_host, mailFrom, password_mailFrom);// 需要修改
    		// 4、创建邮件
    		Message message = createAttachMail(session);
    		// 5、发送邮件
    		ts.sendMessage(message, message.getAllRecipients());
    		ts.close();
    	}
    
    	/**
    	 * @Method: createAttachMail
    	 * @Description: 创建一封带附件的邮件
    	 */
    	public static MimeMessage createAttachMail(Session session) throws Exception {
    		MimeMessage message = new MimeMessage(session);
    
    		// 设置邮件的基本信息
    	
    		message.setFrom(new InternetAddress(mailFrom));	// 发件人
    		
    		message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));// 收件人
    		// 邮件标题
    		message.setSubject(mailTittle);
    
    		// 创建邮件正文,为了避免邮件正文中文乱码问题,需要使用charset=UTF-8指明字符编码
    		MimeBodyPart text = new MimeBodyPart();
    		text.setContent(mailText, "text/html;charset=UTF-8");
    
    		// 创建邮件附件
    		MimeBodyPart attach = new MimeBodyPart();
    		DataHandler dh = new DataHandler(new FileDataSource(photoSrc));// 需要修改
    		attach.setDataHandler(dh);
    		attach.setFileName(dh.getName());
    
    		// 创建容器描述数据关系
    		MimeMultipart mp = new MimeMultipart();
    		mp.addBodyPart(text);
    		mp.addBodyPart(attach);
    		mp.setSubType("mixed");
    
    		message.setContent(mp);
    		message.saveChanges();
    		// 将创建的Email写入到F盘存储
    		message.writeTo(new FileOutputStream("F:/Program Files/TestMail/ImageMail.eml"));// 需要修改
    		// 返回生成的邮件
    		return message;
    	}
    }

    4.发送包含内嵌图片和附件的复杂邮件

    package cn.wz.util;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Properties;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import javax.mail.internet.MimeUtility;
    
    /**
     * @Description: 发送包含内嵌图片和附件的复杂邮件
     */
    
    public class SendEmail_Photo_Attachments {
    
    	private static String mailFrom = null;// 指明邮件的发件人
    	private static String password_mailFrom = null;// 指明邮件的发件人登陆密码
    	private static String mailTo = null; // 指明邮件的收件人
    	private static String mailTittle = null;// 邮件的标题
    	private static String mailText = null; // 邮件的文本内容
    	private static String mail_host = null; // 邮件的服务器域名
    	private static String photoSrc = null; // 发送图片的路径
    	private static List<String> fileList = new ArrayList<>(); // 发送附件的路径
    
    	public static void main(String[] args) throws Exception {
    		mailFrom = "test2@wz.com";
    		password_mailFrom = "test";
    		mailTo = "test3@wz.com";
    		mailTittle = "带附件和带图片的的邮件";
    		mailText ="xxx这是xxxx";
    		mail_host = "wz.com";
    		photoSrc = "resource\\images\\4.jpg";
    		fileList.add(0,"resource\\attachments\\a.7z");
    		fileList.add(1,"resource\\attachments\\b.7z");
    		
    
    		Properties prop = new Properties();
    		prop.setProperty("mail.host", mail_host);// 需要修改
    		prop.setProperty("mail.transport.protocol", "smtp");
    		prop.setProperty("mail.smtp.auth", "true");
    
    		// 使用JavaMail发送邮件的5个步骤
    		// 1、创建session
    		Session session = Session.getInstance(prop);
    		// 开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
    		session.setDebug(true);
    		// 2、通过session得到transport对象
    		Transport ts = session.getTransport();
    		// 3、连上邮件服务器,需要发件人提供邮箱的用户名和密码进行验证
    		ts.connect(mail_host, mailFrom, password_mailFrom);// 需要修改
    		// 4、创建邮件
    		Message message = createMixedMail(session);
    		// 5、发送邮件
    		ts.sendMessage(message, message.getAllRecipients());
    		ts.close();
    	}
    
    	/**
    	 * @Method: createMixedMail
    	 * @Description: 生成一封带附件和带图片的邮件
    	 */
    	public static MimeMessage createMixedMail(Session session) throws Exception {
    		MimeMessage message = new MimeMessage(session);
    		// 设置邮件的基本信息
    		message.setFrom(new InternetAddress(mailFrom));	// 发件人	
    		message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));// 收件人
    		message.setSubject(mailTittle);
    
    		// 正文
    		MimeBodyPart text = new MimeBodyPart();
    		text.setContent(mailText+"<br/><img src='cid:aaa.jpg'>", "text/html;charset=UTF-8");
    
    		// 图片
    		MimeBodyPart image = new MimeBodyPart();
    		image.setDataHandler(new DataHandler(new FileDataSource(photoSrc)));
    		image.setContentID("aaa.jpg");
    
    		// 附件1
    		MimeBodyPart attach = new MimeBodyPart();
    		DataHandler dh = new DataHandler(new FileDataSource(fileList.get(0)));
    		attach.setDataHandler(dh);
    		attach.setFileName(dh.getName());
    
    		// 附件2
    		MimeBodyPart attach2 = new MimeBodyPart();
    		DataHandler dh2 = new DataHandler(new FileDataSource(fileList.get(1)));
    		attach2.setDataHandler(dh2);
    		attach2.setFileName(MimeUtility.encodeText(dh2.getName()));
    
    		// 描述关系:正文和图片
    		MimeMultipart mp1 = new MimeMultipart();
    		mp1.addBodyPart(text);
    		mp1.addBodyPart(image);
    		mp1.setSubType("related");
    
    		// 描述关系:正文和附件
    		MimeMultipart mp2 = new MimeMultipart();
    		mp2.addBodyPart(attach);
    		mp2.addBodyPart(attach2);
    
    		// 代表正文的bodypart
    		MimeBodyPart content = new MimeBodyPart();
    		content.setContent(mp1);
    		mp2.addBodyPart(content);
    		mp2.setSubType("mixed");
    
    		message.setContent(mp2);
    		message.saveChanges();
    
    		message.writeTo(new FileOutputStream("F:/Program Files/TestMail/ImageMail.eml"));
    		// 返回创建好的的邮件
    		return message;
    	}
    }

     

    展开全文
  • 图文并茂邮件实现、普通邮件发送演示、带附件的邮件发送的源码以及编写时所参考的相关资料和大家分享一下!
  • Java实现邮件发送

    万次阅读 多人点赞 2019-08-22 14:05:18
    Java实现邮件发送 一、邮件服务器与传输协议 要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱...

    Java实现邮件发送

    一、邮件服务器与传输协议

    • 要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

    • SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。

    • SMTP协议

      通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。

    • POP3协议

      通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

    二、Java发送邮件

    在这里插入图片描述
    使用到的jar包:

    • mail.jar
    • activation.jar

    QQ邮箱需获取相应的权限:

    QQ邮箱–>邮箱设置–>账户–>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 开启POP3/SMTP服务,然后获取16位授权码(注意不要将授权码泄露,一个账户可以拥有多个授权码)
    在这里插入图片描述
    Java实现纯文本邮件发送

    package org.westos.email;
    
    import com.sun.mail.util.MailSSLSocketFactory;
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.security.GeneralSecurityException;
    import java.util.Properties;
    
    public class SendEamil {
        public static void main(String[] args) throws MessagingException, GeneralSecurityException {
            //创建一个配置文件并保存
            Properties properties = new Properties();
    
            properties.setProperty("mail.host","smtp.qq.com");
    
            properties.setProperty("mail.transport.protocol","smtp");
    
            properties.setProperty("mail.smtp.auth","true");
    
    
            //QQ存在一个特性设置SSL加密
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            properties.put("mail.smtp.ssl.enable", "true");
            properties.put("mail.smtp.ssl.socketFactory", sf);
    
            //创建一个session对象
            Session session = Session.getDefaultInstance(properties, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("619046217@qq.com","16位授权码");
                }
            });
    
            //开启debug模式
            session.setDebug(true);
    
            //获取连接对象
            Transport transport = session.getTransport();
    
            //连接服务器
            transport.connect("smtp.qq.com","619046217@qq.com","16位授权码");
    
            //创建邮件对象
            MimeMessage mimeMessage = new MimeMessage(session);
    
            //邮件发送人
            mimeMessage.setFrom(new InternetAddress("619046217@qq.com"));
    
            //邮件接收人
            mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("875203654@qq.com"));
    
            //邮件标题
            mimeMessage.setSubject("Hello Mail");
    
            //邮件内容
            mimeMessage.setContent("我的想法是把代码放进一个循环里","text/html;charset=UTF-8");
    
            //发送邮件
            transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
    
            //关闭连接
            transport.close();
        }
    }
    

    Java实现文本图片附件复杂的邮件发送
    MIME(多用途互联网邮件扩展类型)

    MimeBodyPart类

    javax.mail.internet.MimeBodyPart类 表示的是一个MIME消息,它和MimeMessage类一样都是从Part接口继承过来。

    MimeMultipart类

    javax.mail.internet.MimeMultipart是抽象类 Multipart的实现子类,它用来组合多个MIME消息。一个MimeMultipart对象可以包含多个代表MIME消息的MimeBodyPart对象

    package org.westos.email;
    
    import com.sun.mail.util.MailSSLSocketFactory;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.security.GeneralSecurityException;
    import java.util.Properties;
    
    public class SendComplexEmail {
        public static void main(String[] args) throws GeneralSecurityException, MessagingException {
            Properties prop = new Properties();
            prop.setProperty("mail.host", "smtp.qq.com");  设置QQ邮件服务器
            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() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    //传入发件人的姓名和授权码
                    return new PasswordAuthentication("619046217@qq.com","16位授权码");
                }
            });
    
            //2、通过session获取transport对象
            Transport transport = session.getTransport();
    
            //3、通过transport对象邮箱用户名和授权码连接邮箱服务器
            transport.connect("smtp.qq.com","619046217@qq.com","16位授权码");
    
            //4、创建邮件,传入session对象
            MimeMessage mimeMessage = complexEmail(session);
    
            //5、发送邮件
            transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
    
            //6、关闭连接
            transport.close();
    
    
        }
    
        public static MimeMessage complexEmail(Session session) throws MessagingException {
            //消息的固定信息
            MimeMessage mimeMessage = new MimeMessage(session);
    
            //发件人
            mimeMessage.setFrom(new InternetAddress("619046217@qq.com"));
            //收件人
            mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("619046217@qq.com"));
            //邮件标题
            mimeMessage.setSubject("带图片和附件的邮件");
    
            //邮件内容
            //准备图片数据
            MimeBodyPart image = new MimeBodyPart();
            DataHandler handler = new DataHandler(new FileDataSource("E:\\IdeaProjects\\WebEmail\\resources\\测试图片.png"));
            image.setDataHandler(handler);
            image.setContentID("test.png"); //设置图片id
    
            //准备文本
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("这是一段文本<img src='cid:test.png'>","text/html;charset=utf-8");
    
            //附件
            MimeBodyPart appendix = new MimeBodyPart();
            appendix.setDataHandler(new DataHandler(new FileDataSource("E:\\IdeaProjects\\WebEmail\\resources\\测试文件.txt")));
            appendix.setFileName("test.txt");
    
            //拼装邮件正文
            MimeMultipart mimeMultipart = new MimeMultipart();
            mimeMultipart.addBodyPart(image);
            mimeMultipart.addBodyPart(text);
            mimeMultipart.setSubType("related");//文本和图片内嵌成功
    
            //将拼装好的正文内容设置为主体
            MimeBodyPart contentText = new MimeBodyPart();
            contentText.setContent(mimeMultipart);
    
            //拼接附件
            MimeMultipart allFile = new MimeMultipart();
            allFile.addBodyPart(appendix);//附件
            allFile.addBodyPart(contentText);//正文
            allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed
    
    
            //放到Message消息中
            mimeMessage.setContent(allFile);
            mimeMessage.saveChanges();//保存修改
    
            return mimeMessage;
        }
    }
    
    

    JavaWeb发送邮件(网站注册成功发送提示邮件)

    1. User

      package org.westos.mail;
      
      public class User {
          private String name;
          private String password;
          private String mail;
      
          public User() {
          }
      
          public User(String name, String password, String mail) {
              this.name = name;
              this.password = password;
              this.mail = mail;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getPassword() {
              return password;
          }
      
          public void setPassword(String password) {
              this.password = password;
          }
      
          public String getMail() {
              return mail;
          }
      
          public void setMail(String mail) {
              this.mail = mail;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "name='" + name + '\'' +
                      ", password='" + password + '\'' +
                      ", mail='" + mail + '\'' +
                      '}';
          }
      }
      
      
    2. Servlet

      package org.westos.mail;
      
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      public class Servlet extends javax.servlet.http.HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              doGet(request,response);
          }
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) {
              //处理前端请求
              String username = request.getParameter("username");
              String password = request.getParameter("password");
              String email = request.getParameter("email");
      
              //将信息封装进user对象
              User user = new User(username, password, email);
      
              SendMail sendMail = new SendMail(user);
              sendMail.start(); //开启线程
      
              request.setAttribute("msg","发送成功");
              try {
                  request.getRequestDispatcher("msg.jsp").forward(request,response);
              } catch (ServletException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              }
      
      
          }
      }
      
      
    3. SengMail

      package org.westos.mail;
      
      import com.sun.mail.util.MailSSLSocketFactory;
      
      import javax.mail.*;
      import javax.mail.internet.AddressException;
      import javax.mail.internet.InternetAddress;
      import javax.mail.internet.MimeMessage;
      import java.security.GeneralSecurityException;
      import java.security.PublicKey;
      import java.util.Properties;
      
      public class SendMail extends Thread {
          //发件人信息
          private String From = "619046217@qq.com";
          //发件人邮箱
          private String recipient = "619046217@qq.com";
          //邮箱密码
          private String password = "16位授权码";
          //邮件发送的服务器
          private String host = "smtp.qq.com";
      
          //收件人信息
          private User user;
          public SendMail(User user){
              this.user = user;
          }
      
          @Override
          public void run() {
              try {
                  Properties properties = new Properties();
      
                  properties.setProperty("mail.host","smtp.qq.com");
      
                  properties.setProperty("mail.transport.protocol","smtp");
      
                  properties.setProperty("mail.smtp.auth","true");
      
                  //QQ存在一个特性设置SSL加密
                  MailSSLSocketFactory sf = null;
                  try {
                      sf = new MailSSLSocketFactory();
                  } catch (GeneralSecurityException e) {
                      e.printStackTrace();
                  }
                  sf.setTrustAllHosts(true);
                  properties.put("mail.smtp.ssl.enable", "true");
                  properties.put("mail.smtp.ssl.socketFactory", sf);
      
                  //创建一个session对象
                  Session session = Session.getDefaultInstance(properties, new Authenticator() {
                      @Override
                      protected PasswordAuthentication getPasswordAuthentication() {
                          return new PasswordAuthentication(recipient,password);
                      }
                  });
      
                  //开启debug模式
                  session.setDebug(true);
      
                  //获取连接对象
                  Transport transport = null;
                  try {
                      transport = session.getTransport();
                  } catch (NoSuchProviderException e) {
                      e.printStackTrace();
                  }
      
                  //连接服务器
                  transport.connect(host,From,password);
      
      
                  //创建一个邮件发送对象
                  MimeMessage mimeMessage = new MimeMessage(session);
                  //邮件发送人
                  mimeMessage.setFrom(new InternetAddress(recipient));
      
                  //邮件接收人
                  mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getMail()));
      
                  //邮件标题
                  mimeMessage.setSubject("网站注册成功");
      
                  //邮件内容
                  mimeMessage.setContent("网站注册成功,密码为"+user.getPassword()+",请妥善保管密码","text/html;charset=UTF-8");
      
                  //发送邮件
                  transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
      
                  transport.close();
      
              }catch (Exception e){
                  e.printStackTrace();
              }
      
          }
      
      }
      
      
      
    4. register.jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>注册页面</title>
      </head>
      <body>
      
      <form action="${pageContext.request.contextPath}/a.do" method="post">
          <p>用户名:<input type="text" name="username" required></p>
          <p>密码:<input type="password" name="password" required></p>
          <p>邮箱:<input type="email" name="email" required></p>
          <p><input type="submit" value="提交"></p>
      </form>
      </body>
      </html>
      
      
    5. msg.jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      ${msg}
      </body>
      </html>
      
      
    6. web.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
               version="4.0">
          <servlet>
              <servlet-name>Servlet</servlet-name>
              <servlet-class>org.westos.mail.Servlet</servlet-class>
          </servlet>
      
          <servlet-mapping>
              <servlet-name>Servlet</servlet-name>
              <url-pattern>/a.do</url-pattern>
          </servlet-mapping>
      </web-app>
      
    展开全文
  • 利用java实现发送邮件

    万次阅读 多人点赞 2018-11-04 17:44:53
    电子邮件的应用非常广泛...本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。电子邮件协议 电子邮件在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMA...
  • java实现邮件发送

    千次阅读 2019-03-07 19:48:36
    java实现邮件发送逻辑并不复杂(不包含附件),只是根据官方调用官方提供的sdk,首先需要引入maven依赖:javax.mail &lt;dependency &gt; &lt;groupId &gt;com.sun.mail&lt;/groupId &gt...
  • 基于JavaMail的Java邮件发送:简单邮件发送

    万次阅读 多人点赞 2019-01-24 11:59:59
    本文链接: ... ...但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发...
  • java 邮件发送工具类

    千次阅读 2016-04-28 13:59:29
    java 邮件发送 工具类
  • 基于JavaMail的Java邮件发送:复杂邮件发送

    万次阅读 多人点赞 2019-01-09 15:16:16
    上一篇文章 基于 JavaMail 的 Java 邮件发送:简单邮件发送 讲解了邮件的基本协议,JavaMail组件,创建并发送一封简单邮件的详细步骤。本文将介绍如何创建并发送一封包含图片和附件的复杂邮件。 一封复杂的邮件内容...
  • Java邮件发送详解(可发送附件)

    万次阅读 2016-11-27 14:45:02
    发送前需要引用mail-1.4.5.jar,资源下载参见下载链接。 一、邮件内容实体类package mail;import java.security.GeneralSecurityException; import java.util.Properties;import ...
  • Java 邮件发送失败常见异常类型

    千次阅读 2019-03-15 16:45:44
    请检查是否有用户发送病毒或者垃圾邮件并核对发送列表有效性; •421 HL:ICC 该IP同时并发连接数过大,超过了网易的限制,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并降低IP并发连接数量; •421 HL:...
  • Java 邮件发送验证码

    2019-04-05 18:23:44
    由于项目需要使用邮箱发送验证码,废话不多说直接上代码 jar包的话就一个javax.mail-1.6.0.jar 注意: 需要手动将邮箱的POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务打开 import javax.mail.*; import javax.mail...
  • java邮件发送工具类

    2018-07-11 17:39:00
    项目中要用到邮箱验证功能,所有写了一个在项目中用到的邮箱工具类,主要是用在本项目中的,参数都是调用...import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import ja...
  • 其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。  JavaMail 我们平时通过 Java 代码打开一个 http 网页链接时
  • 国内通过JAVA实现邮件发送使用 smtp.qq.com ,国外的邮件发送能否使用。
  • 共包含三个类:MailAuthenticator、MailMessage、MailUtil import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class MailAuthenticator extends Authenticator { ...
  • Java发送邮件的几种方式

    万次阅读 多人点赞 2019-03-04 12:58:26
    最近的一个项目中用到了邮件发送,所以研究了一下。将其总结下来。 要发送邮件就要用到java中的JavaMail,关于JavaMailAPI的详解呢在 (http://blog.csdn.net/imain/article/details/1453677“)中有非常详尽的介绍,...
  • JAVA邮件发送的简单实现

    万次阅读 热门讨论 2011-11-08 17:02:48
    JAVA邮件发送的简单实现 JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件。这一机制...
  • 【通过命令行】测试邮件域名解析和邮件端口状态: ...JavaMail介绍及发送一封简单邮件: http://blog.csdn.net/ghsau/article/details/17839983 (163邮箱要启用授权码,第三方的密码和邮箱登录密码是不一样...
1 2 3 4 5 ... 20
收藏数 119,207
精华内容 47,682
关键字:

java邮件发送