我无法在 NetBeans 之外发送附件

问题描述 投票:0回答:1

我有一个问题,当我在 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");
    }
}
}
java netbeans gmail
1个回答
0
投票

您正在用

try
/
catch
包装代码 - 很好。

但是您捕获了一个特定的异常

EmailException
,我的猜测是这不会被抛出,因此异常会在其他地方出现。

如果您将

EmailException
更改为
Exception
,我的猜测是您 still 不会发现问题,因为我的猜测是,当您在 NetBeans 环境之外运行代码时,缺少某些依赖项,并且这种情况错误作为
java.lang.Error
的子类抛出 - 可能是
LinkageError
。如果你仔细研究类层次结构,你会发现这些错误并不是
Exception
的子类。

我的建议是更改

try
/
catch
来捕获
Throwable
...错误/异常树中的最高点,然后你就会发现到底发生了什么。

然后您会发现缺少一些依赖项,NetBeans 会为您隐式添加到类路径中。

© www.soinside.com 2019 - 2024. All rights reserved.