• Java实现outlook服务的邮件发送


    • 依赖
    <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
            <dependency>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
                <version>1.4.7</version>
            </dependency>
    • POP3接收

      

    String  USER_NAME   ="*****@outlook.com";
    String  PASSWORD    = "******";    
    public static void receivepop3Email() {
            String host = "outlook.office365.com";// change accordingly
            String mailStoreType = "pop3";
            String popPort = "995";
            Store store = null;
            // 配置连接信息
            Properties properties = new Properties();
            properties.put("mail.store.protocol", mailStoreType);
            properties.put("mail.pop3.host", host);
            properties.put("mail.pop3.port", popPort);
            properties.put("mail.pop3.starttls.enable", "true");
            try {
                Session emailSession = Session.getDefaultInstance(properties);
                //打开调式模式,可看到邮件发送过程中各步骤的详细信息
    //            emailSession.setDebug(true);
                store = emailSession.getStore("pop3s");
                store.connect(host, USER_NAME, PASSWORD);
                Folder emailFolder = store.getFolder("INBOX");
                emailFolder.open(Folder.READ_ONLY);
                Message[] messages = emailFolder.getMessages();
                for (Message msg:messages) {
                    System.out.println(msg.getSubject());
                }
                emailFolder.close(true);
                store.close();
            } catch (NoSuchProviderException e) {
                e.printStackTrace();
            } catch (MessagingException e) {
                e.printStackTrace();
            }finally {
                if(null != store){
                    try {
                        store.close();
                    } catch (MessagingException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    • IMAP接收
    
    
    String  USER_NAME   ="*****@outlook.com";
    String  PASSWORD    = "******";   
    public static void receiveimapEmail() {
            String host = "outlook.office365.com";// change accordingly
            String mailStoreType = "imap";
            String popPort = "993";
            try {
                // 配置连接信息
                Properties properties = new Properties();
                properties.put("mail.store.protocol", mailStoreType);
                properties.put("mail.imap.host", host);
                properties.put("mail.imap.port", popPort);
                properties.put("mail.imap.starttls.enable", "true");
                Session emailSession = Session.getDefaultInstance(properties);
    //            emailSession.setDebug(true);
                Store store = emailSession.getStore("imaps");
                store.connect(host, USER_NAME, PASSWORD);
                Folder emailFolder = store.getFolder("INBOX");
                emailFolder.open(Folder.READ_ONLY);
                Message[] messages = emailFolder.getMessages();
                for (Message msg:messages) {
                    System.out.println(msg.getSubject());
                }
                emailFolder.close(true);
                store.close();
            } catch (NoSuchProviderException e) {
                e.printStackTrace();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
    • SMTP发送
        static String  USER_NAME   ="****@outlook.com";
        static String  PASSWORD    = "****";
    
        public static boolean sendSMTPMail(String to, String text, String title) {
                String host = "smtp.office365.com";
                String mailStoreType = "smtp";
                String popPort = "587";
                final Properties props = new Properties();
    
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.host", host);
                props.put("mail.store.protocol", mailStoreType);
                props.put( "mail.smtp.port", popPort );
                //开启SSL
                props.put("mail.smtp.starttls.enable", "true");
                props.put("mail.smtp.socketFactory.port",popPort);
                props.put("mail.smtp.socketFactory.fallback","false");
            try {
                Session session = Session.getDefaultInstance(props, new Authenticator() {
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(USER_NAME, PASSWORD);//账号密码
                    }
                });
                session.setDebug(true);
                // 创建邮件消息
                MimeMessage message = new MimeMessage(session);
                // 设置发件人
                InternetAddress form = new InternetAddress(USER_NAME);
                message.setFrom(form);
                // 设置收件人
                InternetAddress toAddress = new InternetAddress(to);
                message.setRecipient(Message.RecipientType.TO, toAddress);
                // 设置邮件标题
                message.setSubject(title);
                // 设置邮件的内容体
                message.setContent(text, "text/html;charset=UTF-8");
                // 发送邮件
                Transport.send(message);
                return true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
        }

    插曲:

      SMTP发送邮件时,第一次发送可能会收到如下的报错:

    OutboundSpamException; Failed to process message due to a permanent exception with message WASCL UserAction verdict is not None

      在网上查到这是邮箱厂商的安全策略,出现此异常的同时厂商会给你发送一封确认邮件,只要你登录邮箱并激活该邮件即可使用SMTP发送邮件的功能,邮件内容大致如下:

  • 相关阅读:
    Angular(一)
    多变的形状
    二叉树
    快速排序
    冒泡排序
    插入排序
    大话程序猿眼里的高并发架构
    整屏滚动
    增加删除一行标签
    无缝滚动
  • 原文地址:https://www.cnblogs.com/malefeng/p/14004423.html
Copyright © 2020-2023  润新知