• 发邮件


    package com.company;
    
    import javax.mail.*;//导入的jar包mail.jar,sun官网有
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Date;
    import java.util.Properties;
    
    public class SendEmail{
        /*
        邮件软件称为MUA:Mail User Agent,意思是给用户服务的邮件代理,说白了就是你用的邮箱软件,qq邮箱呀,阿里云邮箱什么的
        邮件服务器则称为MTA:Mail Transfer Agent,意思是邮件中转的代理
        最终到达的邮件服务器称为MDA:Mail Delivery Agent,意思是邮件到达的代理
        发邮件就是用户在MUA上发送到MTA上,MTA转发到MDA服务器上硬盘存储,接收方通过浏览器或软件在MDA服务器上查看邮件
        1.常用的电子邮箱协议都属于TCP/IP协议,SMTP协议是一个建立在TCP之上的协议,任何程序发送邮件都必须遵守SMTP协议
        2.SMTP:Simple Mail Transport Protocol的缩写,使用标准端口25,也可以使用加密端口465或587
    
    
    
         */
    
        public static void main(String[] args) throws MessagingException {
        // write your code here
            sendMail("不要抱怨,抱我,抱我");
        }
    
    
        /**
         * 发送邮件
         * @param message
         */
        private static String message;//存储发送的一条信息
        private static void sendMail(String message) throws MessagingException {
            SendEmail.message=message;
            /*
            1.想要发送邮件,首先需要下载一个mail.jar包
            2.mail.jar导入工程,可以使用里面的相关类了  src同级目录建立一个lib文件夹,然后File-Project Structure-Libraries-+号添加-apply
            3.发邮件的时候,需要做以下的配置
             */
            Properties properties=new Properties();//本质上就是一个map集合
            //设置协议
            properties.put("mail.transport.protocol","smtp");//必须
            //设置邮箱主机名
            properties.put("mail.smtp.host","smtp.qq.com");//必须,key固定,value:smtp.[qq.com][aliyun.com]..
            //设置发送邮件使用的端口号,如果不设默可能25,110,143
            properties.put("mail.smtp.port","25");
            //设置邮件发送时是否需要进行身份验证
            properties.put("mail.smtp.auth","true");
    
            //创建一个Session对象,类似于socket,作为连接的桥梁,传入邮箱配置信息
            Session session=Session.getDefaultInstance(properties);
            //创建一个Transport对象,类似于输出流,可以通过它发送
            Transport transport=session.getTransport();
            //通过具体用户连接到对应的邮箱服务器,并且还需要认证获取认证码,qq邮箱为例,登录后,设置,账户,开启服务
            transport.connect("123456@qq.com","授权码");//第二位输入密码没用,这里输入的应该是开启邮箱协议服务时生成的授权码-登录对应邮箱在开启服务时生成//以上就相当于连接到了qq邮箱的MUA,准备工作完成,接下来
            //创建一个邮件对象Message,映射邮箱里的真实邮件,完善邮件内容才发送撒
            //这里额外写个方法来构造Message对象
            MimeMessage mime=createMessage(session);
            //发送
            transport.sendMessage(mime,mime.getAllRecipients());
            //关闭流
            transport.close();
            System.out.println("发送完成。");
    
    
    
    
        }
        /**
         * 返回邮件对象
         * @param session 需要一个条件session连接
         */
        private static MimeMessage createMessage(Session session) throws MessagingException {
            //创建邮件对象
            MimeMessage mime=new MimeMessage(session);
            //目前这个邮件对象只携带基本协议相关的信息,还没有添加具体内容
            //设置邮件发送人,邮件从哪发出去
            mime.setFrom(new InternetAddress("123456@qq.com"));
            //设置邮件收件人
            InternetAddress[] in={new InternetAddress("111111111@qq.com"),new InternetAddress("222222222@qq.com")};
            //设置收件人接收方式 TO普通发送 CC添加抄送 BCC密送
            mime.setRecipients(Message.RecipientType.TO,in);
            //设置发送日期
            mime.setSentDate(new Date());
            //发送主题
            mime.setSubject("hello nihao");
            //发送正文
            mime.setText(message,"UTF-8");
            //该设置的设了,内容补全后,一定要保存,否则不生效
            mime.saveChanges();
            //返回
            return mime;
    
        }
    }

    运行 报错:

     检查这个事做没:开启对应邮箱服务器的协议服务 

    可看这里https://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001256&&id=28

     会生成一个授权码,放在代码里面用户密码参数那里,运行,发送成功!!

    扩展:

    新增:1.发送的内容用一个集合存储,多条 2.定时随机发送

    注意事项:如果首次发送时间firstTime设定在当前系统日期之前比如今天是2021-2-23,你设定为1998-12-12,那么会立即开始执行run,如果设定的firstTime在当前系统时间之后才会根据设定,到那个时间点才开始运行

    package com.company;
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.net.BindException;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.*;
    
    public class SendEmail{
        /*
        邮件软件称为MUA:Mail User Agent,意思是给用户服务的邮件代理,说白了就是你用的邮箱软件,qq邮箱呀,阿里云邮箱什么的
        邮件服务器则称为MTA:Mail Transfer Agent,意思是邮件中转的代理
        最终到达的邮件服务器称为MDA:Mail Delivery Agent,意思是邮件到达的代理
        发邮件就是用户在MUA上发送到MTA上,MTA转发到MDA服务器上硬盘存储,接收方通过浏览器或软件在MDA服务器上查看邮件
        1.常用的电子邮箱协议都属于TCP/IP协议,SMTP协议是一个建立在TCP之上的协议,任何程序发送邮件都必须遵守SMTP协议
        2.SMTP:Simple Mail Transport Protocol的缩写,使用标准端口25,也可以使用加密端口465或587
    
         */
    
        public static void main(String[] args) throws MessagingException, ParseException {
        // write your code here
            timeSend();
    
        }
    
    
        /**
         * 发送邮件
         * @param message
         */
        private static String message;//存储发送的一条信息
        private static void sendMail(String message) throws MessagingException {
            SendEmail.message=message;
            /*
            1.想要发送邮件,首先需要下载一个mail.jar包
            2.mail.jar导入工程,可以使用里面的相关类了  src同级目录建立一个lib文件夹,然后File-Project Structure-Libraries-+号添加-apply
            3.发邮件的时候,需要做以下的配置
             */
            Properties properties=new Properties();//本质上就是一个map集合
            //设置协议
            properties.put("mail.transport.protocol","smtp");//必须
            //设置邮箱主机名
            properties.put("mail.smtp.host","smtp.qq.com");//必须,key固定,value:smtp.[qq.com][aliyun.com]..
            //设置发送邮件使用的端口号,如果不设默可能25,110,143
            properties.put("mail.smtp.port","25");
            //设置邮件发送时是否需要进行身份验证
            properties.put("mail.smtp.auth","true");//这段不写也一样,邮箱服务器会强制校验身份,可以删了
    
            //创建一个Session对象,类似于socket,作为连接的桥梁,传入邮箱配置信息
            Session session=Session.getDefaultInstance(properties);
            //创建一个Transport对象,类似于输出流,可以通过它发送
            Transport transport=session.getTransport();
            //通过具体用户连接到对应的邮箱服务器,并且还需要认证获取认证码,qq邮箱为例,登录后,设置,账户,开启服务
            transport.connect("123456@qq.com","sdfesadfsfdsag");//开启服务时的授权码
            //以上就相当于连接到了qq邮箱的MUA,准备工作完成,接下来
            //创建一个邮件对象Message,映射邮箱里的真实邮件,完善邮件内容才发送撒
            //这里额外写个方法来构造Message对象
            MimeMessage mime=createMessage(session);
            //发送
            transport.sendMessage(mime,mime.getAllRecipients());
            //关闭流
            transport.close();
            System.out.println("发送完成。");
    
    
    
    
        }
        /**
         * 返回邮件对象
         * @param session 需要一个条件session连接
         */
        private static MimeMessage createMessage(Session session) throws MessagingException {
            //创建邮件对象
            MimeMessage mime=new MimeMessage(session);
            //目前这个邮件对象只携带基本协议相关的信息,还没有添加具体内容
            //设置邮件发送人,邮件从哪发出去
            mime.setFrom(new InternetAddress("123456@qq.com"));
            //设置邮件收件人
            InternetAddress[] in={new InternetAddress("111111@qq.com"),new InternetAddress("222222@aliyun.com")};
            //设置收件人接收方式 TO普通发送 CC添加抄送 BCC密送
            mime.setRecipients(Message.RecipientType.TO,in);
            //设置发送日期
            mime.setSentDate(new Date());
            //发送主题
            mime.setSubject("hello nihao");
            //发送正文
            mime.setText(message,"UTF-8");
            //该设置的设了,内容补全后,一定要保存,否则不生效
            mime.saveChanges();
            //返回
            return mime;
    
        }
        private static ArrayList<String> Messages=new ArrayList<>();
        static {//类加载时就给Messages存入所有值了
            Messages.add("人非要经历一番不同平时的劫难才能脱胎换骨,成为真正能解决问题的人");
            Messages.add("靠山山会倒,靠水水会流,靠自己永远不倒。");
            Messages.add("精诚所至,金石为开。");
            Messages.add("人生坎坎坷坷,跌跌撞撞那是在所难免。但是,不论跌了多少次,你都要坚强地再次站起来。任何时候,无论你面临着生命的何等困惑,抑或经受着多少挫折,无论道路如何的艰难,无论希望变得如何渺茫,请你不要绝望,再试一次,成功一定属于你!");
            Messages.add("我从来不把安逸和快乐看作是生活目的的本身。手指有长有短,知识有高有低。学无前后,达者为师。");
            Messages.add("任何不能打倒你的,将会使你更加坚强。");
            Messages.add("如果你想得到,你就会得到,你所需要付出的只是行动。");
            Messages.add("世界上最难的事情是坚持,世上最容易的事情也是坚持,不管怎么样只要坚持就能胜利。");
            Messages.add("因为没有指望,你只能变得更强大。");
            Messages.add("珍惜今天的美好就是为了让明天的回忆更美好。幸福不是每天都有,错过了就要等很久。贵在坚持,难在坚持,成在坚持。");
            Messages.add("见得天下皆是坏人,不如见得天下皆是好人。");
            Messages.add("人生的旅途,前途很远,也很暗。然而不要怕,不怕的人的面前才有路。如果你想拥有的更多,那希望就不应寄托在别人身上。");
            Messages.add("时间是宝贵的,抓住了时间就抓住了成功。只有孜孜不倦地求索,才有源源不断的收获。");
            Messages.add("前面的路还很远,你可能会哭,但是,一定要走下去,一定不能停。输不起的人,往往就是赢不了。");
            Messages.add("要做思想上的领跑者,要做行动上的领跑者。一个人有钱没钱不必须,但如果这个人没有了梦想 ,这个人穷定了。");
            Messages.add("人生是一场马拉松,中途什么事情都有可能发生,跑到最后的最远的才是胜利者。");
            Messages.add("扬起理想的风帆并为之奋斗,你会真正体会到人生的价值和乐趣。最大的敌人是自己,只要你战胜了自己,你就是真正的男子汉?");
            Messages.add("做人也要像蜡烛一样,在有限的一生中有一分热发一分光,给人以光明,给人以温暖。");
            Messages.add("受挫受辱之时,务须咬牙励志,蓄其气而长其智");
    
        }
    
        /**
         * 做定时发送,使用Timer类
         */
        private static void timeSend() throws ParseException {
            Timer timer=new Timer();//帮忙做计时的
            //设置时间格式
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date firstTime=sdf.parse("2021-2-23 17:19:00");//第一次发送时间
            System.out.println(sdf.format(new Date()));;
            //调schedule方法,三个参数,第一个参数是一个TimerTask对象,实际行是实现了Runnable接口,相当于一个线程类,实现run方法
            //第二个参数设置首次执行run的时间,第三个参数设置下次执行run的时间间隔
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
    
                    int index= (int) (Math.random()*10);
                    String mess=Messages.get(index);
    
                    try {
                        sendMail(mess);
                    } catch (MessagingException e) {
                        e.printStackTrace();
                    }
                }
            },firstTime,10000);
    
    
    
        }
    
    }
  • 相关阅读:
    二叉树非递归遍历
    二叉树之统计二叉树的节点个数
    C语言32个关键字(2)
    C语言32个关键字(1)
    C语言常用字符串操作函数总结
    面向对象的四大特征
    C语言之生产者与消费者模型
    菜鸟随笔(4)---read函数与fread函数的区别
    菜鸟随笔(3)---三种进程学习.孤儿进程.僵尸进程.守护进程
    进程通信——管道、消息队列、共享内存、信号量
  • 原文地址:https://www.cnblogs.com/hebiao/p/14435961.html
Copyright © 2020-2023  润新知