大二下半学期的作品,因为大二下课程多(有七八门),做的比较赶,还请见谅。
发送邮件主要使用的是 java.net.Socket 包, 而接收邮件则是用javax.mail 包,界面使用的是WindowBuilder制作
SMTP.java
package Mail;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.Socket;
import java.io.InputStream;
import java.io.OutputStream;
import javax.swing.JOptionPane;
import Decoder.BASE64Encoder;
public class SMTP {
public static void postMail() {
//public static void main(String[] args) {
//
String sender = Basic.user;
String receiver=SMTPtemp.receiver;
String content=SMTPtemp.content;
String subject=SMTPtemp.subject;
String password = Basic.pass;
String server=Server.smtp;
int sport=Server.sport;
String user = new BASE64Encoder().encode(sender.substring(0, sender.indexOf("@")).getBytes());
String pass = new BASE64Encoder().encode(password.getBytes());
String message="";
try {
Socket socket = new Socket(server, sport);
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter writter = new PrintWriter(outputStream, true);
message=reader.readLine();
//System.out.println(message);
//HELO
writter.println("HELO huan");
message=reader.readLine();
//System.out.println(message);
//AUTH LOGIN
writter.println("auth login");
message=reader.readLine();
//System.out.println(message);
writter.println(user);
message=reader.readLine();
//System.out.println(message);
writter.println(pass);
message=reader.readLine();
//System.out.println(message);
//Above Authentication successful <pre name="code" class="java">
writter.println("mail from:<" + sender +">");
message=reader.readLine();
//System.out.println(message);
writter.println("rcpt to:<" + receiver +">");
message=reader.readLine();
//System.out.println(message);
//Set data
writter.println("data");
message=reader.readLine();
//System.out.println(message);
writter.println("subject:"+subject);
writter.println("from:" + sender);
writter.println("to:" + receiver);
writter.println("Content-Type: text/plain;charset=\"gb2312\"");
writter.println();
writter.println(content);
writter.println(".");
writter.println("");
message=reader.readLine();
// System.out.println(message);
//Say GoodBye
writter.println("rset");
message=reader.readLine();
//System.out.println(message);
writter.println("quit");
message=reader.readLine();
// System.out.println(message);
socket.close();
JOptionPane.showMessageDialog(null,"发送成功");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "失败"+message, "发送错误", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
}
}
POP3.java
package Mail;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
public class POP3 {
/**
* 获取邮件内容
* @param args
* @throws Exception
*/
static String server=Server.pop3;
static String password = Basic.pass;
static String user = Basic.user;
static String[] title3={"序号","发件人","主题","日期"};
static String content="";
int sport=Server.sport;
//获取邮件头
public static String[][] POP3Title() throws Exception {
Properties props=new Properties();
//设置邮件接收协议为pop3
props.setProperty("mail.store.protocol", "pop3");
props.setProperty("mail.pop3.host", server);
Session session = Session.getInstance(props);
Store store = session.getStore("pop3");
//连接要获取数据的邮箱 主机+用户名+密码
store.connect(server, user, password);
Folder folder = store.getFolder("inbox");
//设置邮件可读可写
folder.open(Folder.READ_WRITE);
// int a;
Message[] messages = folder.getMessages();
String[][] content=new String[messages.length][title3.length];
//a=messages.length;
//
for (int i = 0; i < messages.length; i++) {
content[i][0]=String.valueOf(i+1);
//解析发件人地址
String temp = messages[i].getFrom()[0].toString();
String address="";
if(temp.contains("<"))
{
address=temp.substring(address.indexOf("<")+1,address.indexOf(">")+1);
}
else
{
address=temp;
}
content[i][1]=temp;
//解析邮件主题
String subject = messages[i].getSubject();
content[i][2]=subject;
//获取时间
String date=(new SimpleDateFormat("yyy-MM-dd")).format(messages[i].getSentDate());
content[i][3]=date;
//解析综合数据情况
}
folder.close(true);
store.close();
return content;
}
//获取邮件内容
public static String POP3Content(String id) throws Exception {
Properties props=new Properties();
//设置邮件接收协议为pop3
props.setProperty("mail.store.protocol", "pop3");
props.setProperty("mail.pop3.host", server);
Session session = Session.getInstance(props);
Store store = session.getStore("pop3");
//连接要获取数据的邮箱 主机+用户名+密码
store.connect(server, user, password);
Folder folder = store.getFolder("inbox");
//设置邮件可读可写
folder.open(Folder.READ_WRITE);
Message[] messages = folder.getMessages();
int i=Integer.parseInt(id);
getAllMultipart(messages[i]); ///////////////
folder.close(true);
store.close();
return content;
}
/**
* 解析综合数据
* @param part
* @throws Exception
*/
private static void getAllMultipart(Part part) throws Exception{ ////////////
String contentType = part.getContentType();
int index = contentType.indexOf("name");
boolean conName = false;
if(index!=-1){
conName=true;
}
//判断part类型
if(part.isMimeType("text/plain") && ! conName) {
content+=(String) part.getContent();
//System.out.println((String) part.getContent());
}else if (part.isMimeType("text/html") && ! conName) {
content+=(String) part.getContent();
//System.out.println((String) part.getContent());
}else if (part.isMimeType("multipart/*")) {
Multipart multipart = (Multipart) part.getContent();
int counts = multipart.getCount();
for (int i = 0; i < counts; i++) {
//递归获取数据
getAllMultipart(multipart.getBodyPart(i));
//附件可能是截图或上传的(图片或其他数据)
if (multipart.getBodyPart(i).getDisposition() != null) {
//附件为截图
if (multipart.getBodyPart(i).isMimeType("image/*")) {
InputStream is = multipart.getBodyPart(i)
.getInputStream();
String name = multipart.getBodyPart(i).getFileName();
String fileName;
//截图图片
if(name.startsWith("=?")){
fileName = name.substring(name.lastIndexOf(".") - 1,name.lastIndexOf("?="));
}else{
//上传图片
fileName = name;
}
FileOutputStream fos = new FileOutputStream("D:\\"
+ fileName);
int len = 0;
byte[] bys = new byte[1024];
while ((len = is.read(bys)) != -1) {
fos.write(bys,0,len);
}
fos.close();
} else {
//其他附件
InputStream is = multipart.getBodyPart(i)
.getInputStream();
String name = multipart.getBodyPart(i).getFileName();
FileOutputStream fos = new FileOutputStream("D:\\"
+ name);
int len = 0;
byte[] bys = new byte[1024];
while ((len = is.read(bys)) != -1) {
fos.write(bys,0,len);
}
fos.close();
}
}
}
}else if (part.isMimeType("message/rfc822")) {
getAllMultipart((Part) part.getContent());
}
}
}