zoukankan      html  css  js  c++  java
  • 《Java知识应用》Java发送邮件(QQ,163)

    1 准备

    Jar包下载地址:

    链接: https://pan.baidu.com/s/1kFZgWRR8yZaQH_baf6tzAg 提取码: x2e8

    邮箱:授权码

    2.案例:

    通过QQ邮箱服务器

    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.BodyPart;
    import javax.mail.Message;
    import javax.mail.Multipart;
    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 java.util.Properties;
    
    public class SendQQMailUtil {
    
        static String FROM = ""; // 发件人地址
        static String AFFIX = ""; // 附件地址
        static String AFFIXNAME = ""; // 附件名称
        static String USER = ""; // 用户名
        static String PWD = ""; // QQ的授权码
        static String SUBJECT = ""; // 邮件标题
        static String[] TOS = new String[]{""};  // 收件人地址
        static String context = "";   //邮件正文
    
        public static void main(String[] args) {
            Properties properties = new Properties();
            properties.put("mail.transport.protocol", "smtp");// 连接协议
            properties.put("mail.smtp.host", "smtp.qq.com");// 主机名
            properties.put("mail.smtp.port", 465);// 端口号
            properties.put("mail.smtp.auth", "true");
            properties.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用
            properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
            // 得到回话对象
            Session session = Session.getInstance(properties);
            // 获取邮件对象
            Message message = new MimeMessage(session);
            try {
                // 设置发件人邮箱地址
                message.setFrom(new InternetAddress(FROM));
                // 设置收件人邮箱地址
                InternetAddress[] sendTo = new InternetAddress[TOS.length]; // 加载收件人地址
                for (int i = 0; i < TOS.length; i++) {
                    sendTo[i] = new InternetAddress(TOS[i]);
                }
                message.setRecipients(Message.RecipientType.TO, sendTo);
                // 设置邮件标题
                message.setSubject(SUBJECT);
    
                Multipart multipart = new MimeMultipart();//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
                // 设置邮件内容
                BodyPart contentPart = new MimeBodyPart();//设置邮件的文本内容
                contentPart.setText(context);
                multipart.addBodyPart(contentPart);
                BodyPart messageBodyPart = new MimeBodyPart();
                DataSource source = new FileDataSource(AFFIX);
                messageBodyPart.setDataHandler(new DataHandler(source));//添加附件的内容
                sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();//添加附件的标题
                messageBodyPart.setFileName("=?GBK?B?"+ enc.encode(AFFIXNAME.getBytes()) + "?=");
                multipart.addBodyPart(messageBodyPart);
                message.setContent(multipart);//将multipart对象放到message中
    
                // 得到邮箱对象
                Transport transport = session.getTransport();
                // 连接自己的邮箱账户
                transport.connect(USER, PWD);// 密码为QQ邮箱开通的stmp服务后得到的客户端授权码
    
                // 发送邮件
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    通过163邮箱服务器

    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.BodyPart;
    import javax.mail.Message;
    import javax.mail.Multipart;
    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 java.util.Properties;
    
    public class Send163MailUtil {
        static String FROM = ""; // 发件人地址
        static String AFFIX = ""; // 附件地址
        static String AFFIXNAME = ""; // 附件名称
        static String USER = ""; // 用户名
        static String PWD = ""; // 163的授权码
        static String SUBJECT = ""; // 邮件标题
        static String[] TOS = new String[]{""};  // 收件人地址
        static String context = "";   //邮件正文
    
        public static void main(String[] args) {
            Properties props = new Properties();  //smtp服务器
            props.put("mail.smtp.host", "smtp.163.com");//设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
            props.put("mail.smtp.auth", "true");  //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
            props.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用
            props.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
            props.put("mail.smtp.port", 465);// 端口号
    
            Session session = Session.getDefaultInstance(props);//用props对象构建一个session
            MimeMessage message = new MimeMessage(session);//用session为参数定义消息对象
            try {
                message.setFrom(new InternetAddress(FROM));// 加载发件人地址
                InternetAddress[] sendTo = new InternetAddress[TOS.length]; // 加载收件人地址
                for (int i = 0; i < TOS.length; i++) {
                    sendTo[i] = new InternetAddress(TOS[i]);
                }
                message.addRecipients(Message.RecipientType.TO,sendTo);
                message.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse(FROM));//设置在发送给收信人之前给自己(发送方)抄送一份,不然会被当成垃圾邮件,报554错
                message.setSubject(SUBJECT);//加载标题
                Multipart multipart = new MimeMultipart();//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
                BodyPart contentPart = new MimeBodyPart();//设置邮件的文本内容
                contentPart.setText(context);
                multipart.addBodyPart(contentPart);
                if(!AFFIX.isEmpty()){//添加附件
                    BodyPart messageBodyPart = new MimeBodyPart();
                    DataSource source = new FileDataSource(AFFIX);
                    messageBodyPart.setDataHandler(new DataHandler(source));//添加附件的内容
                    sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();//添加附件的标题
                    messageBodyPart.setFileName("=?GBK?B?"+ enc.encode(AFFIXNAME.getBytes()) + "?=");
                    multipart.addBodyPart(messageBodyPart);
                }
                message.setContent(multipart);//将multipart对象放到message中
                message.saveChanges(); //保存邮件
                Transport transport = session.getTransport("smtp");//发送邮件
                transport.connect(USER, PWD);//连接服务器的邮箱
                transport.sendMessage(message, message.getAllRecipients());//把邮件发送出去
                transport.close();//关闭连接
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    公司自身邮箱服务器

    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.BodyPart;
    import javax.mail.Message;
    import javax.mail.Multipart;
    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 java.util.Properties;
    
    public class MailUtil {
    
        static String FROM = ""; // 发件人地址
        static String AFFIX = ""; // 附件地址
        static String AFFIXNAME = ""; // 附件名称
        static String USER = ""; // 用户名
        static String PWD = ""; // 密码
        static String SUBJECT = ""; // 邮件标题
        static String[] TOS = new String[]{""};  // 收件人地址
        static String context = "";   //邮件正文
    
        public static void main(String[] args) {
            Properties props = new Properties();  //smtp服务器
            props.put("mail.smtp.host", "");//设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
            props.put("mail.smtp.auth", "true");  //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
            props.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
    
            Session session = Session.getDefaultInstance(props);//用props对象构建一个session
            MimeMessage message = new MimeMessage(session);//用session为参数定义消息对象
            try {
                message.setFrom(new InternetAddress(FROM));// 加载发件人地址
                InternetAddress[] sendTo = new InternetAddress[TOS.length]; // 加载收件人地址
                for (int i = 0; i < TOS.length; i++) {
                    sendTo[i] = new InternetAddress(TOS[i]);
                }
                message.addRecipients(Message.RecipientType.TO,sendTo);
                message.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse(FROM));//设置在发送给收信人之前给自己(发送方)抄送一份,不然会被当成垃圾邮件,报554错
                message.setSubject(SUBJECT);//加载标题
                Multipart multipart = new MimeMultipart();//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
                BodyPart contentPart = new MimeBodyPart();//设置邮件的文本内容
                contentPart.setText(context);
                multipart.addBodyPart(contentPart);
                if(!AFFIX.isEmpty()){//添加附件
                    BodyPart messageBodyPart = new MimeBodyPart();
                    DataSource source = new FileDataSource(AFFIX);
                    messageBodyPart.setDataHandler(new DataHandler(source));//添加附件的内容
                    sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();//添加附件的标题
                    messageBodyPart.setFileName("=?GBK?B?"+ enc.encode(AFFIXNAME.getBytes()) + "?=");
                    multipart.addBodyPart(messageBodyPart);
                }
                message.setContent(multipart);//将multipart对象放到message中
                message.saveChanges(); //保存邮件
                Transport transport = session.getTransport("smtp");//发送邮件
                transport.connect(USER, PWD);//连接服务器的邮箱
                transport.sendMessage(message, message.getAllRecipients());//把邮件发送出去
                transport.close();//关闭连接
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    测试邮箱是否可以正常发送:

    参考:

    https://www.cnblogs.com/moris5013/p/9729422.html

    https://www.cnblogs.com/xmqa/p/8458300.html

    This moment will nap, you will have a dream; But this moment study,you will interpret a dream.
  • 相关阅读:
    Android后台保活实践总结:即时通讯应用无法根治的“顽疾”
    新手入门:史上最全Web端即时通讯技术原理详解
    【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
    【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战
    【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
    【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示
    爱奇艺技术分享:轻松诙谐,讲解视频编解码技术的过去、现在和将来
    网络编程懒人入门(十二):快速读懂Http/3协议,一篇就够!
    美团点评的移动端网络优化实践:大幅提升连接成功率、速度等
    IM开发宝典:史上最全,微信各种功能参数和逻辑规则资料汇总
  • 原文地址:https://www.cnblogs.com/jssj/p/12016241.html
Copyright © 2011-2022 走看看