您的位置:首页 > 理论基础 > 计算机网络

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

2011-11-01 09:00 716 查看
1、SMTP简介







2、发送过程



3、源代码示例

view
plain

<span style="font-size:16px;">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();

}

}

</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: