gpt4 book ai didi

java - 错误 java.io.FileNotFoundException 发送电子邮件 RPGLE/Java

转载 作者:行者123 更新时间:2023-12-04 08:47:09 29 4
gpt4 key购买 nike

我正在开发一个使用 的类javax.mail 它只是从我的 接收一些参数AS400 RPGLE 程序并发送一封包含 的电子邮件主题 , 正文 附件 .
在我传递的参数中 路径 服务器( 例如: '\\192.0.0.100\docs\new' )和 姓名 ( 例如: File.pdf )将附加的文件,在这种情况下它是 .pdf 文件。要读取服务器内的文件,我正在使用 进行身份验证SmbFile 路过 , 用户 密码 .
我已经多次测试代码在我的 eclipse 中本地运行它调用我的主类中的方法传递硬编码的参数并成功发送电子邮件,当我在生产中部署我的类时问题开始,我得到一个“ javax.mail.MessagingException: 发送消息时出现 IOException;
嵌套异常为:java.io.FileNotFoundException:\\192.0.0.100\docs\new\File.pdf(名称中的文件或目录不存在。)
”。
有趣的是,当程序调用Transport.send(message); 时出现错误。 , 在发送电子邮件之前,我已经放了一个 if(sFileReader.exists())它不会出错。
我还放置了一些日志来监视通过变量传递的值,它们都是正确的,与我用于本地测试的那些完全相同。也在生产中尝试发送没有附件的电子邮件并且它有效。
你们有什么想法吗?非常感谢。
下面是我的代码示例以及我如何在本地调用我的方法:

public static void main(String[] args) throws Exception {

sendEmail("192.0.0.100", "100", "user", "pwd", "test@email.com",
"test@email.com", "Subject", "Body", "smb://192.0.0.100/doc/new/", "File.PDF",
"domain", "user", "pwd");
}

public static void sendEmail(String server_ip, String server_port, final String username_mail, final String password_mail, String EMAIL_FROM, String list_emails, String subject, String body, String attachment_path, String attachment_name, String domain_attach, String user_attach, String password_attach) throws AddressException, MessagingException {

Session session = null;
Properties properties = null;
MimeMessage message = null;
MimeBodyPart attachmentBodyPart = null, textBodyPart = null;
Multipart multipart = null;
NtlmPasswordAuthentication auth_attach = null;
SmbFile sPathReader = null, sFileReader = null;
DataSource source = null;

properties = System.getProperties();
properties.setProperty("mail.smtp.host", server_ip);
properties.put("mail.smtp.port", server_port);

if(username_mail != "" && password_mail != "") {
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username_mail, password_mail);
}
};
session = Session.getInstance(properties, auth);
}else {
session = Session.getDefaultInstance(properties);
}

try {

// Authenticate to the server
auth_attach = new NtlmPasswordAuthentication(domain_attach, user_attach, password_attach);
sPathReader = new SmbFile(attachment_path, auth_attach);
sFileReader = new SmbFile(sPathReader, attachment_name);

if(sFileReader.exists()) {
message = new MimeMessage(session);
message.setFrom(new InternetAddress(EMAIL_FROM));

message.addRecipient(Message.RecipientType.TO,
new InternetAddress(list_emails));

message.setSubject(subject);

textBodyPart = new MimeBodyPart();

textBodyPart.setText(body);

attachmentBodyPart = new MimeBodyPart();
multipart = new MimeMultipart();
source = new FileDataSource(sFileReader.getUncPath());

attachmentBodyPart.setDataHandler(new DataHandler(source));
attachmentBodyPart.setFileName(attachment_name);

multipart.addBodyPart(textBodyPart);
multipart.addBodyPart(attachmentBodyPart);

message.setContent(multipart);


// Send message
Transport.send(message);
}

} catch (Exception e) {
e.printStackTrace();
}

}

最佳答案

我发现了问题,我的程序对于需要从 Windows 中的服务器获取文件的程序正常工作,但在我的情况下,我使用 RPGLE 程序从 AS400 调用我的类,它有不同的访问方式外部url,路径中需要一个“/QNTC/”,例如“/QNTC/192.0.0.100/docs/test.pdf”,不需要在Java中认证,IBM会做,所以在这种情况下需要包含 URL 的简单字符串。
IBM 有一个很好的文档,关于如何在 IFS 下配置 QNTC 路径。
我希望它可以帮助某人。

关于java - 错误 java.io.FileNotFoundException 发送电子邮件 RPGLE/Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64257839/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com