我写了一个接收邮件的方法,主要是接收附件,但怎么调也调不通,请给位看看!谢谢了!完整代码如下:public boolean RecevMail(String from,String to ,String adderss,String user,String password,String pop3serv){
boolean isrecev=true;
try{
Properties props = System.getProperties();
Authenticator auth;
props.setProperty("mail.pop.host", pop3serv);
props.setProperty("mail.pop.auth", "true"); Session GetMailSession = Session.getDefaultInstance(props, null); GetMailSession.setDebug(false); Store store = GetMailSession.getStore("pop3");
store.connect(pop3serv,user,password);
Folder folder=store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message[] message=folder.getMessages();
for(int i=0;i<message.length;i++){
String fromPerson=((InternetAddress)message[i].getFrom()[0]).getPersonal();
String fromAddress=((InternetAddress)message[i].getFrom()[0]).getAddress();
String outSubject=message[i].getSubject(); Part MessagePart=message[i];
Object outContent=MessagePart.getContent(); if(outContent instanceof Multipart){
MessagePart=((Multipart)outContent).getBodyPart(0); Multipart mp=(Multipart)message[i].getContent();
for(int j=0;j<mp.getCount();j++){
Part part=mp.getBodyPart(j);
String disposition=part.getDisposition();
if((disposition!=null)&&((disposition.equals(part.ATTACHMENT))||(disposition.equals(part.INLINE)))){
FileOutputStream fostm=new FileOutputStream("d:\\testmail\\"+part.getFileName());
int chunk=part.getSize();
//inpstm.
byte[] buf=new byte[chunk];
InputStream inpstream=part.getInputStream();
inpstream.read(buf);
fostm.write(buf,0,chunk);
fostm.flush();
fostm.close();
inpstream.close(); }
}
}
// message[i].setFlag(Flag.DELETED,true);
}
folder.close(true);
store.close();
}catch(Exception ex){
ex.printStackTrace();
System.out.println(ex.getMessage());
isrecev=false;
} return isrecev;
}
报错:java.lang.NullPointerException: charsetName谢谢各位来看的同志!
boolean isrecev=true;
try{
Properties props = System.getProperties();
Authenticator auth;
props.setProperty("mail.pop.host", pop3serv);
props.setProperty("mail.pop.auth", "true"); Session GetMailSession = Session.getDefaultInstance(props, null); GetMailSession.setDebug(false); Store store = GetMailSession.getStore("pop3");
store.connect(pop3serv,user,password);
Folder folder=store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message[] message=folder.getMessages();
for(int i=0;i<message.length;i++){
String fromPerson=((InternetAddress)message[i].getFrom()[0]).getPersonal();
String fromAddress=((InternetAddress)message[i].getFrom()[0]).getAddress();
String outSubject=message[i].getSubject(); Part MessagePart=message[i];
Object outContent=MessagePart.getContent(); if(outContent instanceof Multipart){
MessagePart=((Multipart)outContent).getBodyPart(0); Multipart mp=(Multipart)message[i].getContent();
for(int j=0;j<mp.getCount();j++){
Part part=mp.getBodyPart(j);
String disposition=part.getDisposition();
if((disposition!=null)&&((disposition.equals(part.ATTACHMENT))||(disposition.equals(part.INLINE)))){
FileOutputStream fostm=new FileOutputStream("d:\\testmail\\"+part.getFileName());
int chunk=part.getSize();
//inpstm.
byte[] buf=new byte[chunk];
InputStream inpstream=part.getInputStream();
inpstream.read(buf);
fostm.write(buf,0,chunk);
fostm.flush();
fostm.close();
inpstream.close(); }
}
}
// message[i].setFlag(Flag.DELETED,true);
}
folder.close(true);
store.close();
}catch(Exception ex){
ex.printStackTrace();
System.out.println(ex.getMessage());
isrecev=false;
} return isrecev;
}
报错:java.lang.NullPointerException: charsetName谢谢各位来看的同志!
解决方案 »
- keypress中按下键没反应
- 我在学习SWT,输出Jar之后执行不正常,窗口闪一下就没了,各位前辈指点……
- java中 符号 | 是什么意思?麻烦解释一下.
- 关于JTree展开事件的问题
- 这样运行java程序怎么就错了????
- 如何让swing中的JOptionDialog弹出的对话框显示的是YES 而不是“确定”
- 哪里有有关JUNIT的中文资料啊?顺便给大家散散分,过年了吗?高兴
- 高分:為什麼用smtp.163.net服務器,不能發給smtp.163.com的郵箱用戶,要怎麼做才行
- 为什么在不同的环境中,下面的程序有时对,有时错!
- Java的File类中getAbsoluteFile()与getAbsolutePath()这两个方法的区别到底是什么?
- CLOB字段的读取
- 在java中用什么容器可以打开象doc,txt,pdf,gif,jpg等文件格式对应的应用程序?
但是我觉得你可以对异常捕获一下,然后打印一下堆栈信息,这样至少能看出在程序的什么地方发生了错误。然后再分析为什么发生这样的错误,是不是传入的参数正确等等。你这里是发生了空指针,那就可以找找什么地方用到charsetName了,是不是没对它进行初始化等等。要学着自己调试程序。
给你个代码
void jButton6_actionPerformed(ActionEvent e) {
try
{//该程序为接受带有附件的邮件的代码
Properties props = System.getProperties();
Authenticator auth = new Email_Autherticator();
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props,auth); //建立session
Store store = session.getStore("pop3");
store.connect(host,username,password);
//After connecting to the Store,you can get a Folder,which must be opened before you can read messages from it:
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message message[] = folder.getMessages();
for (int i=0,n=message.length;i<n;i++)//可能有多个邮件,所以用循环
{
//获得邮件的部分信息,如头部信息,送信人的署名,送信人的邮件地址
String out_from_person = ((InternetAddress)message[i].getFrom()[0]).getPersonal();
String out_from_address = ((InternetAddress)message[i].getFrom()[0]).getAddress();
System.out.println("From:"+out_from_person+"\t");
System.out.println("Address:"+out_from_address+"\t");
String out_subject = message[i].getSubject();
System.out.println("Subject:"+out_subject+"\t");
//以下代码用来获取邮件的主体信息
Part messagePart = message[i];
Object out_content = messagePart.getContent();
if (out_content instanceof Multipart)
{
messagePart = ((Multipart)out_content).getBodyPart(0);
System.out.println("[ Multipart Message ]");
}
String out_content_type = messagePart.getContentType();
System.out.println("CONTENT:"+out_content_type);
if (out_content_type.startsWith("text/plain") ¦ ¦ out_content_type.startsWith("text/html"))
{
InputStream ipstm = messagePart.getInputStream();
BufferedReader bufreader = new BufferedReader(new InputStreamReader(ipstm));
String thisLine = bufreader.readLine();
while (thisLine != null)
{
System.out.println("thisLine: "+thisLine);
thisLine = bufreader.readLine();
}
}
//获取附件
Multipart mp = (Multipart)message[i].getContent();
for (int j=0,m=mp.getCount();j<m;j++)
{
System.out.println("***"+m+"***");
Part part = mp.getBodyPart(j);
String disposition = part.getDisposition();
if ((disposition != null) && ((disposition.equals(part.ATTACHMENT)) ¦ ¦ (disposition.equals(part.INLINE))))
{
//以下代码将获得的附件保存到当前目录下,以part.getFileName()为文件名,也既是附件的名称。
File filename = new File(part.getFileName());
for (int k=0;filename.exists();k++)
{
filename = new File(part.getFileName()+k);
}
FileOutputStream myFileoutputstream = new FileOutputStream(filename);
int chunk = part.getSize();//获得附件的大小,不一定很准确。
byte [] buffer = new byte[chunk];
InputStream instream = part.getInputStream();
instream.read(buffer,0,chunk);
myFileoutputstream.write(buffer,0,chunk);
instream.close();
myFileoutputstream.close();
}
}
System.out.println("------------------------------------------------------------");
message[i].setFlag(Flags.Flag.DELETED,true);
}
folder.close(true);
store.close();//关闭
}
catch(Exception ej2)
{
System.out.println(ej2);
}
}
取名字时,字符集有问题.
import javax.mail.internet.*;
import java.util.*;
import java.io.*;
import javax.mail.internet.MimeMessage;/**
* 带口令验证的邮件接收类.
*/
public class Receive1{/**
* Main 方法
*/
public static void main(String args[]){
try{
String popServer="pop3.163.com";
String popUser= null;
String popPassword= null;
receive(popServer, popUser, popPassword);
}
catch (Exception ex){
System.out.println("Usage: java com.lotontech.mail.Authenticator.Receive" +" popServer popUser popPassword");
}
System.exit(0);
}
public static void receive(String popServer, String popUser , String popPassword){
Store store=null;
Folder folder=null;
try{
Properties props = System.getProperties();
Session session = Session.getDefaultInstance(props, new MailAuthenticator());
store = session.getStore("pop3");
store.connect(popServer, null, null);
folder = store.getDefaultFolder();
if (folder == null) throw new Exception("No default folder");
folder = folder.getFolder("INBOX");
if (folder == null) throw new Exception("No POP3 INBOX");
folder.open(Folder.READ_ONLY);
Message[] msgs = folder.getMessages();
for (int msgNum = 0; msgNum < msgs.length; msgNum++)
{
printMessage(msgs[msgNum]);
}
}
catch (Exception ex){
ex.printStackTrace();
}
finally{
try{
if (folder!=null) folder.close(false);
if (store!=null) store.close();
}
catch (Exception ex2) {ex2.printStackTrace();}
}
}
/**
* "printMessage()" 打印方法.
*/
public static void printMessage(Message message){
try{
String from=((InternetAddress)message.getFrom()[0]).getPersonal();
if (from==null) from=((InternetAddress)message.getFrom()[0]).getAddress();
System.out.println("FROM: "+from);
String subject=message.getSubject();
System.out.println("SUBJECT: "+subject);
Part messagePart=message;
Object content=messagePart.getContent();
if (content instanceof Multipart)
{
messagePart=((Multipart)content).getBodyPart(0);
System.out.println("这封邮件有附件 ]");
//获取附件
Multipart mp = (Multipart)message.getContent();
for (int j=0,m=mp.getCount();j<m;j++)
{
System.out.println("***"+m+"***");
Part part = mp.getBodyPart(j);
String disposition = part.getDisposition();
if ((disposition != null) && ((disposition.equals(part.ATTACHMENT)) || (disposition.equals(part.INLINE)))) for (int k=0;filename.exists();k++)
{
filename = new File(part.getFileName()+k);
}
} }
String contentType=messagePart.getContentType();
System.out.println("CONTENT:"+contentType);
if (contentType.startsWith("text/plain") || contentType.startsWith("text/html"))
{
InputStream is = messagePart.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
String thisLine=reader.readLine();
while (thisLine!=null)
{
System.out.println(thisLine);
thisLine=reader.readLine();
}
}
System.out.println("--------------END------------------");
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
FileOutputStream myFileoutputstream = new FileOutputStream(filename);
int chunk = part.getSize();//获得附件的大小,不一定很准确。
byte [] buffer = new byte[chunk];
InputStream instream = part.getInputStream();
instream.read(buffer,0,chunk);
myFileoutputstream.write(buffer,0,chunk);
instream.close();
myFileoutputstream.close();
这段代码是什么意思啊,为什么我添加后,每接收一封邮件凡是判断为有附件的就出现这样的错误提示:java.lang.NullPointerException....