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

2 篇文章 0 订阅

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(){
		//设置frame
		setSize(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(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				comm.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 stub
new SendMail();
	}

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值