以下是我发送电子邮件的代码:
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.debug", "false");
final Session session = Session.getInstance(props);
final Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO, toAddress);
msg.setSubject(subject);
msg.setSentDate(new Date());
Multipart multipart = new MimeMultipart("related");
BodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(body, "text/html");
multipart.addBodyPart(mbp1);
Transport.send(msg);
错误堆栈跟踪:
javax.mail.NoSuchProviderException: smtp
at javax.mail.Session.getService(Session.java:764)
at javax.mail.Session.getTransport(Session.java:689)
at javax.mail.Session.getTransport(Session.java:632)
at javax.mail.Session.getTransport(Session.java:612)
at javax.mail.Session.getTransport(Session.java:667)
at javax.mail.Transport.send0(Transport.java:154)
at javax.mail.Transport.send(Transport.java:80)
注意:
- 如果作为桌面应用程序执行,则相同的代码有效。但是在tomcat上部署时会抛出异常。
- 最新的mail.jar和smtp.jar已添加到库中。
- SMTP主机地址也正确。
醇>
如果有人可以指点我会有所帮助。
答案 0 :(得分:3)
我也遇到了类似的情况,但最终还是可以解决它。在我的情况下,问题是我需要添加的static void Main(string[] args)
{
var someArray = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var fns = new List<Action>();
for (int i = 0; i < someArray.Length; i++)
{
var local = i;
fns.Add(() => myFunction(local, someArray[local]));
}
foreach (var fn in fns) fn();
}
private static void myFunction(int i, int v)
{
Console.WriteLine($"{v} at idx:{i}");
}
文件:
proguard_rules.txt
答案 1 :(得分:2)
我在tomcat的lib目录中有mail.jar和activation.jar,在应用程序的lib目录中有mailapi.jar。应用程序在运行时读取mailapi.jar,因为mailapi.jar是邮件api的轻量级版本,它需要smtp.jar,为什么应用程序抛出smtp异常。 所以,如果你想摆脱这个例外,
请通过以下方式解决mail.jar和mailapi.jar之间的冲突:
(仅供参考:我搜索文件系统以找出与邮件相关的jar文件,并且知道我在以下路径中有冲突的jar文件(在classpath中由gradle添加) C:\工作空间\ .metadata.plugins \ org.eclipse.wst.server.core \ TMP0 \ wtpwebapps \ testapp \ WEB-INF \ lib中)
答案 2 :(得分:1)
我在将AWS SNS引入项目后工作的Android项目中遇到此问题。事实证明, aws-android-sdk-core-2.2.20.jar 库在其META-INF文件夹中包含一个名为 javamail.providers 的文件。
一旦我从.jar中删除了这个文件,这个例外就消失了,我又可以通过java邮件再次发送电子邮件了。