我有一个问题,当我在 NetBeans 内通过 Gmail 发送附件时,程序可以正常工作并发送消息,但是当我尝试从 NetBeans 运行 jar 文件时,程序不显示以下对话框:打印数字 3。 这意味着问题是从这一行开始的 MultiPartEmail 电子邮件 = new MultiPartEmail(); 程序保持执行状态,不会引发异常或打印数字 3。
知道该程序使用了多个库,所有这些库都可以从 jar 文件中正常工作。
我还尝试了一个库javax-mail.jar。我遇到了同样的问题,因为该程序在 NetBeans 中运行良好,但 jar 文件仅在发送消息时不起作用。
这是我的完整课程代码:
package FTPEmail;
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import java.io.IOException;
public class SendAttachment {
public SendAttachment(String attachment, String subject, String msg) throws IOException {
final String sender = "[email protected]";
final String receiver = "[email protected]";
final String password = "abc123abc123abc1";
Tools.Text.dialogErrorNumber("1");
try {
EmailAttachment emailAttachment = new EmailAttachment();
emailAttachment.setPath(attachment);
emailAttachment.setDisposition(EmailAttachment.ATTACHMENT);
emailAttachment.setDescription("Attachment");
Tools.Text.dialogErrorNumber("2");
MultiPartEmail email = new MultiPartEmail();
Tools.Text.dialogErrorNumber("3");
email.setHostName("smtp.gmail.com");
Tools.Text.dialogErrorNumber("4");
email.setSmtpPort(465);
Tools.Text.dialogErrorNumber("5");
email.setAuthenticator(new DefaultAuthenticator(sender, password));
Tools.Text.dialogErrorNumber("6");
email.setSSLOnConnect(true);
Tools.Text.dialogErrorNumber("7");
email.addTo(receiver);
Tools.Text.dialogErrorNumber("8");
email.setFrom(sender);
Tools.Text.dialogErrorNumber("9");
email.setSubject(subject);
Tools.Text.dialogErrorNumber("10");
email.setMsg(msg);
Tools.Text.dialogErrorNumber("11");
// attach the file
email.attach(emailAttachment);
Tools.Text.dialogErrorNumber("12");
// send the email
email.send();
} catch (EmailException e) {
Tools.Text.dialogErrorNumber(e.getMessage());
Tools.Text.dialogErrorNumber("0060");
}
}
}
您正在用
try
/catch
包装代码 - 很好。
但是您捕获了一个特定的异常
EmailException
,我的猜测是这不会被抛出,因此异常会在其他地方出现。
如果您将
EmailException
更改为 Exception
,我的猜测是您 still 不会发现问题,因为我的猜测是,当您在 NetBeans 环境之外运行代码时,缺少某些依赖项,并且这种情况错误作为 java.lang.Error
的子类抛出 - 可能是 LinkageError
。如果你仔细研究类层次结构,你会发现这些错误并不是Exception
的子类。
我的建议是更改
try
/catch
来捕获 Throwable
...错误/异常树中的最高点,然后你就会发现到底发生了什么。
然后您会发现缺少一些依赖项,NetBeans 会为您隐式添加到类路径中。