从java发送电子邮件

从java发送电子邮件,java,smtp,jakarta-mail,Java,Smtp,Jakarta Mail,我一直在尝试从我的servlet发送电子邮件。我试图看看如何在互联网上做到这一点。但是,在我遇到的所有代码中,没有一个使用发件人密码发送邮件 这意味着任何人都可以从任何人的帐户发送电子邮件。我是不是搞错了,或者到底是怎么回事 Exception in thread "main" javax.mail.MessagingException: Could not connect to S MTP host: localhost, port: 465; nested exception is:

我一直在尝试从我的servlet发送电子邮件。我试图看看如何在互联网上做到这一点。但是,在我遇到的所有代码中,没有一个使用发件人密码发送邮件

这意味着任何人都可以从任何人的帐户发送电子邮件。我是不是搞错了,或者到底是怎么回事

Exception in thread "main" javax.mail.MessagingException: Could not connect to S
MTP host: localhost, port: 465;
  nested exception is:
        java.net.ConnectException: Connection refused: connect
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:41
2)
        at javax.mail.Service.connect(Service.java:288)
        at javax.mail.Service.connect(Service.java:169)
        at javax.mail.Service.connect(Service.java:189)
        at Email1.main(Email1.java:19)
Caused by: java.net.ConnectException: Connection refused: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketI
mpl.java:69)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.ja
va:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocket
Impl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java
:182)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
        at java.net.Socket.connect(Socket.java:579)
        at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:612)
        at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:160
)
        at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
        at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)

在某种程度上你是对的。如果smtp服务器不需要身份验证,任何人都可以冒充他人发送am电子邮件;-)幸运的是,大多数服务器都需要身份验证

我不太明白你想在这里实现什么。您是否有自己的smtp服务器,或者您是否希望允许用户从他们已有的帐户(例如,从gmail.com)发送邮件。在这两种情况下,您可能都希望看到API文档。甚至还有一个示例JavaMailServlet可供参考

下面是一个发送电子邮件并使用user/pass向smtp服务器进行身份验证的简单程序(基于JavaMail中的示例):


当您的代码正在运行报表或需要通知您某个事件时,可以从servlet发送电子邮件,在这种情况下,该电子邮件将来自通用服务帐户。如果要使用客户端的电子邮件凭据,则必须请求这些凭据,或具有允许用户输入联系信息的UI。然而,我认为向任何人询问他们的电子邮件密码有点不确定。我知道我不会将这些信息输入某人的网站,无论我多么信任他们的服务。因此,我认为您需要更多地考虑您的设计和您的体验,而不是简单地使用代码。

我正在通过我的电子邮件地址向客户发送和发送电子邮件。这只需要我的密码。为什么我需要客户端密码。我只需要客户的电子邮件地址,我可以从客户机本身获取。注意:我没有自己的smptp服务器或类似的东西。我将客户机的电子邮件id输入到servlet中,并希望向客户机发送电子邮件以进行验证。我想从我的gmail帐户发送。有可能吗?当然有,但gmail需要TLS连接。因此,您需要使用
smtps
(安全)而不是
smtp
。您只需在上述代码中更改
props.setProperty(“mail.smtps.host”、“smtp.gmail.com”)
会话.getTransport(“smtps”)。然后在
connect()
方法中使用您自己的登录名和密码。但我有例外。请查看有关异常的问题。@user1139023是否在本地主机上运行SMTP服务器?如果没有,请确保您实际配置了正确的主机名(如果您使用的是smtps,请使用正确的属性)@Bartosz Moczulski:我不能在验证自己时使用google的smpt服务器吗。是否有必要拥有自己的smtp服务器。
import java.util.Properties;

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 Mail
{
    public static void main(String[] args) throws MessagingException
    {
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", "smtp.example.com");
        // props.setProperty("mail.smtp.auth", "true"); // not necessary for my server, I'm not sure if you'll need it
        Session session = Session.getInstance(props, null);
        Transport transport = session.getTransport("smtp");
        transport.connect("user", "password");

        Message message = new MimeMessage(session);
        message.setSubject("Test");
        message.setText("Hello :)");
        message.setFrom(new InternetAddress("you@example.com"));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("your-friend@example.com"));
        transport.sendMessage(message, message.getAllRecipients());
    }
}