Java邮件发送以及SMTP各端口的含义与用法

您所在的位置:网站首页 smtp的中文含义为 Java邮件发送以及SMTP各端口的含义与用法

Java邮件发送以及SMTP各端口的含义与用法

2024-03-02 14:01| 来源: 网络整理| 查看: 265

import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; public class JavaMail { private static final String SMTP_SERVER = "smtp.example.com"; private static final String USERNAME = ""; private static final String PASSWORD = ""; private static final String EMAIL_FROM = "[email protected]"; private static final String EMAIL_TO = "[email protected]"; private static final String EMAIL_SUBJECT = "Test Send Email"; private static final String EMAIL_TEXT = "Hello World"; public static void main(String[] args) { Properties prop = System.getProperties(); prop.put("mail.smtp.host", SMTP_SERVER); prop.put("mail.smtp.auth", "true"); prop.put("mail.smtp.port", "587"); prop.put("mail.smtp.starttls.enable", "true"); Session session = Session.getInstance(prop, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(USERNAME, PASSWORD); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(EMAIL_FROM)); message.setRecipients( Message.RecipientType.TO, InternetAddress.parse(EMAIL_TO)); message.setSubject(EMAIL_SUBJECT); message.setText(EMAIL_TEXT); Transport.send(message); System.out.println("Mail successfully sent"); } catch (MessagingException e) { e.printStackTrace(); } } }

在这段代码中,SMTP_SERVER 是 SMTP 服务器地址,USERNAME 和 PASSWORD 是邮件发送方的账户信息。

下面来讲解一下我们常用的几个邮件发送端口25/465/587

端口25是用于SMTP(简单邮件传输协议)的原始标准端口,SMTP协议是用于发送电子邮件的互联网标准。然而,因为它经常被用于发送垃圾邮件和执行网络攻击,许多互联网服务提供商(ISPs)和网络管理员已经开始阻止或限制对端口25的访问。需要注意的是,虽然端口25现在通常不用于客户端电子邮件提交,但它仍然广泛用于邮件服务器之间的电子邮件传输。这就是为什么在配置邮件服务器时,通常仍需要开放端口25。端口465是SMTPS协议的端口,使用SSL/TLS协议进行安全连接。在这种方式中,客户端和服务器在建立连接时就开始进行加密,所有的数据在整个传输过程中都是加密的。端口587 是SMTP协议的默认端口,使用STARTTLS协议进行安全连接。在这种方式中,客户端首先建立一个未加密的连接到SMTP服务器,然后使用STARTTLS命令切换到加密连接。如果服务器不支持STARTTLS命令,那么连接将保持未加密状态。

下面来讲解一下properties中各参数用法,注意这里需要配合具体的端口使用

使用465端口时,properties配置如下:

props.put("mail.smtps.host", "smtp.example.com"); //smtp主机地址 props.put("mail.smtps.port", "465"); //端口号 props.put("mail.smtps.auth", "true"); //允许身份验证 props.put("mail.smtps.ssl.enable", "true"); //启用ssl协议

并且在创建Transport的时候需要特别指明smtps协议类型

Transport transport = session.getTransport("smtps");

使用587端口时,properties配置如下:

props.put("mail.smtps.host", "smtp.example.com"); //smtp主机地址 props.put("mail.smtps.port", "587"); //端口号 props.put("mail.smtps.auth", "true"); //允许身份验证 props.put("mail.smtp.starttls.required", "true"); //允许使用starttls协议 props.put("mail.smtp.starttls.enable", "true"); //启用starttls协议

如果在调试过程中出现异常,或者方法执行了,没有报错也没有成功发送邮件,我们可以在properties中开启debug模式来帮助我们快速排查问题

props.put("mail.debug", "true");

这里举一个经常出现的问题:Got bad greeting from SMTP host: smtp.xxx.com, port: 587, response: [EOF]

这个错误的意思是与邮件服务连接错误,这时候我们可以通过telnet命名检查我们的服务器与对方服务的连接情况,如果telnet返回失败,则可尝试465端口。

今天的分享就到这里啦,祝大家编码愉快



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3