java中实现发送邮件 session.getTransport() 为什么是null? 80C

java中实现发送邮件 session.getTransport() 为什么是null?

             Properties prop = new Properties();
     prop.setProperty("mail.host", "smtp.qq.com");
     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();-----------》这一步报空指针
0

4个回答

public static void send(String fileName){

    Properties prop = new Properties();
    prop.setProperty("mail.host", "smtp.partner.outlook.cn");
    prop.setProperty("mail.transport.protocol", "smtp");
    prop.setProperty("mail.smtp.port", "587");
    prop.setProperty("mail.smtp.auth", "true");
    prop.setProperty("mail.smtp.starttls.enable", "true");
    //使用JavaMail发送邮件的5个步骤
    //1、创建session
    Session session = Session.getInstance(prop);
    //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
    session.setDebug(true);
    //2、通过session得到transport对象
    Transport ts = null;
    try {
        ts = session.getTransport();
    } catch (NoSuchProviderException e) {
        e.printStackTrace();
    }
    //3、连上邮件服务器
    try {
        ts.connect("smtp.partner.outlook.cn", "账号", "密码");
    } catch (MessagingException e) {
        e.printStackTrace();
    }
    //4、创建邮件
    Message message = null;
    try {
        message = createAttachMail(session,fileName);
    } catch (Exception e) {
        e.printStackTrace();
    }
    //5、发送邮件
    try {
        ts.sendMessage(message, message.getAllRecipients());
    } catch (MessagingException e) {
        e.printStackTrace();
    }
    finally {
        try {
            ts.close();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

}

0
weixin_42464028
weixin_42464028 回复weixin_39808420: 我引的是 javax.mail-1.5.6.jar 这个包
10 个月之前 回复
weixin_39808420
MR-----zhang 这是我用到的导入的包,javamail是1.4.7版本的import java.io.File; import java.util.Properties; 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;
10 个月之前 回复
weixin_39808420
MR-----zhang 回复weixin_42464028: 有重新引入一次javamail包试试吗,还有看代码里面导的包是不是导错了
10 个月之前 回复
weixin_42464028
weixin_42464028 依旧报错: javax.mail.NoSuchProviderException: java.lang.NullPointerException at javax.mail.Session.getTransport(Session.java:298) at javax.mail.Session.getTransport(Session.java:307) at javax.mail.Session.getTransport(Session.java:278)
10 个月之前 回复

能将控制台的详细信息发一下么

0
xnqq45108
xnqq45108 回复weixin_42464028: 建议你加上log4j。这样就能看到logger.log(Exception loading provider,var10)所报的详细信息了,
10 个月之前 回复
weixin_42464028
weixin_42464028 javax.mail.NoSuchProviderException: java.lang.NullPointerException at javax.mail.Session.getTransport(Session.java:298) at javax.mail.Session.getTransport(Session.java:307) at javax.mail.Session.getTransport(Session.java:278) at com.newtouch.cloud.templetmanage.controller.ReportFormSumController.storeMail(ReportFormSumController.java:241) at com.newtouch.cloud.templetmanage.controller.ReportFormSumController.remind(ReportFormSumController.java:45)
10 个月之前 回复

javax.mail.NoSuchProviderException: java.lang.NullPointerException
at javax.mail.Session.getTransport(Session.java:298)
at javax.mail.Session.getTransport(Session.java:307)
at javax.mail.Session.getTransport(Session.java:278)
at com.newtouch.cloud.templetmanage.controller.ReportFormSumController.storeMail(ReportFormSumController.java:241)
at com.newtouch.cloud.templetmanage.controller.ReportFormSumController.remind(ReportFormSumController.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)

0

测试效果在最下方。

完整源码,jdk为1.8的:

 public static void main(String[] args) {
        try {
            Properties prop = new Properties();
            prop.setProperty("mail.host", "smtp.qq.com");
            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对象
            session.setDebug(true);
            // 2、通过session得到transport对象
            Transport ts = session.getTransport();
            // 3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
            ts.connect("smtp.qq.com", "123456@qq.com", "adsfjtjbadokfahc"); // adsfjtjbadokfahc 为QQ smtp授权码,生成方式如图
            // 4、创建邮件
            Message message = createSimpleMail(session);
            // 5、发送邮件
            ts.sendMessage(message, message.getAllRecipients());
            ts.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // 这一步报空指针
    }

    public static MimeMessage createSimpleMail(Session session) throws Exception {
        // 创建邮件对象
        MimeMessage message = new MimeMessage(session);
        // 指明邮件的发件人
        message.setFrom(new InternetAddress("1611826890@qq.com"));
        // 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("3285687940@qq.com"));
        // 邮件的标题
        message.setSubject("只包含文本的简单邮件");
        // 邮件的文本内容
        message.setContent("你好啊!", "text/html;charset=UTF-8");
        // 返回创建好的邮件对象
        return message;
    }

获取授权码

测试效果

0
weixin_42464028
weixin_42464028 javax.mail.NoSuchProviderException: java.lang.NullPointerException at javax.mail.Session.getTransport(Session.java:298)
10 个月之前 回复
weixin_42464028
weixin_42464028 我在 // 2、通过session得到transport对象 Transport ts = session.getTransport(); 这一步就报错了
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!