私のサイトはJSPページとサーブレットに基づいています。私はvps上でTomcat 6を実行します。JavaMailを使用して電子メールを送信すると、「接続が多すぎます」という理由で「Connection refused」と表示されます - なぜですか?
私は自分のサイトで電子メールを送信するためにJavaMailバージョン1.4を使用しています。
セッション中にいくつかのメールを送信できますが、今日は自分のサイトの投稿ページに空白のページがあります。だから私は、Tomcatのログを見て、ここで起こっているもの -
INFO | jvm 1 | 2010/12/15 10:29:13 | DEBUG: setDebug: JavaMail version 1.4.1 INFO | jvm 1 | 2010/12/15 10:29:13 | DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] INFO | jvm 1 | 2010/12/15 10:29:13 | DEBUG SMTP: useEhlo true, useAuth true INFO | jvm 1 | 2010/12/15 10:29:13 | DEBUG SMTP: trying to connect to host "smtp.myisprovider.net", port 25, isSSL false INFO | jvm 1 | 2010/12/15 10:29:14 | 421 4.7.1 - Connection Refused - - Too many connections INFO | jvm 1 | 2010/12/15 10:29:14 | DEBUG SMTP: could not connect to host "smtp.myisprovider.net", port: 25, response: 421 INFO | jvm 1 | 2010/12/15 10:29:14 | INFO | jvm 1 | 2010/12/15 10:29:14 | javax.mail.MessagingException: Could not connect to SMTP host: smtp.myisprovider.net, port: 25, response: 421 INFO | jvm 1 | 2010/12/15 10:29:14 | at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1379) INFO | jvm 1 | 2010/12/15 10:29:14 | at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412) INFO | jvm 1 | 2010/12/15 10:29:14 | at javax.mail.Service.connect(Service.java:288) INFO | jvm 1 | 2010/12/15 10:29:14 | at javax.mail.Service.connect(Service.java:169) INFO | jvm 1 | 2010/12/15 10:29:14 | at spyder.servlets.email.MessageCenterServlet.cancelService(MessageCenterServlet.java:836) INFO | jvm 1 | 2010/12/15 10:29:14 | at spyder.servlets.email.MessageCenterServlet.doPost(MessageCenterServlet.java:172) INFO | jvm 1 | 2010/12/15 10:29:14 | at spyder.servlets.email.MessageCenterServlet.doGet(MessageCenterServlet.java:39) INFO | jvm 1 | 2010/12/15 10:29:14 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) INFO | jvm 1 | 2010/12/15 10:29:14 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896) INFO | jvm 1 | 2010/12/15 10:29:14 | at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) INFO | jvm 1 | 2010/12/15 10:29:14 | at java.lang.Thread.run(Thread.java:595)
私はMY ISPプロバイダを通じて自分の電子メールを送信します。家でインターネットに使うものこれはではなく、私のVPSが動作するのと同じプロバイダです。
この問題は、私のISPプロバイダとその結末に設定されている結果か、これはサーブレットのコードと関係がありますか?
は、ログには「あまりにも多くの接続」と述べたので、これが私の最後に何かがある場合は、最初は、私は思ったんだけど、何かがあれば私はは()メソッドを呼び出す近い、サーブレットで(を閉じなければなりません何かに?)メールが送信された後?サーブレットからの抜粋を含める
編集ポストに...
Transport t = null;
try {
//get email address to send
//this email to
rs = stmt.executeQuery("Select Tech_Support_Email,POP3,SMTP from sitewide_info");
String toName = "mywebsite.com";
String host_email_address = "";
String POP3 = "";
String SMTP = "";
if(rs.next()) {
host_email_address = rs.getString(1);
POP3 = rs.getString(2);
SMTP = rs.getString(3);
}
// Specify the SMTP Host
Properties props = new Properties();
//props.put(POP3, SMTP);
props.setProperty("mail.smtp.auth", "true");
props.put("mail.pop3.host", POP3);
props.put("mail.smtp.host", SMTP);
// Create a mail session
Session ssn = Session.getInstance(props, null);
ssn.setDebug(true);
//...
//query db for some information, that will be appended to email
//...
// set the from information
InternetAddress from = new InternetAddress(fromEmail, fromName);
// set the to information
InternetAddress to = new InternetAddress(host_email_address, toName);
// Create the message
Message msg = new MimeMessage(ssn);
msg.setFrom(from);
msg.addRecipient(Message.RecipientType.TO, to);
msg.addHeader("X-Priority", "1");
msg.setSubject(Subject);
msg.setContent(HtmlMessage, "text/html");
String protocol = "smtp";
t = ssn.getTransport(protocol);
t.connect(SMTP,username,password);
t.sendMessage(msg, msg.getAllRecipients());
res.sendRedirect(res.encodeRedirectURL("MyAccount.jsp?message=Email%20successfully%20sent."));
return;
}//try
catch (MessagingException mex) {
mex.printStackTrace();
}
catch(Exception e) {}
finally {
try {
t.close();
}
catch(Exception e) {}
}//finally
トランスポートオブジェクトでclose()を呼び出すと、コードをチェックしただけです。実際には、電子メールを送信するために自分のサーブレットで使用するメソッドのスニペットを投稿します。たぶんあなたが私が見ていないことをキャッチするものがあります。私は元の質問にコードを追加します... – katura
プロバイダが私を制限している場合、私はそれについても疑問に思いました。私が自分のサイトでテストしていたこの特定のプロセスでは、2つの電子メールが送信されます。自分自身に1人、顧客に1人。私が試したのは初めてでした。両方のメールが送信されました。 2回目は、1回目だけが行きました。それは間違っていました。 7分後、私は別のjsp/servletページから電子メールを送り、電子メールが通過しました。 – katura
私は問題が解決されたと思います。私のサーブレットに2つの電子メールを送信するメソッドがあります。これに問題があるのは、2つの電子メールを送信していたために、トランスポートと2つの接続を確立したことです。接続要求ごとにTransportオブジェクトを閉じる必要がありました。私はいくつかのテストを行い、電子メールは正常に送信されています。だから問題は修正されました:)あなたの助けをありがとう。 – katura