【Java网络】STMP邮件协议 发送客户端

来源:互联网 发布:福州三城网络 编辑:程序博客网 时间:2024/05/16 14:17

1. SMTP 协议简介

simple mail Transfer Protocal:简称传输协议,是应用vengeance的协议。建立在TCP/IP的协议之上。SMTP协议规定了把邮件从发送方传输的

接受方的规则


SMTP 客户程序请求发送邮件,SMTP服务器负责吧邮件传输到目的地。默认情况下,SMTP服务器监听25端口。在SMTP客户与SMTP服务器的一次绘画过程中,SMTP客户户发送一些列SMTP命令,SMTP服务器则做出相应,返回相应的应答码,以及对应答码描述。


主要的SMTP命令:




2. 发送过程


 1.首先创建于SMTP服务器链接的socket对象。

 2.当链接成功,SMTP服务器就会返回一个应答码为220 的相应,表示服务就绪。

 3.接着sendMail()方法开始发送‘HELLO’。‘MAILFROM“,”RCPT TO“等命令,每条命令都按航发送,即以”\r\n"结束。每发送完一条命令后,都会等接收到了SMTP服务器的响应数据,然后再发送另一条命令。


实现;

package STMP;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import java.io.PrintWriter;import java.net.InetAddress;import java.net.Socket;import java.util.Scanner;import javax.swing.*;/* * 发送邮件客户端 * */public class SendMail extends JFrame {private JTextField from;private JTextField to;private JTextField server;private JTextArea message;private JTextArea comm;private Scanner in;private PrintWriter out;public SendMail(){//设置framesetSize(500,600);setTitle("send Mail");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLocationRelativeTo(null);//往frame里面添加组件JPanel p1= new JPanel(new GridLayout(3,2));p1.add(new JLabel("from:"));from=new JTextField(20);p1.add(from);p1.add(new JLabel("to:"));to= new JTextField(20);p1.add(to);p1.add(new JLabel("SMTP server:"));server= new JTextField(20);p1.add(server);add(p1,BorderLayout.NORTH);System.out.println("Look at here");JPanel p2= new JPanel(new GridLayout(2,1));message=new JTextArea();p2.add(new JScrollPane(message));comm= new JTextArea();comm.setEditable(false);p2.add(new JScrollPane(comm));add(p2,BorderLayout.CENTER);JPanel p3= new JPanel();JButton sendButton = new JButton("Send");p3.add(sendButton);add(p3,BorderLayout.SOUTH);setVisible(true);//给发送按钮注册监听器sendButton.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubcomm.setText("");sendMail(server.getText().trim(),from.getText().trim(),to.getText().trim(),message.getText().trim());}});}//发送邮件public void sendMail(String server, String from, String to, String message){try{Socket s= new Socket(server,25);try{in= new Scanner(s.getInputStream());out= new PrintWriter(s.getOutputStream(),true);/*表示自动刷新*/String hostName=InetAddress.getLocalHost().getHostName();receive();send("HELLO"+hostName);//握手,成功返回220准备就绪receive();send("Mail From:<"+from +">");//发件人邮箱receive();send("RCPT To:<"+to+">"); //收件人邮箱receive();send(message);//发送邮件内容send(".");receive();send("QUIT");}finally{s.close();}}catch(IOException e){comm.append("Error:"+e);}}//发送private void send(String s){comm.append(s+"\n");out.print(s);out.print("\r\n");out.flush();}//接收private void receive(){comm.append(in.nextLine()+"\n");}public static void main(String[] args) {// TODO Auto-generated method stubnew SendMail();}}



0 0
原创粉丝点击