阿里云服务器 通过JavaMail发送邮箱STMP问题 25端口被禁用 使用SSL协议465端口
2017-02-27 21:15
716 查看
1 问题描述
我们传统使用的比较简单的是 STMP 25端口收发邮件今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件
开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了JDK1.7 还是不行,所以这里排除了JDK的原因。
那么问题来了,是否25端口不能连接适用喃?
然后在终端输入命令行 ,可测试25端口是否可连接。
telnet smtp.163.com 25
返回成功 说明你的服务器 是没有封掉25端口的。上面的图是我自己的电脑,当然能连通。
当换到服务器测试的时候 就会出现一只连接不成功
找了很久的问题,突然在阿里云客服社区发现一个帖子,当中有客服的解释,当然我不是第一个遇到这个问题的人。
那么客服的解释一下就说明的问题:好像是将25端口封掉了 时间是2016年9月底以后新购买的服务器。
2 问题解决
那么问题找到了 那就需要将25端口换到465端口 采用SSL协议传输邮件。好了贴代码时间到:
下面这段代码是采用SSL协议发送邮件,可向多人单人发送邮件
public static boolean sslSend(MessageInfo msg1, EmailAccount emailAccount) throws AddressException, MessagingException, IOException{ Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; // Get a Properties object Properties props = new Properties(); props.setProperty("mail.smtp.host", emailAccount.getPlace()); props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.auth", "true"); final String username = emailAccount.getUsername(); final String password = emailAccount.getPassword(); Session session = Session.getDefaultInstance(props, new Authenticator(){ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); }}); Message msg = new MimeMessage(session); // 设置发件人和收件人 msg.setFrom(new InternetAddress(emailAccount.getUsername())); List<String> tos = msg1.getTo(); Address to[] = new InternetAddress[tos.size()]; for(int i=0;i<tos.size();i++){ to[i] = new InternetAddress(tos.get(i)); } // 多个收件人地址 msg.setRecipients(Message.RecipientType.TO, to); msg.setSubject(msg1.getSubject()); // 标题 msg.setText(msg1.getMsg());// 内容 msg.setSentDate(new Date()); Transport.send(msg); System.out.println("EmailUtil ssl协议邮件发送打印" +msg.toString()); return true; }
EmailAccout 字段
// 邮箱用户 private String username; // 邮箱密码 private String password; // 邮箱服务器 private String place;
MessageInfo 字段
@NameCN("发件人地址") private String from; @NameCN("收件人地址") private List<String> to; @NameCN("发送时间") private Date sendDate; @NameCN("邮件主题") private String subject; @NameCN("消息正文") private String msg;
将需要的信息,写入这两个Bean,传入最上面的方法即可 使用。
下面是25端口 非SSl协议传输代码块
public void doSend(MessageInfo msg, EmailAccount emailAccount) { SimpleMailMessage simpleMailMessage = new SimpleMailMessage(); simpleMailMessage.setFrom(msg.getFrom());// 设置发送者地址 List<String> tos = msg.getTo(); String to[] = new String[tos.size()]; tos.toArray(to); simpleMailMessage.setTo(to);// 设置接受者地址,可多个 simpleMailMessage.setSubject(msg.getSubject()); simpleMailMessage.setSentDate(msg.getSendDate()); simpleMailMessage.setText(msg.getMsg()); simpleMailMessage.setFrom(emailAccount.getUsername()); System.out.println("EmailUtil 邮件发送打印 1111" + simpleMailMessage.toString()); JavaMailSenderImpl s = new JavaMailSenderImpl(); s.setHost(emailAccount.getPlace()); // s.setPort(25); s.setUsername(emailAccount.getUsername()); s.setPassword(emailAccount.getPassword()); s.send(simpleMailMessage); }
这是参考的引入
import java.io.IOException; import java.security.Security; import java.util.Date; import java.util.List; import java.util.Properties; import javax.mail.Address; 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 org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import 项目包名.MessageInfo; import 项目包名.EmailAccount;
javamail是spring里的javamail jar包。
OK当我们使用465端口SSL协议的时候,顺利的在服务器上发出邮件了。
相关文章推荐
- 阿里云服务器 发送邮箱 STMP 25端口 465端口问题 Javamail 25被禁用
- 阿里云服务器发送邮件失败,25端口被禁用,采用ssl 方式 465端口发送
- 阿里云服务器25端口不可用,换465端口发送邮件
- 阿里云服务器禁掉25端口 Javamail无法发送邮件
- 阿里云ECS服务器无法使用25端口发送
- 使用JavaMail发送邮件,并使用465端口开启ssl加密传输,保证邮件安全
- 如何解决阿里云服务器使用phpmail发送邮件超时的问题(针对qq企业邮箱)
- 阿里云服务器不能发邮件,禁用25端口的解决办法
- JavaMail使用465端口发送SSL加密邮件
- 手机邮箱配置POP发送端口错误,发送服务器(SMTP)的端口号是 25
- 阿里云服务器封25端口导致邮件无法发送
- JavaMail使用阿里云企业版邮箱发送邮件
- 使用JavaMail通过QQ/126服务器服务发送邮件
- 在红帽子下配置javamail服务器,使用外面的邮箱地址发送邮件失败
- 阿里云服务器 25端口无法使用解决方案
- 在使用JavaMail实现imap协议收取各种邮箱服务器的邮件的时候,碰到了几个比较郁闷的问题
- 阿里云ECS专有网络服务器禁用了25端口
- Java使用465端口发送邮件(绕过25端口限制)
- C#发布WebService提供使用时候,通过服务器解决前端js跨域访问问题