阿里云smtp邮件服务引发的血案

简介: 前言今天开发伙伴找我修改邮件服务smtp发现网站用邮箱找回密码失败了!于是我开始了简单得操作!首先我扫描一下!发现25端口没有连接服务。看一下报错!之后telnet一下 telnet smtp.163.com 25发现找不到!之后上网找一些资料发现阿里的售后很早之前发过这样的帖子 说25端口禁用了,之后又有查询资料发现465端口ssl可以!那么问题找到了 那就需要将25端口换到465端口 采用SSL协议传输邮件。

前言
今天开发伙伴找我修改邮件服务smtp发现网站用邮箱找回密码失败了!于是我开始了简单得操作!


首先我扫描一下!



0b7c80e373be1f4f93aaf914ac441541.png-wh_

发现25端口没有连接服务。


看一下报错!


e06792ab73be4177a6dd524a00d0e436.png-wh_


之后telnet一下 telnet smtp.163.com 25发现找不到!

之后上网找一些资料发现阿里的售后很早之前发过这样的帖子 说25端口禁用了,之后又有查询资料发现465端口ssl可以!


5476ca0d62707479a7583b6b32de7d11.png-wh_

那么问题找到了 那就需要将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协议的时候,顺利的在服务器上发出邮件了。


注意!需要在阿里云的安全组把465端口写上!


9367640826ed7ce35fa0519be12042e8.png-wh_



自后在扫描一下看看是否支持465端口!已经open了!

看一下邮箱是否收到验证码!


adcb655c01f27a517ba115ebaa798ebc.jpg-wh_

输入邮箱找回密码!

7c673c8047665db4d1701b3cdc9612f8.png-wh_



总结!勤动脑多喝六个核桃!




目录
相关文章
|
6月前
|
网络协议 关系型数据库 Shell
gitlab-设置邮件SMTP以及GitLab收不到邮件的问题
gitlab-设置邮件SMTP以及GitLab收不到邮件的问题
505 1
|
4月前
|
监控 网络协议 网络安全
SMTP操作使用详解并通过python进行smtp邮件发送示例
SMTP操作使用详解并通过python进行smtp邮件发送示例
133 3
|
4月前
|
监控 数据安全/隐私保护
Smtp邮件发送失败情况汇总
Smtp邮件发送失败情况汇总
237 0
|
5月前
|
前端开发 Java 网络安全
基于Java Socket实现的SMTP邮件客户端 - 全面支持SSL, TLS
基于Java Socket实现的SMTP邮件客户端 - 全面支持SSL, TLS
58 0
|
6月前
|
API 网络安全 数据安全/隐私保护
SMTP邮件邮箱API发送邮件的方法和步骤
使用SMTP邮件邮箱API(如AokSend)发送邮件涉及6个步骤:获取SMTP服务器地址和端口,进行身份验证,构建邮件内容,连接到服务器,发送邮件及处理结果。例如,Gmail的SMTP服务器地址是smtp.gmail.com,端口587。此方法适用于程序化发送邮件,确保安全并支持大规模发信服务。
|
C# 数据安全/隐私保护
C#接入SMTP邮件服务
这两个引用用于C#接入邮件的SMTP服务
294 0
|
网络协议 安全 网络安全
SMTP邮件服务器原理解析,php发送邮件,swoole发送邮件
简单邮件传输协议 (Simple Mail Transfer Protocol 简称 SMTP) 是一个相对简单的基于文本的协议。 在发送方(客户端)和接收方(服务器)间创建TCP连接之后 那么接下来就是一个合法的SMTP会话了。(SMTP会话的本质只是一个普通TCP,只是会话的消息按照规范组装发送) 在下面的对话中,所有客户端发送的都以C:作为前缀,所有服务器发送的都以S:作为前缀。
216 0
SMTP邮件服务器原理解析,php发送邮件,swoole发送邮件
|
人工智能
邮件开发:一些常见邮箱的POP3及SMTP服务器地址
邮件开发:一些常见邮箱的POP3及SMTP服务器地址
336 0
|
存储 Java API
JavaMail 使用POP3/SMTP服务发送QQ邮件
JavaMail 使用POP3/SMTP服务发送QQ邮件
524 0
JavaMail 使用POP3/SMTP服务发送QQ邮件
|
PHP 数据安全/隐私保护
phpmailer/phpmailer 邮件发送,163SMTP设置
phpmailer/phpmailer 邮件发送,163SMTP设置
199 0