Java 自动发送电子邮件
我正在尝试设置一个可以自动发送电子邮件的程序。但是,第一步对我来说根本不起作用,它给出了以下错误:Java 自动发送电子邮件,java,email,jakarta-mail,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
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")
通常,会话需要使用用户名、密码和属性创建一个Java邮件会话,这在上面的代码中是缺失的。为了示范,
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
}
});
您是否在本地主机上安装了SMTP服务器?您是在本地主机上运行电子邮件服务器,还是只打开了一个电子邮件客户端?@AJNeufeld我正在运行windows mail,它始终安装在windows上。现在我的问题是,这算是本地主机还是客户端?不过也安装了hMailServer,现在尝试另一种方式“邮件是电子邮件和新闻组客户端…”。hMailServer听起来像是一个真正的服务器,所以如果它在本地主机上运行,您的代码应该可以工作。但是,您不需要在本地主机上运行服务器;您只需要连接到实际的电子邮件服务器,并通过该服务器发送邮件。它不必在本地主机上。与其费劲地安装和运行自己的服务器,或者不小心为垃圾邮件创建了一个开放式中继,不如使用现有的电子邮件服务。第一个代码与System.getProperties不一样吗?抛出MessaginException的代码块需要try catch。设置属性和创建会话的代码不会出现。因此,在try-catch.No上面的代码不同,会话可以使用properties对象创建,也可以是一个新的property对象。只要邮件会话的连接属性设置正确,可能无法连接到smtp并仅使用指定的主机名发送邮件。仍然无法工作,可能是因为例如Firewall我的服务器说它已处理了这些邮件,但是在实际的客户端中,我看不到消息,也看不到应该接收邮件的客户端中的消息