簡單郵件傳輸協議(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+/";