Я разрабатываю класс, который использует javax.mail, который просто получает некоторые параметры из моей программы AS400 RPGLE и отправляет электронное письмо, содержащее Subject. , Основная часть и Вложение.
В параметрах я передаю путь сервера (пример: '\\192.0.0.100\docs\new') и имя (пример: File.pdf) файла, который будет присоединен, в данном случае это файл .pdf. Чтобы прочитать файл внутри сервера, я аутентифицируюсь с помощью SmbFile, передавая домен, пользователя и пароль.
Я тестировал код несколько раз, запуская его локально в своем затмении, вызывая метод из моего основного класса, передавая жестко закодированные параметры, и он успешно отправляет электронное письмо, проблема начинается, когда я развертываю свой класс в производстве, я получаю 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", "[email protected]",
"[email protected]", "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();
}
}