当前位置:   article > 正文

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

javax mimemessage邮件是smtp
  1. import javax.mail.*;
  2. import javax.mail.internet.InternetAddress;
  3. import javax.mail.internet.MimeMessage;
  4. import java.util.Properties;
  5. public class JavaMail {
  6. private static final String SMTP_SERVER = "smtp.example.com";
  7. private static final String USERNAME = "";
  8. private static final String PASSWORD = "";
  9. private static final String EMAIL_FROM = "from@example.com";
  10. private static final String EMAIL_TO = "to@example.com";
  11. private static final String EMAIL_SUBJECT = "Test Send Email";
  12. private static final String EMAIL_TEXT = "Hello World";
  13. public static void main(String[] args) {
  14. Properties prop = System.getProperties();
  15. prop.put("mail.smtp.host", SMTP_SERVER);
  16. prop.put("mail.smtp.auth", "true");
  17. prop.put("mail.smtp.port", "587");
  18. prop.put("mail.smtp.starttls.enable", "true");
  19. Session session = Session.getInstance(prop, new javax.mail.Authenticator() {
  20. protected PasswordAuthentication getPasswordAuthentication() {
  21. return new PasswordAuthentication(USERNAME, PASSWORD);
  22. }
  23. });
  24. try {
  25. Message message = new MimeMessage(session);
  26. message.setFrom(new InternetAddress(EMAIL_FROM));
  27. message.setRecipients(
  28. Message.RecipientType.TO, InternetAddress.parse(EMAIL_TO));
  29. message.setSubject(EMAIL_SUBJECT);
  30. message.setText(EMAIL_TEXT);
  31. Transport.send(message);
  32. System.out.println("Mail successfully sent");
  33. } catch (MessagingException e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. }

在这段代码中,SMTP_SERVERSMTP 服务器地址,USERNAMEPASSWORD邮件发送方的账户信息。

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

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

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

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

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

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

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

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

  1. props.put("mail.smtps.host", "smtp.example.com"); //smtp主机地址
  2. props.put("mail.smtps.port", "587"); //端口号
  3. props.put("mail.smtps.auth", "true"); //允许身份验证
  4. props.put("mail.smtp.starttls.required", "true"); //允许使用starttls协议
  5. 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端口。

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/262794
推荐阅读
  

闽ICP备14008679号