【问题标题】:How to send mails from Java mail API from a server not having internet connection and using web server?如何从没有 Internet 连接并使用 Web 服务器的服务器从 Java 邮件 API 发送邮件?
【发布时间】:2014-11-13 14:29:52
【问题描述】:

我正在使用 JAVA 邮件 API 发送邮件并使用 SMTP。当我将代码放入测试服务器时,它正在成功发送邮件,因为它有互联网连接。但在生产中没有互联网连接。是否可以使用 Web 服务器发送邮件?我用来发送邮件的代码如下。

final String username = "momkutty@gmail.com";
    final String password = "password";
    Properties props = new Properties();
    System.out.println("Setting properties");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.google.com");
    props.put("mail.smtp.port", "25");
    System.out.println("Properties set successfully");
    Session session = Session.getInstance(props,
    new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(username, password);
    }
    });
    try {
    System.out.println("Setting message properties");
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("momkutty@gmail.com"));
    message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("sumankalyan.roy@cmcltd.com"));
    message.setSubject("Test Subject");
    message.setText("Hey!!!! This is a TEST mail using SMTP SMTP port no.25.....");
    System.out.println("Going to send mail...");
    Transport.send(message);
    System.out.println("Mail has been Sent");
    } catch (MessagingException e) {
    e.printStackTrace();
    }
    }e

【问题讨论】:

  • 我不明白“生产没有互联网连接”。所以你的服务器只为你的局域网服务,对吗?你的局域网中需要一个可以访问互联网的邮件服务器。我不认为这是一个java问题。这更像是一个基础设施问题。而且,没有网络服务器不是邮件服务器。

标签: smtp jakarta-mail


【解决方案1】:

如果您有 SOCKS 代理服务器,请参阅 this JavaMail FAQ entry

如果您只有一个网络代理服务器,您可能需要corkscrew 之类的东西。

【讨论】:

    【解决方案2】:

    我将我的网络服务器 IP 用作“socksProxyHost”,将 1080 用作“socksProxyPort”...!!参考以下几行......!

    props.setProperty("proxySet","true");
    props.setProperty("socksProxyHost","10.10.30.146");
    props.setProperty("socksProxyPort","1080");
    

    并尝试通过端口号发送邮件。 587……!!

    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.office365.com");
    props.put("mail.smtp.port", "587");
    

    但它说..

    javax.mail.MessagingException: Could not connect to SMTP host: smtp.office365.com, port: 587;
    nested exception is:
        java.net.ConnectException: Connection timed out
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
        at javax.mail.Service.connect(Service.java:317)
        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.cmcltd.vtms.sms.smsalert.SmsEmailAlerts.testMail(SmsEmailAlerts.java:1029)
        at com.cmcltd.vtms.sms.smsalert.ScheduleJob.execute(ScheduleJob.java:25)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)
    Caused by: java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at java.net.Socket.connect(Socket.java:528)
        at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319)
        at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233)
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
        ... 10 more
    

    是不是因为 587 端口在网络服务器中被阻塞了?还是代码有问题……!!?

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 2017-08-11
      • 2013-06-16
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多