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>
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>
相关文章推荐
- java网络编程三:基于SMTP的邮件发送客户端
- java网络编程三:基于SMTP的邮件发送客户端
- java网络编程三:基于SMTP的邮件发送客户端
- 基于SMTP的JAVA邮件发送程序!
- 基于SMTP的JAVA邮件发送程序
- 基于SMTP的JAVA邮件发送程序
- 再谈用java实现Smtp发送邮件之Socket编程
- Python简单学习(lecture7)CGI编程、MySQL、网络编程、SMTP发送邮件
- {网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习
- Java网络编程之JavaMail发送邮件和接受邮件
- C# 网络编程之基于SMTP发送电子邮件
- Java网络编程之JavaMail发送邮件和接受邮件
- Java网络编程之JavaMail发送邮件和接受邮件
- java网络编程实现客户端连接服务器端,并发送消息例子(1)。(阻塞式的方法)
- Java网络编程之JavaMail发送邮件和接受邮件
- java网络编程基于TCP的多客户端连接服务器
- C# 网络编程之基于SMTP发送电子邮件
- Java实现基于SMTP发送邮件的工具类
- 【转】javamail-基于SMTP的JAVA邮件发送程序!
- C# 网络编程之基于SMTP发送电子邮件