使用javamail阅读邮件时出现异常
我正在尝试实现接收邮件的代码,但是我得到了使用javamail阅读邮件时出现异常,java,jakarta-mail,netbeans-7,Java,Jakarta Mail,Netbeans 7,我正在尝试实现接收邮件的代码,但是我得到了NullPointerException。 接收从“Settings.java”程序调用的代码的方法是“connect()”,它位于“EmailClient.java”程序中。 身份验证工作成功,但当我尝试将消息头放在向量或数组中时,会出现异常 Settings.java public class Settings extends javax.swing.JFrame { public String uname; public Stri
NullPointerException
。
接收从“Settings.java”程序调用的代码的方法是“connect()”,它位于“EmailClient.java”程序中。
身份验证工作成功,但当我尝试将消息头放在向量或数组中时,会出现异常
Settings.java
public class Settings extends javax.swing.JFrame {
public String uname;
public String pass;
public String smtpserver;
public String port;
Object item, item2;
EmailClient ec;
public Settings() {
initComponents();
}
public String getUname() {
return uname;
}
public String getPass() {
return pass;
}
public String getSmtpserver() {
return smtpserver;
}
public String getPort() {
return port;
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
uname = jTextField1.getText();
pass = jPasswordField1.getText();
item = jComboBox1.getSelectedItem();
smtpserver = (String) item;
item2 = jComboBox2.getSelectedItem();
port = (String) item2;
if (uname.equals("") || pass.equals("") || smtpserver.equals("") || port.equals("")) {
JOptionPane.showMessageDialog(this, "All Fields are mandatory");
}
ec = new EmailClient();
ec.connect(uname, pass);
setVisible(false);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Settings().setVisible(false);
}
});
}
EmailClient.java
public class EmailClient extends javax.swing.JFrame {
Settings set = new Settings();
SendMail sm = new SendMail(set);
Vector vdate, vsubject, vmessage, vfrom;
ArrayList adate, asubject, amessage, afrom;
String[] date;
String[] subject;
String[] frm;
String[] mess;
Properties props = null;
private Session session = null;
private Store store = null;
private Folder inbox = null;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
sm.setVisible(true);
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
set.setVisible(true);
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
public void connect(String user, String pass) {
final String password = pass;
final String username = user;
try {
props = new Properties();
props.setProperty("mail.host", "imap.gmail.com");
props.setProperty("mail.port", "995");
props.setProperty("mail.transport.protocol", "imaps");
session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
);
store = session.getStore("imaps");
store.connect();
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
Message messages[] = inbox.search(new FlagTerm(
new Flags(Flags.Flag.SEEN), true));
for (int i = 0; i < messages.length; i++) {
Message message = messages[i];
Address[] from = message.getFrom();
frm[i] = "" + from[0];//Here is the exception
date[i] = "" + message.getSentDate();
Multipart mp = (Multipart) message.getContent();
BodyPart bp = mp.getBodyPart(0);
mess[i] = "" + bp.getContent();
subject[i] = "" + message.getSubject().toString();
}
} catch (Exception mex) {
mex.printStackTrace();
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new EmailClient().setVisible(true);
}
});
}
与
但这不是我想要的
错误是
run:
java.lang.NullPointerException
at sendemail.EmailClient.connect(EmailClient.java:321)
at sendemail.Settings.jButton1ActionPerformed(Settings.java:176)
at sendemail.Settings.access$000(Settings.java:25)
at sendemail.Settings$1.actionPerformed(Settings.java:90)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD SUCCESSFUL (total time: 1 minute 42 seconds)
您从未为frm阵列分配过任何空间。您声明了指向数组的指针,但必须分配数组。frm=新字符串[某物] 这里有一个固定(但不是最佳)版本:
import java.util.Properties;
导入javax.mail.Address;
导入javax.mail.BodyPart;
导入javax.mail.Flags;
导入javax.mail.Folder;
导入javax.mail.Message;
导入javax.mail.Multipart;
导入javax.mail.Session;
导入javax.mail.Store;
导入javax.mail.search.FlagTerm;
公共类GmailTest{
私有会话=null;
私有属性props=null;
私有存储=空;
私人文件夹收件箱=空;
私有字符串[]日期;
私有字符串[]主题;
私有字符串[]frm;
私人字符串[]混乱;
公共静态void main(字符串[]args){
新建GmailTest().connect(“用户”、“pwd”);
}
公共void连接(字符串用户、字符串传递){
试一试{
props=新属性();
setProperty(“mail.imaps.host”、“imap.gmail.com”);
props.setProperty(“mail.imaps.port”、“993”);
props.setProperty(“mail.store.protocol”、“imaps”);
session=session.getInstance(道具);
store=session.getStore(“imaps”);
存储.连接(用户,通行证);
收件箱=store.getFolder(“收件箱”);
收件箱。打开(文件夹。只读);
messages[]=inbox.search(新的FlagTerm(新的标志(Flags.Flag.SEEN),true));
//如Makoto所说初始化数组
日期=新字符串[messages.length];
主题=新字符串[messages.length];
frm=新字符串[messages.length];
mess=新字符串[messages.length];
for(int i=0;i
某些内容为空,您正在对其调用一个方法。如果突出显示第321行的内容,则更容易分离出该内容。
System.out.println("From : " + from[0]);
run:
java.lang.NullPointerException
at sendemail.EmailClient.connect(EmailClient.java:321)
at sendemail.Settings.jButton1ActionPerformed(Settings.java:176)
at sendemail.Settings.access$000(Settings.java:25)
at sendemail.Settings$1.actionPerformed(Settings.java:90)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD SUCCESSFUL (total time: 1 minute 42 seconds)
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.search.FlagTerm;
public class GmailTest {
private Session session = null;
private Properties props = null;
private Store store = null;
private Folder inbox = null;
private String[] date;
private String[] subject;
private String[] frm;
private String[] mess;
public static void main(String[] args) {
new GmailTest().connect("user", "pwd");
}
public void connect(String user, String pass) {
try {
props = new Properties();
props.setProperty("mail.imaps.host", "imap.gmail.com");
props.setProperty("mail.imaps.port", "993");
props.setProperty("mail.store.protocol", "imaps");
session = Session.getInstance(props);
store = session.getStore("imaps");
store.connect(user, pass);
inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
Message messages[] = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), true));
//initialise arrays as Makoto says
date = new String[messages.length];
subject = new String[messages.length];
frm = new String[messages.length];
mess = new String[messages.length];
for (int i = 0; i < messages.length; i++) {
Message message = messages[i];
Address[] from = message.getFrom();
frm[i] = "" + from[0];// Here *was* the exception
date[i] = "" + message.getSentDate();
Multipart mp = (Multipart) message.getContent();
BodyPart bp = mp.getBodyPart(0);
mess[i] = "" + bp.getContent();
subject[i] = "" + message.getSubject().toString();
}
} catch (Exception mex) {
mex.printStackTrace();
} finally {
close(store);
close(inbox);
}
}
public static void close(final Folder folder) {
try {
if (folder != null && folder.isOpen()) {
folder.close(false);
}
} catch (final Exception e) {
// ignore
}
}
public static void close(final Store store) {
try {
if (store != null && store.isConnected()) {
store.close();
}
} catch (final Exception e) {
// ignore
}
}
}