javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp

公司新做了一个项目,需要用到邮件发送功能。因为以前同事在其他项目上做过邮件模块,所以直接移植过来了。

本以为很简单的功能,直接copy多好。然而命运多舛。 调用发送邮件的代码时候报错。

主要代码:

Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.starttls.enable", "true");// 使用 STARTTLS安全连接
props.put("mail.smtp.auth", "true");

Session session = Session.getDefaultInstance(props);

session.setDebug(false);
MimeMessage message = new MimeMessage(session);

try {

String show_username = username;
if (show_username.indexOf("@") > -1) {
show_username = show_username.split("@")[0];
}
message.setFrom(new InternetAddress(username, show_username));

InternetAddress[] internetAddressTo = new InternetAddress().parse(toMail);
message.setRecipients(Message.RecipientType.TO, internetAddressTo);
//message.addRecipient(Message.RecipientType.TO, new InternetAddress(toMail));

message.setSubject(subject);
message.addHeader("charset", "UTF-8");
/* 添加正文内容 */
Multipart multipart = new MimeMultipart();

StringBuffer lineTxt = new StringBuffer();

BodyPart contentPart = new MimeBodyPart();
contentPart.setText(lineTxt.toString());
contentPart.setHeader("Content-Type", "text/html; charset=UTF-8");
multipart.addBodyPart(contentPart);

message.setContent(multipart);
message.setSentDate(new Date());
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, port, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();

} catch (Exception e) {

e.printStackTrace();
}

打断点看到是Transport transport = session.getTransport("smtp");  时报错

百度好久,三问度娘。最后发现是引用的jar包问题

原先系统用的jdk7 用的 mail-1.4.jar

现在系统是jdk8 重新在网上下载了 最新的 javax.mail.jar  搞定。

原文地址:https://www.cnblogs.com/zjf6666/p/12616862.html

时间: 2024-11-05 18:48:38

javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp的相关文章

Caused by: javax.mail.NoSuchProviderException: smtp

这个经典的bug是会出现java web的项目中原因是在MyEclipse新建web项 目时会自动加入javaEE libary这其中包含了activation.jar和mail.jar这两个jar有 问题具体什么问题我也不清,有人说是版本问题,也有人说是有bug.不论怎么 样将进入MyEclipse安装路径的 C:MyEclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321\data\librar

Exception in thread "main" javax.validation.ValidationException: Unable to find a default provider

Exception in thread "main" javax.validation.ValidationException: Unable to find a default provider 在使用Spring MVC+Mybatis整合的时候出现上面的问题 要将下面三个包加入项目的BuildPath中才行:    hibernate-validator-4.2.0.Final.jar    validation-api-1.0.0.GA.jar    slf4j-api-1.6

javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found

1 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0': Invocation of init method failed; nested exception is javax.validation.ValidationExc

javax.mail.MessagingException: Could not convert socket to TLS

报错代码 javax.mail.MessagingException: Could not convert socket to TLS; nested exception is: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderExce

完美解决 javax.mail.SendFailedException: 与 com.sun.mail.smtp.SMTPAddressFailedException: 抛错

由于某个模块用到程序运行完后,自动收集结果发送邮件给相关人等. 邮件里有个地址貌似出问题,导致所有的收件人都发送不出去. 抛出的错误如下: javax.mail.SendFailedException: Invalid Addresses; nested exception is: com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Unable to relay for [email protected] at com.sun.mai

sudo apt-get install,出现了下面的Unable to locate package错误:

这叫一个郁闷啊,出师不利,不带这么吓唬刚玩Ubuntu的小朋友吧~于是赶紧找资料,又回顾下前面的操作,最后发现问题出在执行sudo apt-get install之前更换了软件源,但是却忘了update下了,于是执行下面的命令: sudo apt-get update 等上面命令执行完后,再执行sudo apt-get install就可以了!其实错误信息已经很明确了,Unable to locate packet就是无法找到包嘛,那还不赶紧sudo apt-get update下!

程序运行的时候NoClassDefFoundError: javax/mail/internet/ParseException

这个错误花费了4.5小时去找答案. 特此记录下步骤 先找到自己的artifacts目录 在D:\javapro\cmyjava\trunk\testpro\cmypro1\out\artifacts\cmypro1_war_exploded\WEB-INF里面建立一个文件夹lib 将E:\maven\locallib\javax\mail\mail\1.4里面的mail-1.4.jar复制到这个lib文件夹 project structor依赖里面添加一个目录

javax.mail发送邮件

   /* @param fromMail  发送邮箱     * @param user  发送邮箱账号     * @param password  邮箱密码     * @param toMail  接收邮件地址     * @param mailTitle  邮件标题     * @param mailContent  邮件内容     * @throws Exception      */     public static void sendMail(String fromMail,

intellij idea运行Android程序时报错;Unable to locate adb within SDK

环境:intellij idea15 问题:运行Android时报错Throwable:Unable to locate adb within SDK 解决方法:在SDK安装目录的\platform-tools下放入adb.exe 原因:我的adb是单独安装的,是装在SDK安装目录的tools下的.我猜测Android运行时是在SDK的platform-tools下去找adb命令的.所以我只是复制了tools下的adb.exe到platform-tools下