java - 自动发送电子邮件

标签 java email jakarta-mail

我正在尝试设置一个可以自动发送电子邮件的程序。然而,第一步对我来说甚至不起作用,它给出了这个错误:

com.sun.mail.util.MailConnectException: Couldn't connect to host, port: 127.0.0.1, 25; timeout -1;
  nested exception is:
    java.net.ConnectException: Connection refused: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2209)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740)
    at javax.mail.Service.connect(Service.java:366)
    at javax.mail.Service.connect(Service.java:246)
    at javax.mail.Service.connect(Service.java:195)
    at javax.mail.Transport.send0(Transport.java:254)
    at javax.mail.Transport.send(Transport.java:124)
    at server.main(server.java:46)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.base/java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.base/java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400)
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243)
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225)
    at java.base/java.net.PlainSocketImpl.connect(PlainSocketImpl.java:148)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402)
    at java.base/java.net.Socket.connect(Socket.java:591)
    at java.base/java.net.Socket.connect(Socket.java:540)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:353)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:239)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175)
    ... 7 more

这是代码:

// File Name SendEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class server {

   public static void main(String [] args) {    
      // Recipient's email ID needs to be mentioned.
      String to = "my other email properly written";

      // Sender's email ID needs to be mentioned
      String from = "my email properly written";

      // Assuming you are sending email from localhost
      String host = "127.0.0.1";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("mail.smtp.host", host);

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

      try {
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Now set the actual message
         message.setText("This is actual message");

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

有谁知道为什么会发生这种情况以及如何解决这个问题?我的电子邮件实际上是打开的等。因为它是本地主机,所以我不知道为什么它不起作用。

最佳答案

访问 SMTP 服务器需要 smtp 主机端口和安全设置(如果适用)。

Properties props = new java.util.Properties();
props.put("mail.smtp.host", "hostname") #
props.put("mail.smtp.port", "portnumber") #25
props.put("mail.smtp.starttls.enable", "boolean value true or false") 
props.put("mail.smtp.auth", "boolean value true or false")

通常需要创建一个 session (使用用户名、密码和属性的 Java 邮件 session ),但上面的代码中缺少该 session 。出于演示目的,

 Session session = javax.mail.Session.getInstance( props, 
         new javax.mail.Authenticator() {
            protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
               return new javax.mail.PasswordAuthentication("username", "password"); //username and password
       }
         });

关于java - 自动发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50644207/

相关文章:

java - 小便器算法 - 一个简单的优化

java - 为什么通过创建扩展抽象类 "Square"的子类 "Figure"会出现 NullPointerException ?

android - 使用 Intent 时不显示电子邮件正文

java - 如何使用 Java Mail API 通过电子邮件发送带有外部 css 和 js 的 HTML 文件?

java - 我想使用java发送邮件而不延迟

java - 如何使用 Hibernate 将文件作为 byte[] 存储到数据库中?

Java 从 resultSet 生成查询并执行新查询

gmail - 为 Gmail 预设回复创建快捷方式

html - 发送包含样式表的 HTML 电子邮件

java - 如何在 JSP 中不使用 scriptlet 读取附件消息?