Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行对数据库的查询后,无法连接到SMTP服务器_Java_Email_Jakarta Ee_Jdbc_Jakarta Mail - Fatal编程技术网

Java 执行对数据库的查询后,无法连接到SMTP服务器

Java 执行对数据库的查询后,无法连接到SMTP服务器,java,email,jakarta-ee,jdbc,jakarta-mail,Java,Email,Jakarta Ee,Jdbc,Jakarta Mail,我的程序最初连接到数据库服务器并执行查询,然后尝试通过smtp服务器发送电子邮件 查询正在成功执行,但程序无法连接到smtp服务器 若我在评论数据库连接代码,那个么邮件发送代码的执行是正确的 还有一个例子,若我写的是邮件,先发送代码,然后在程序正常运行后将执行代码存入数据库 问题是如何在同一程序中执行数据库查询后发送邮件 这是我的密码 package com.ravi; import java.util.Properties; import java.sql.*; import javax.

我的程序最初连接到数据库服务器并执行查询,然后尝试通过smtp服务器发送电子邮件

查询正在成功执行,但程序无法连接到smtp服务器

若我在评论数据库连接代码,那个么邮件发送代码的执行是正确的

还有一个例子,若我写的是邮件,先发送代码,然后在程序正常运行后将执行代码存入数据库

问题是如何在同一程序中执行数据库查询后发送邮件

这是我的密码

package com.ravi;

import java.util.Properties;
import java.sql.*;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class TestMail {

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

        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","****");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("select * from emp");
        while(rs.next()){
            System.out.println(rs.getString("eno"));
            System.out.println(rs.getString("ename"));
        }
        rs.close();
        stmt.close();
        con.close();
        //System.exit(1);


        String to = "****@***.co.in";//change accordingly  
        String from = "*****@***.co.in";//change accordingly  
        String host = "***.***.co.in";//or IP address  

       //Get the session object  
        Properties properties = System.getProperties();  
        properties.setProperty("mail.smtp.host", host); 
        properties.setProperty("java.net.preferIPv4Stack", "true");
        Session session = Session.getDefaultInstance(properties);  

       //compose the message  
        try{  
           MimeMessage message = new MimeMessage(session);  
           message.setFrom(new InternetAddress(from));  
           message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));  
           message.setSubject("Ping");  
           message.setText("Hello, this is example of sending email  ");  

           // Send message  
           Transport.send(message);  
           System.out.println("message sent successfully....");  

        }catch (MessagingException mex) {mex.printStackTrace();}  

}
}

堆栈跟踪

javax.mail.MessagingException: Could not connect to SMTP host: ***.***.co.in, port: 25;
  nested exception is:
    java.net.SocketException: Network is unreachable: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
    at javax.mail.Service.connect(Service.java:295)
    at javax.mail.Service.connect(Service.java:176)
    at javax.mail.Service.connect(Service.java:125)
    at javax.mail.Transport.send0(Transport.java:194)
    at javax.mail.Transport.send(Transport.java:124)
    at com.ravi.TestMail.main(TestMail.java:50)
Caused by: java.net.SocketException: Network is unreachable: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:321)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
    ... 7 more

可能不是最好的,但下面的代码会起作用

在获取数据库连接之前,我正在创建会话

我将创建会话代码移到数据库连接代码之前

import java.util.Properties;
import java.sql.*;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class TestMail {

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


    String to = "****@***.co.in";//change accordingly  
    String from = "*****@***.co.in";//change accordingly  
    String host = "***.***.co.in";//or IP address  

   //Get the session object  
    Properties properties = System.getProperties();  
    properties.setProperty("mail.smtp.host", host); 
    properties.setProperty("java.net.preferIPv4Stack", "true");
    Session session = Session.getDefaultInstance(properties);  



    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","****");
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("select * from emp");
    while(rs.next()){
        System.out.println(rs.getString("eno"));
        System.out.println(rs.getString("ename"));
    }
    rs.close();
    stmt.close();
    con.close();
    //System.exit(1);



   //compose the message  
    try{  
       MimeMessage message = new MimeMessage(session);  
       message.setFrom(new InternetAddress(from));  
       message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));  
       message.setSubject("Ping");  
       message.setText("Hello, this is example of sending email  ");  

       // Send message  
       Transport.send(message);  
       System.out.println("message sent successfully....");  

    }catch (MessagingException mex) {mex.printStackTrace();}  

}

当您无法连接到SMTP服务器时,会发生什么情况?您是否遇到异常,程序是否挂起,或者是什么?如果您遇到异常,请在问题中发布堆栈跟踪。这也会很有帮助。推测:properties.setProperty(“java.net.preferIPv4Stack”,“true”);一旦发生任何网络活动,这可能不会产生任何影响。在数据库工作之前,请尝试从头开始。@ThomasStets我已经添加了堆栈跟踪。