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();-----------》这一步报空指针
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();
}
}
}
能将控制台的详细信息发一下么
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)
测试效果在最下方。
完整源码,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;
}