从java发送电子邮件
我一直在尝试从我的servlet发送电子邮件。我试图看看如何在互联网上做到这一点。但是,在我遇到的所有代码中,没有一个使用发件人密码发送邮件 这意味着任何人都可以从任何人的帐户发送电子邮件。我是不是搞错了,或者到底是怎么回事从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:
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());
}
}