zoukankan      html  css  js  c++  java
  • javamail邮件发送

    按这条博客写的方法https://www.cnblogs.com/xdp-gacl/p/4216311.html

    日志信息:

    DEBUG SMTP: AUTH LOGIN command trace suppressed
    DEBUG SMTP: AUTH LOGIN succeeded
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
    DEBUG SMTP: need username and password for authentication
    DEBUG SMTP: protocolConnect returning false, host=smtp.sina.com, user=fyf, password=<null>
    javax.mail.AuthenticationFailedException: failed to connect, no password specified?

    显示登录成功但是发送需要认证(need username and password for authentication

    所以session获取方法需要修改,添加认证信息

    Session session = Session.getInstance(prop);
    

     改为

    Session session = Session.getDefaultInstance(prop,new SimpleAuthenticator(USERNAME,PASSWORD));
    

    其中SimpleAuthenticator类需要继承javax.mail.Authenticator;

    因为javax.mail.Authenticator;并没有实现getPasswordAuthentication()方法,根据Authenticator中对该方法的描述

        /**
         * Called when password authentication is needed.  Subclasses should
         * override the default implementation, which returns null. <p>
         *
         * Note that if this method uses a dialog to prompt the user for this
         * information, the dialog needs to block until the user supplies the
         * information.  This method can not simply return after showing the
         * dialog.
         * @return The PasswordAuthentication collected from the
         *		user, or null if none is provided.
         */
        protected PasswordAuthentication getPasswordAuthentication() {
    	return null;
        }
    

     当需要密码认证是会被调用,子类必须实现该方法,并返回PasswordAuthentication,重写代码如下

    代码如下

    package com.taotao.common.utils;
    
    import javax.mail.Authenticator;
    import javax.mail.PasswordAuthentication;
    
    public class SimpleAuthenticator extends Authenticator {
        
        private String username;
        private String password;
        
        public SimpleAuthenticator(String username, String password) {
            super();
            this.username = username;
            this.password = password;
        }
    
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            // TODO Auto-generated method stub
            return new PasswordAuthentication(username, password);
        }
        
    }
    

     再次运行发送成功

    DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 
    DEBUG SMTP: Using mechanism LOGIN
    DEBUG SMTP: AUTH LOGIN command trace suppressed
    DEBUG SMTP: AUTH LOGIN succeeded
    DEBUG SMTP: use8bit false
    MAIL FROM:<yonglai_zhuce@sina.com>
    250 ok
    RCPT TO:<truthmustdie@163.com>
    250 ok
    DEBUG SMTP: Verified Addresses
    DEBUG SMTP:   truthmustdie@163.com
    DATA
    354 End data with <CR><LF>.<CR><LF>
    Date: Fri, 14 Dec 2018 20:26:37 +0800 (CST)
    From: yonglai_zhuce@sina.com
    To: truthmustdie@163.com
    
  • 相关阅读:
    作为另一个函数的值(读书摘)
    算法-二分查找与二叉排序树
    算法-图
    算法-二叉树
    算法-分治
    算法-回溯
    算法-动态规划
    算法-贪心
    算法-堆
    算法-栈,队列
  • 原文地址:https://www.cnblogs.com/annofyf/p/10121554.html
Copyright © 2011-2022 走看看