为什么在本地写好的Java Mail工具类可以成功发送邮件,部署到阿里云服务器后总是等待请求,邮件发送失败。 因为本地发送邮件端口为25端口,我们在服务器上telnet下163邮箱的smtp,结果如图:  25端口超时了,看来就是端口的原因,找了很久的问题,突然在阿里云客服社区发现一个帖子,当中有客服的解释,当然我不是第一个遇到这个问题的人。那么客服的解释一下就说明的问题:好像是将25端口封掉了 时间是2016年9月底以后新购买的服务器。  既然问题找到了,废话不多说,直接贴解决方案, 那就是将25端口换到465端口 采用SSL协议传输邮件。 好了贴代码时间到: 下面这段代码是采用SSL协议发送邮件的一个简单的工具类: ```java package com.kingtail.bos.utils; import java.security.Security; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage.RecipientType; public class MailUtils { // 邮件服务器主机地址 // private static String HOST="localhost"; private static String HOST = "smtp.163.com"; // 帐号 //private static String ACCOUNT = "163邮箱地址"; private static String ACCOUNT = "xxxxxx"; // 密码 // private static String PASSWORD = "邮箱授权码"; private static String PASSWORD = "xxxxxx"; /** * @param toUser * 发送邮件给谁 * @param title * 邮件的标题 * @param emailMsg * 邮件信息 */ public static void sendMail(String toUser, String title, String emailMsg) throws AddressException, MessagingException { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; // 1.创建一个程序与邮件服务器会话对象 Session Properties props = new Properties(); // 设置发送的协议 props.setProperty("mail.transport.protocol", "SMTP"); // 设置发送邮件的服务器 props.setProperty("mail.host", HOST); props.setProperty("mail.smtp.auth", "true");// 指定验证为true props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); props.setProperty("mail.smtp.socketFactory.fallback", "false"); // 邮箱发送服务器端口,这里设置为465端口 props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); // 创建验证器 Authenticator auth = new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { // 设置发送人的帐号和密码 帐号 授权码 return new PasswordAuthentication(ACCOUNT, PASSWORD); } }; // 会话 Session session = Session.getInstance(props, auth); // 2.创建一个Message,它相当于是邮件内容 Message message = new MimeMessage(session); // 设置发送者 message.setFrom(new InternetAddress(ACCOUNT)); // 设置发送方式与接收者 message.setRecipient(RecipientType.TO, new InternetAddress(toUser)); // 设置邮件主题 message.setSubject(title); // message.setText("这是一封激活邮件,请点击"); // 设置邮件内容 message.setContent(emailMsg, "text/html;charset=utf-8"); // 3.创建 Transport用于将邮件发送 Transport.send(message); } } ``` 别忘记放行465端口,OK 问题解决 最后修改:2020 年 05 月 08 日 01 : 19 AM © 著作权归作者所有 赞赏 如果觉得我的文章对你有用,请随意赞赏 ×Close 赞赏作者 扫一扫支付 支付宝支付 微信支付