使用JSP发送电子邮件

这个问题使我发疯。我有以下代码:

<html>

<body>

<%@ page import="java.util.*" %>

<%@ page import="javax.mail.*" %>

<%@ page import="javax.mail.internet.*" %>

<%@ page import="javax.activation.*" %>

<%

String host = "exchsrv2";

String to = "alan@domain.com";

String from = "apeince@domain.com";

String subject = "test";

String messageText = "body test";

Properties props = System.getProperties();

props.put("mail.host", host);

props.put("mail.transport.protocol", "smtp");

props.put("mail.smtp.port", "25");

Session mailSession = Session.getDefaultInstance(props, null);

Message msg = new MimeMessage(mailSession);

msg.setFrom(new InternetAddress(from));

InternetAddress[] address = {new InternetAddress(to)};

msg.setRecipients(Message.RecipientType.TO, address);

msg.setSubject(subject);

msg.setSentDate(new Date());

msg.setText(messageText);

Transport.send(msg);

out.println("Mail was sent to " + to);

out.println(" from " + from);

out.println(" using host " + host + ".");

%>

</body>

</html>

好的,问题是,出现以下错误:

javax.servlet.ServletException: javax.mail.MessagingException: Could not connect to SMTP host: exchsrv2, port: 25;

nested exception is:

java.net.SocketException: Permission denied: connect

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:911)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:840)

org.apache.jsp.alan_jsp._jspService(alan_jsp.java:113)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

我知道Exchange服务器在那里。我可以远程登录就可以了。我的Exchange服务器设置为不需要身份验证。我有一个在C#/。NET中可以正常运行的程序,并且它可以正常运行,所以我知道问题不在Exchange服务器中。我在这里做错了什么?

回答:

好吧,我会说尝试连接时存在身份验证问题。您不提供任何用户名或密码,除非您的交换服务器不需要用户名和密码。


更新:如果使用JDK 7,请参阅以下文章,它解决了此问题:

缺陷-使用VPN时,套接字拒绝JDK7权限

“更多地挖掘,似乎VPN客户端已禁用IPv6,这导致JDK7出现问题。如果我使用以下标志-Djava.net.preferIPv4Stack =

true,我将不再看到错误。这是预期的解决方法还是这是一个问题?


public class MailTest {

/**

* @param args the command line arguments

*/

public static void main(String[] args) throws MessagingException {

String host = "smtp.gmail.com";

String to = "myEmail@gmail.com";

String from = "myEmail@gmail.com";

String subject = "test";

String messageText = "body test";

Properties props = System.getProperties();

props.put("mail.host", host);

props.put("mail.transport.protocol", "smtp");

props.put("mail.smtp.port", "25");

// If using authentication, otherwise comment out

props.put("mail.smtp.auth", "true");

// Gmail requires TLS, your server may not

props.put("mail.smtp.starttls.enable", "true");

Session mailSession = Session.getDefaultInstance(props, null);

Message msg = new MimeMessage(mailSession);

msg.setFrom(new InternetAddress(from));

InternetAddress[] address = {new InternetAddress(to)};

msg.setRecipients(Message.RecipientType.TO, address);

msg.setSubject(subject);

msg.setSentDate(new Date());

msg.setText(messageText);

Transport transport = mailSession.getTransport("smtp");

//connect with authentication

//transport.connect(host,"myUsername" , "myPassword");

//connect without authentication

transport.connect();

transport.sendMessage(msg, address);

transport.close();

System.out.println("Mail was sent to " + to);

System.out.println(" from " + from);

System.out.println(" using host " + host + ".");

}

}

以上是 使用JSP发送电子邮件 的全部内容, 来源链接: utcz.com/qa/410384.html

回到顶部