简单邮件传输协议(Simple Mail Transfer PRotocol,SMTP)是一个运行在TCP/ip之上的协议,用它发送和接收电子邮件。SMTP 服务器在默认端口25上监听。SMTP客户使用一组简单的、基于文本的命令与SMTP服务器进行通信。在建立了一个连接后,为了接收响应,SMTP客户首先发出一个命令来标识它们的电子邮件地址。假如SMTP服务器接受了发送者发出的文本命令,它就利用一个OK响应和整数代码确认每一个命令。客户发送的另一个命令意味着电子邮件消息体的开始,消息体以一个圆点“.”加上回车符终止。
◆ POP3 协议
邮局协议(Post Office Protocol Version 3,POP3)提供了一种对邮件消息进行排队的标准机制,这样接收者以后才能检索邮件。POP3服务器也运行在TCP/IP之上,并且在默认端口110上监听。在客户和服务器之间进行了初始的会话之后,基于文本的命令序列可以被交换。POP3客户利用用户名和口令向POP3服务器认证。POP3中的认证是在一种未加密的会话基础之上进行的。POP3客户发出一系列命令发送给POP3服务器,如:请求客户邮箱队列的状态、请求列出的邮箱队列的内容和请求检索实际的消息。POP3代表一种存储转发类型的消息传递服务。现在,大部分邮件服务器都采用SMTP发送邮件,同时使用POP3接收电子邮件消息。
◆ IMAP 协议
Internet 消息访问协议(Internet Message access Protocol,IMAP)是一种电子邮件消息排队服务,它对POP3的存储转发限制提供了重要的改进。IMAP也使用基于文本命令的语法在TCP/IP上运行,IMAP服务器一般在默认端口143监听。IMAP服务器答应IMAP客户下载一个电子邮件的头信息,并且不要求将整个消息从服务器下载至客户,这一点与POP3是相同的。IMAP服务器提供了一种排队机制以接收消息,同时必须与SMTP相结合在一起才能发送消息。
public int close(){ int i = 0; try{ i += sendString("QUIT"); mailSocket.close(); } catch(Exception e){ return 0; } return i == 0 ? 1 : 0; } mailSendFrame.java源程序代码如下:
import java.awt.*; import java.awt.event.*; public class mailSendFrame extends Frame { smtpMail mailSender=new smtpMail(); Panel panelMain = new Panel(); Panel panelUp = new Panel(); Panel panel3 = new Panel(); Panel panel4 = new Panel(); Panel panel6 = new Panel(); Panel panel7 = new Panel(); TextField txtServer = new TextField(); TextField txtTo = new TextField(); TextField txtFrom = new TextField(); TextField txtSubject = new TextField(); Panel panel8 = new Panel(); Label lblFile = new Label(); Button cmdBrowse = new Button(); Panel panelDown = new Panel(); TextArea txtMail = new TextArea(); Panel panel10 = new Panel(); Button cmdSend = new Button(); Button cmdExit = new Button(); private FileDialog openFileDialog = new FileDialog(this,"打开文件",FileDialog.LOAD); public mailSendFrame() { try { Init(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { mailSendFrame mailSendFrame = new mailSendFrame(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = mailSendFrame.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } mailSendFrame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); mailSendFrame.setVisible(true); mailSendFrame.show(); } private void Init() throws Exception { this.setLayout(new BorderLayout()); panelMain.setLayout(new GridLayout(2,1)); panelUp.setLayout(new GridLayout(6,1)); panel3.setLayout(new FlowLayout()); this.setVisible(true); ....... ....... //smtpMail.java 的源代码 import java.io.*; import java.net.Socket; import java.util.*; public class smtpMail{ private boolean sendConf=false; public static final int OK = 1; public static final int ERROR = 0; private static final String TEXT = "1"; private static final String TFILE = "2"; private static final String BFILE = "3"; private static final String CPR = "Java 1.0"; private static final String MAILER = "X-Mailer"; private static final int BUFFER_SIZE = 48; private String DELIMETER; private String SEPARATOR; private static final int HOW_LONG = 6; private static final char SMTP_ERROR_CODE1 = 52; private static final char SMTP_ERROR_CODE2 = 53; private static final int fillchar = 61; private static final String cvt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";