现在的位置: 首页 > 综合 > 正文

java网络编程三:基于SMTP的邮件发送客户端

2013年09月10日 ⁄ 综合 ⁄ 共 2221字 ⁄ 字号 评论关闭

1、SMTP简介

2、发送过程

3、源代码示例

package demo.net;

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);
		setVisible(true);
		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);

		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);

		// 给发送按钮注册监听器
		sendButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				comm.setText("");
				sendMail(server.getText().trim(), from.getText().trim(), to
						.getText().trim(), message.getText());
			}
		});
	}

	// 发送邮件
	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("DATA");//表示开始发邮件内容了
				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) {
		new SendMail();
	}
}


 

抱歉!评论已关闭.