我试图使用javax发送eamil。 我的代码如下:
private String emailSender(String emailTo, String emailFrom, String message, String subject, String password) {
String status = "failed";
try {
String ccEmail = "";
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
// Get a Properties object
Properties props = System.getProperties();
props.setProperty("mail.smtps.host", "smtp.gmail.com");
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.setProperty("mail.smtps.auth", "true");
props.put("mail.smtps.quitwait", "false");
Session session = Session.getInstance(props, null);
// -- Create a new message --
final MimeMessage msg = new MimeMessage(session);
// -- Set the FROM and TO fields --
msg.setFrom(new InternetAddress(emailFrom));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(emailTo, false));
if (ccEmail.length() > 0) {
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccEmail, false));
}
msg.setSubject(subject);
msg.setText(message, "utf-8");
msg.setSentDate(new Date());
SMTPTransport t = (SMTPTransport) session.getTransport("smtps");
String host = StringUtils.substringAfter(emailFrom, "@");
String emailName = StringUtils.substringBefore(emailFrom, "@");
t.connect("smtp." + host, emailName, password);
t.sendMessage(msg, msg.getAllRecipients());
t.close();
status = "Sent";
} catch (Exception e) {
LOGGER.error("error with sending email ", e);
}
return status;
}
一般来说它运作正常。我可以通过gmail帐户或雅虎发送...但是当我试图从contact@vayg.com帐户发送时,得到了这样的未知主机异常:
javax.mail.MessagingException: Unknown SMTP host: smtp.vayg.com;
任何解决方案?
答案 0 :(得分:1)
您假设主持人拥有第3级域名,并且始终以" smtp为前缀。"
但情况可能并非总是如此。 smtp主机名可以是任何内容。
答案 1 :(得分:0)
从您的管理员处获取您的smtp主机名和端口,然后在您的代码中使用它。
例如:正如您在代码中提到的,gmail有自己的域名和端口号。
在属性文件中添加适当的主机名和端口号,然后尝试运行代码。