#java #jakarta-mail
#java #джакарта-почта
Вопрос:
Я пытаюсь создать электронное письмо с помощью javamail, куда я могу прикрепить много файлов, а также настроить основное сообщение, пункт назначения и множество параметров… в конце я сохраняю это электронное письмо во временном файле, чтобы использовать его в Outlook 2016, где теперь я могу открыть Outlook и передать файл eml с помощью командной строки Outlook с помощью switch / eml. Проблема заключается в попытке прикрепить один файл к Outlook с помощью переключателя / a, я вижу подпись в нижнем колонтитуле основного сообщения, но когда я использую созданный файл eml, я не вижу никакой подписи.
что я пытался сделать, так это загрузить предварительно сохраненную подпись в перемещаемую папку из другого формата (htm, rtf и txt) с помощью файла txt, проблем нет, и я могу поместить ее в сообщение в файле eml, но с помощью rtf я не могу визуализировать содержимое так, как я вижу в ms word, используя файл htm, изображения (если они существуют) все еще не видны.
Мне интересно, как я могу использовать один из двух (html или RTF-файл), чтобы автоматически включать подпись в нижней части основного сообщения. Надеюсь, что кто-то уже работал над той же темой.
Ответ №1:
Я думаю , вы можете сделать снимок подписи , сохранить его в определенном каталоге и отправить электронное письмо в формате HTML , вставив изображение . Вы можете найти кое-что здесь о том, как вы можете отправлять встроенные HTML-изображения в теле сообщения. Надеюсь, это поможет.
Комментарии:
1. проблема в том, что подпись отличается от компьютера к компьютеру, поэтому учетная запись Outlook имеет свою собственную подпись, сохраненную в перемещаемой папке, поэтому моя цель — загрузить html или RTF-файл в качестве подписи, создание моментального снимка не является практичным решением. Спасибо за ваше предложение
Ответ №2:
Проблема в основном в изображении пути, включенном в файл htm, поэтому я проанализировал исходный путь с абсолютным, чтобы я мог правильно визуализировать изображение
public static String getSignature() throws IOException {
String content ="";
String appDataPath = System.getenv("APPDATA") "\Microsoft\Signatures\";
System.out.println(appDataPath);
File folder = new File(appDataPath);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i ) {
File file = listOfFiles[i];
if (file.isFile() amp;amp; file.getName().endsWith(".htm")) {
content = FileUtils.readFileToString(file , "windows-1252");
content =content.replaceAll("src="", "src="" appDataPath.replace("\", "/"));
}
}
return content;
}
Затем я извлекаю содержимое и помещаю его в сообщение, которое хочу отправить.
MimeBodyPart body = new MimeBodyPart();
body.setDisposition(MimePart.INLINE);
body.setContent(signature, "text/html");
mmp.addBodyPart(body);
Я добавил некоторые улучшения в код:
public static String[] getSignature() throws IOException {
String content = "";
String appDataPath =System.getenv("APPDATA") "\Microsoft\Signatures\";
System.out.println(appDataPath);
File folder = new File(appDataPath);
File[] listOfFiles = folder.listFiles();
String imagePath ="";
for (int i = 0; i < listOfFiles.length; i ) {
File file = listOfFiles[i];
if (file.isFile() amp;amp; file.getName().endsWith(".htm")) {
content = FileUtils.readFileToString(file, "windows-1252");
content = content.replaceAll("src="", "src="" appDataPath.replace("\", "/"));
}else if(file.isDirectory()){
File[] listOfHtmlFiles = file.listFiles();
for (File f : listOfHtmlFiles) {
if(Files.probeContentType(f.toPath()).contains("image")) {
imagePath = f.getPath();
}
}
}
}
return new String[]{content,imagePath};
}
в этом новом коде я извлекаю подпись из html и путь к изображению из папок html files.
Затем я создал изображение в виде совместного файла (прикрепленного к электронному письму), затем я изменяю src в подписи следующим образом :
MimeBodyPart imgBP = new MimeBodyPart();
DataSource fds = new FileDataSource(imgPath);
imgBP.setDataHandler(new DataHandler(fds));
imgBP.setHeader("Content-ID", "<image>");
mmp.addBodyPart(imgBP);
signature = signature.replaceFirst("(src=)(["|'])(.*)(["|'])",
"$1$2cid:image$4");
MimeBodyPart body = new MimeBodyPart();
body.setDisposition(MimePart.INLINE);
body.setContent("<br><br><br>" signature, "text/html");
mmp.addBodyPart(body);