带附件的收信的例子:import javax.mail.*; import javax.mail.internet.*; import java.io.*; import java.util.*;public class HelloWorldPOPA { static int attachnum = 1; public static void main(String args[]) { try { String host="xxx.xxx.xxx.xxx"; String user="xxxxxx"; String password="xxxxxx"; Session session = Session.getDefaultInstance(System.getProperties(), null); Store store = session.getStore("pop3"); store.connect(host, -1, user, password); Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); int totalMessages = folder.getMessageCount(); if (totalMessages == 0) { System.out.println("没有邮件"); folder.close(false); store.close(); return; } Message[] messages = folder.getMessages(); for (int i = 0; i < messages.length; i++) { dumpPart(messages[i]); } folder.close(false); store.close(); } catch (Exception e) { e.printStackTrace(); } } public static void dumpPart(Part p) throws Exception { String html = ""; boolean attachment = false; if (p instanceof Message) { showMessage((Message)p); } if (p.isMimeType("text/plain")) { System.out.println("内容:\n" + p.getContent()); } else if (p.isMimeType("multipart/*")) { Multipart mp = (Multipart)p.getContent(); int count = mp.getCount(); for (int i = 0; i < count; i++) { dumpPart(mp.getBodyPart(i)); } } else if (p.isMimeType("message/rfc822")) { dumpPart((Part)p.getContent()); } else if (p.isMimeType("text/html")) { html = ".html"; attachment = true; } else { attachment = true; } if (attachment) { String disp = p.getDisposition(); if (disp == null || disp.equalsIgnoreCase(Part.ATTACHMENT)) { String filename = p.getFileName(); if (filename!=null) { filename = MimeUtility.decodeText(filename); } else { filename = "附件" + attachnum++ + html; } try { File f = new File(filename); if (f.exists()) { throw new IOException("有同名的文件存在"); } OutputStream os = new BufferedOutputStream(new FileOutputStream(f)); InputStream is = p.getInputStream(); int c; while ((c = is.read()) != -1) { os.write(c); } os.close(); System.out.println("保存为" + filename + "。"); } catch (IOException e) { System.out.println("附件保存失败" + e); } } } } public static void showMessage(Message m) throws Exception { Address[] a; if ((a = m.getFrom())!=null) { for (int j = 0; j < a.length; j++) { System.out.println("送信人: " + MimeUtility.decodeText(a[j].toString())); } } if ((a = m.getRecipients(Message.RecipientType.TO))!=null) { for (int j = 0; j < a.length; j++) { System.out.println("收信人: " + MimeUtility.decodeText(a[j].toString())); } } System.out.println("主体: " + m.getSubject()); Date d = m.getSentDate(); System.out.println("日期: " + (d!= null ? d.toString() : "不明")); System.out.println("大小: " + m.getSize()); } }
TO Croatia(Croatia) 还有一个问题,邮件我想直接进行转发?怎么做? 我又开了一个帖子,你可以去那里回答,200分都给你!
TO Croatia(Croatia) 1.用你的接收邮件程序 Message[] messages = folder.getMessages(); for (int i = 0; i < messages.length; i++) { messages[i]是每一封邮件的内容 } 2.发邮件的时候是用MimeMessage类 所以我就把messages转换成MimeMessage然后进行转发 Message[] messages = folder.getMessages(); for (int i = 0; i < messages.length; i++) { MimeMessage mimeMessage = (MimeMessage)messages[i]; mimeMessage.setRecipients(Message.RecipientType.TO,"[email protected]"); Transport.send(mimeMessage); } 但是总报错 javax.mail.IllegalWriteException: POP3 messages are read-only at com.sun.mail.pop3.POP3Message.saveChanges(POP3Message.java:380) at javax.mail.Transport.send(Transport.java:80) at Tenso.<init>(Tenso.java:53) at Tenso.main(Tenso.java:8)
import java.util.Properties;
import java.util.Date;
import javax.mail.Session;
import javax.mail.Message;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.InternetAddress;public class HelloWorldJavaMail {
public static void main(String[] args) {
try {
Properties props = System.getProperties();
props.put("mail.smtp.host","xxx.xxx.xxx.xxx");
Session session=Session.getDefaultInstance(props,null);
MimeMessage mimeMessage=new MimeMessage(session);
mimeMessage.setFrom(new InternetAddress("[email protected]","姓名","gb2312"));
mimeMessage.setRecipients(Message.RecipientType.TO,"[email protected]");
mimeMessage.setSubject("Hello World JavaMail","gb2312");
mimeMessage.setText("<h1>Hello World JavaMail</h1>","gb2312");
mimeMessage.setHeader("Content-Type","text/html");
mimeMessage.setSentDate(new Date());
Transport.send(mimeMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
}2。收信
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;public class HelloWorldPOP {
public static void main(String args[]) {
try {
String host="xxx.xxx.xxx.xxx";
String user="xxxxxx";
String password="xxxxxx"; Session session = Session.getDefaultInstance(System.getProperties(), null);
Store store = session.getStore("pop3");
store.connect(host, -1, user, password); Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY); int totalMessages = folder.getMessageCount();
if (totalMessages == 0) {
System.out.println("没有邮件");
folder.close(false);
store.close();
return;
} Message[] messages = folder.getMessages();
for (int i = 0; i < messages.length; i++) {
showMessage(messages[i]);
} folder.close(false);
store.close();
} catch (Exception e) {
e.printStackTrace();
}
} public static void showMessage(Message m) throws Exception {
Address[] a;
if ((a = m.getFrom())!=null) {
for (int j = 0; j < a.length; j++) {
System.out.println("送信人: " + MimeUtility.decodeText(a[j].toString()));
}
} if ((a = m.getRecipients(Message.RecipientType.TO))!=null) {
for (int j = 0; j < a.length; j++) {
System.out.println("收信人: " + MimeUtility.decodeText(a[j].toString()));
}
} System.out.println("主体: " + m.getSubject());
Date d = m.getSentDate();
System.out.println("日期: " + (d!= null ? d.toString() : "不明"));
System.out.println("大小: " + m.getSize());
System.out.println("内容:\n" + m.getContent());
}
}
用JAVAMAIL很容易实现的。参照:
http://java.sun.com/products/javamail/
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;public class HelloWorldSendFile {
public static void main(String[] args) {
try {
Properties props = System.getProperties();
props.put("mail.smtp.host", "xxx.xxx.xxx.xxx");
Session session = Session.getDefaultInstance(props, null);
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setFrom(new InternetAddress("[email protected]","姓名","gb2312"));
mimeMessage.setRecipients(Message.RecipientType.TO, "[email protected]");
mimeMessage.setSubject("SendMail附件!" , "gb2312"); MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText("SendMail追加附件" , "gb2312"); MimeBodyPart mbp2 = new MimeBodyPart();
FileDataSource fds = new FileDataSource("helloworld.txt");
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(MimeUtility.encodeWord(fds.getName())); Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2); mimeMessage.setContent(mp); mimeMessage.setSentDate(new Date());
Transport.send(mimeMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
}
import javax.mail.internet.*;
import java.io.*;
import java.util.*;public class HelloWorldPOPA {
static int attachnum = 1; public static void main(String args[]) {
try {
String host="xxx.xxx.xxx.xxx";
String user="xxxxxx";
String password="xxxxxx"; Session session = Session.getDefaultInstance(System.getProperties(), null);
Store store = session.getStore("pop3");
store.connect(host, -1, user, password); Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY); int totalMessages = folder.getMessageCount();
if (totalMessages == 0) {
System.out.println("没有邮件");
folder.close(false);
store.close();
return;
} Message[] messages = folder.getMessages();
for (int i = 0; i < messages.length; i++) {
dumpPart(messages[i]);
} folder.close(false);
store.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void dumpPart(Part p) throws Exception {
String html = "";
boolean attachment = false; if (p instanceof Message) {
showMessage((Message)p);
} if (p.isMimeType("text/plain")) {
System.out.println("内容:\n" + p.getContent());
} else if (p.isMimeType("multipart/*")) {
Multipart mp = (Multipart)p.getContent();
int count = mp.getCount();
for (int i = 0; i < count; i++) {
dumpPart(mp.getBodyPart(i));
}
} else if (p.isMimeType("message/rfc822")) {
dumpPart((Part)p.getContent());
} else if (p.isMimeType("text/html")) {
html = ".html";
attachment = true;
} else {
attachment = true;
} if (attachment) {
String disp = p.getDisposition();
if (disp == null || disp.equalsIgnoreCase(Part.ATTACHMENT)) {
String filename = p.getFileName();
if (filename!=null) {
filename = MimeUtility.decodeText(filename);
} else {
filename = "附件" + attachnum++ + html;
}
try {
File f = new File(filename);
if (f.exists()) {
throw new IOException("有同名的文件存在");
}
OutputStream os = new BufferedOutputStream(new FileOutputStream(f));
InputStream is = p.getInputStream();
int c;
while ((c = is.read()) != -1) {
os.write(c);
}
os.close();
System.out.println("保存为" + filename + "。");
} catch (IOException e) {
System.out.println("附件保存失败" + e);
}
}
}
} public static void showMessage(Message m) throws Exception {
Address[] a;
if ((a = m.getFrom())!=null) {
for (int j = 0; j < a.length; j++) {
System.out.println("送信人: " + MimeUtility.decodeText(a[j].toString()));
}
} if ((a = m.getRecipients(Message.RecipientType.TO))!=null) {
for (int j = 0; j < a.length; j++) {
System.out.println("收信人: " + MimeUtility.decodeText(a[j].toString()));
}
} System.out.println("主体: " + m.getSubject());
Date d = m.getSentDate();
System.out.println("日期: " + (d!= null ? d.toString() : "不明"));
System.out.println("大小: " + m.getSize());
}
}
还有一个问题,邮件我想直接进行转发?怎么做?
我又开了一个帖子,你可以去那里回答,200分都给你!
1.用你的接收邮件程序
Message[] messages = folder.getMessages();
for (int i = 0; i < messages.length; i++) {
messages[i]是每一封邮件的内容
}
2.发邮件的时候是用MimeMessage类
所以我就把messages转换成MimeMessage然后进行转发
Message[] messages = folder.getMessages();
for (int i = 0; i < messages.length; i++) {
MimeMessage mimeMessage = (MimeMessage)messages[i];
mimeMessage.setRecipients(Message.RecipientType.TO,"[email protected]");
Transport.send(mimeMessage);
}
但是总报错
javax.mail.IllegalWriteException: POP3 messages are read-only
at com.sun.mail.pop3.POP3Message.saveChanges(POP3Message.java:380)
at javax.mail.Transport.send(Transport.java:80)
at Tenso.<init>(Tenso.java:53)
at Tenso.main(Tenso.java:8)
folder.open(Folder.READ_WRITE);
也改成可读写了,还是不可以阿
直接转发,不知道能不能做到?
是呀,所以我用了For循环,一个一个的解析呀。第二个问题:
我明白你的意思了.假如你想通过Java程序来转发的话,就应该读到原来的Mail,然后发出去.应该有两个过程,解析Mail,送信。
我觉得可以做到的。但是我认为应该用2个Session可能比较好。一个解析,一个送信。
手头没有测试环境,你需要自己测试了。还不行的话,告诉我一下,我再来看一下。你这样的要求们有意思的。一般的情况下,我肯定是设置Mail系统的。
用POP3,删除的时候,messages.setFlag(Flags.Flag.DELETED,true);
//messages.saveChanges();这句话不需要,直接关闭就可以了.有这句话,反而有错.
folder.close(true);还有,假如出错的话,改成folder.open(Folder.READ_WRITE);就可以了。我看了我原来写的,就是这个样子的。