Java中实现SMTP邮件服务器-用demo简单粗暴的来发一波邮件了

1、 邮件开发涉及到的一些基本概念(表示只要代码着急拿来用的童鞋直接翻到后面第2点:))在简单粗暴的拿出样例之前,需要先简介一下邮件服务的一些基本概念,以期更好的理解本文。在一个目前常用的邮件系统中,收发邮件功能的实现是通过不同的协议实现的,收邮件一般采用POP(PostOffice Protocol)协议,即邮局协议,目前所用的版本是3,所以人们通常称之为POP3,。该协议定义了接收邮件的机
摘要由CSDN通过智能技术生成

1、 邮件开发涉及到的一些基本概念(表示只要代码着急拿来用的童鞋直接翻到后面第2点:))

在简单粗暴的拿出样例之前,需要先简介一下邮件服务的一些基本概念,以期更好的理解本文。在一个目前常用的邮件系统中,收发邮件功能的实现是通过不同的协议实现的,收邮件一般采用POP(PostOffice Protocol)协议,即邮局协议,目前所用的版本是3,所以人们通常称之为POP3,。该协议定义了接收邮件的机制,并规定每个用户只能有一个邮箱的支持。占用端口一般为25;发邮件一般采用SMTP (Simple Mail Transfer Protocol)协议,即简单邮件传输协议,它定义了发送电子邮件的机制,通过它程序将和您的公司或因特网服务供应商的(InternetService Provider's,ISP's)SMTP 服务器通信。SMTP 服务器可将消息中转至接收方 SMTP 服务器,以便最终让用户经由 POP 或IMAP 获得。占用端口一般为110;通过程序实现这两个协议,我们就可以构建自己企业的邮件收发系统。

1.1、邮件服务器和电子邮箱

  要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。

  这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

  电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户,用户在邮件服务器上申请了一个帐号后,邮件服务器就会为这个账号分配一定的空间,用户从而可以使用这个帐号以及空间发送电子邮件和保存别人发送过来的电子邮件。

1.2、邮件传输协议


1.2.1、SMTP协议


  用户连接上邮件服务器之后,要想给它发送一封电子邮件,需要遵循一定的通讯规则,SMTP协议就是用来定义这种通讯规则的。因此,我们通常也把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。

1.2.2、POP3协议


  同样,用户若想从邮件服务器管理的电子邮箱当中接收一封电子邮件话,它连上邮件服务器后,也要遵循一定的通讯格式,POP3协议就是用来定义这种通讯格式的。因此,我们通常也把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。


1.3、电子邮件的发送和接收过程

  通过一张图来说明一封邮件的发送和接收过程,如下图所示:

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个使用Java Socket类与SMTP服务器通信并发送电子邮件的Servlet示例: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SendEmailServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取邮件相关信息 String toAddress = request.getParameter("toAddress"); String subject = request.getParameter("subject"); String message = request.getParameter("message"); // SMTP服务器信息 String host = "smtp.example.com"; int port = 25; // 发件人和收件人信息 String fromAddress = "sender@example.com"; String username = "sender@example.com"; String password = "password"; // 建立Socket连接 Socket socket = new Socket(host, port); // 创建输入输出流 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 接收服务器欢迎信息 String welcomeMsg = in.readLine(); System.out.println(welcomeMsg); // 发送EHLO命令 out.println("EHLO " + host); // 接收服务器回应 String ehloMsg = ""; while ((ehloMsg = in.readLine()) != null) { System.out.println(ehloMsg); if (ehloMsg.indexOf("250 ") == 0) { break; } } // 发送AUTH LOGIN命令 out.println("AUTH LOGIN"); // 接收服务器回应 String authMsg = in.readLine(); System.out.println(authMsg); // 发送用户名和密码 out.println(new String(Base64.getEncoder().encode(username.getBytes()))); out.println(new String(Base64.getEncoder().encode(password.getBytes()))); // 发送MAIL FROM命令 out.println("MAIL FROM: <" + fromAddress + ">"); // 接收服务器回应 String mailFromMsg = in.readLine(); System.out.println(mailFromMsg); // 发送RCPT TO命令 out.println("RCPT TO: <" + toAddress + ">"); // 接收服务器回应 String rcptToMsg = in.readLine(); System.out.println(rcptToMsg); // 发送DATA命令 out.println("DATA"); // 接收服务器回应 String dataMsg = in.readLine(); System.out.println(dataMsg); // 发送邮件内容 out.println("From: " + fromAddress); out.println("To: " + toAddress); out.println("Subject: " + subject); out.println(""); out.println(message); out.println("."); // 接收服务器回应 String sendMsg = in.readLine(); System.out.println(sendMsg); // 发送QUIT命令 out.println("QUIT"); // 关闭Socket连接 socket.close(); // 返回结果 response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h2>Email sent successfully.</h2>"); out.println("</body></html>"); } } ``` 上述代码,我们建立了一个Socket连接到SMTP服务器,并通过输入输出流发送SMTP命令来完成邮件发送的过程。在实际应用,我们需要将邮件相关信息从前端表单获取并传递给Servlet来完成邮件发送的过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值