![](/img/trans.png)
[英]Send Email Without authentication in java using gmail smtp server and javamail
[英]Send Java email without authentication (no such provider exception: smtp)
我当前使用的代码如下:
String to = "....@gmail.com";
String from = ".....@gmail.com";
String host = "127.0.0.1";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("This is the Subject Line!");
message.setText("This is actual message");
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
如果将上面的代码粘贴到Java servlet
并运行它,则会抛出以下异常: javax.mail.NoSuchProviderException: smtp
NoSuchProviderException
意味着JavaMail API配置中有些混乱。 您在哪里以及如何安装JavaMail jar文件?
另外,如果从其他响应中看不出来,则无需身份验证即可发送邮件的唯一方法是运行自己的邮件服务器。 您不能使用通用的在线电子邮件服务( 例如 Gmail)来做到这一点。
首先,如果您想使用gmail从程序中发送电子邮件,则需要将stmp主机定义为gmail。 您当前的主机“ 127.0.0.1”是localhost,意味着您自己的计算机? 您的计算机上是否正在运行邮件服务器?
在这里,您可以看到一些教程,如何使用gmail发送电子邮件: http : //www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/
如果您害怕通过常规的gmail帐户详细信息,请创建某种测试电子邮件,例如kselvatest或其他内容。
您几乎错过了那些:
final String username = "username@gmail.com";
final String password = "password";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
因此,基本上您需要添加的是:
1.登录名和密码,以便JavaMail可以使用一些gmail帐户
2.声明您要使用的邮件服务器
将String host = "127.0.0.1";
更改String host = "127.0.0.1";
到String host = "smtp.gmail.com";
3.设置邮件端口
对于此代码,您应该得到javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;
例外
但我怀疑您有jre问题。 可能是smtp实施有问题。 为什么不从http://www.oracle.com/technetwork/java/javamail/index-138643.html下载Java邮件实现并将其添加到项目类路径中并尝试?
如果您包含javax.mail.NoSuchProviderException和JavaMail调试输出的完整堆栈跟踪,将会有所帮助。 因为您是在servlet容器中运行此程序,所以可能会遇到Bug 6668 -skip无法使用的Store和Transport类 。 将对Transport.set的呼叫更改为以下内容:
final ClassLoader ccl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(Session.class.getClassLoader());
try {
Transport.send(message);
} finally {
Thread.currentThread().setContextClassLoader(ccl);
}
该代码将隔离允许该代码查看的传输类。 这将排除代码中的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.