如何在outlook javamail中包含签名
how to include signature in outlook javamail
我正在尝试使用 javamail 创建一封电子邮件,我可以在其中附加许多文件,还可以配置正文消息、目的地和许多设置...最后,我将这封电子邮件保存在一个临时文件中,以便在outlook 2016 我现在可以打开 outlook 并使用带开关 /eml 的 outlook 命令行传递 eml 文件。
问题是尝试使用开关 /a 将一个文件附加到 outlook,我可以在正文消息的页脚看到签名,但是当我使用创建的 eml 文件时,我看不到任何签名。
我尝试做的是使用 txt 文件从不同格式(htm、rtf 和 txt)加载漫游文件夹中预先保存的签名,没有问题,可以将其放入 eml 文件中的消息中,但使用rtf 我无法像我在 ms word 中看到的那样可视化内容,使用 htm 文件图像(如果存在)仍然不可见。
我想知道如何使用两者之一(html 或 rtf 文件)自动将签名包含在正文消息的底部。
希望有人已经研究过同一主题。
我认为您可以拍摄签名快照并将其保存在特定目录中,然后通过插入图像发送 HTML 电子邮件。您可以找到有关如何在邮件正文中发送内联 HTML 图片的内容 here。希望对你有帮助。
问题主要出在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() && 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() && 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 文件夹中的图像路径。
然后我创建了一个图像作为联合文件(附在电子邮件中)
然后我将签名中的 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=)([\"|\'])(.*)([\"|\'])",
"cid:image");
MimeBodyPart body = new MimeBodyPart();
body.setDisposition(MimePart.INLINE);
body.setContent("<br><br><br>" + signature, "text/html");
mmp.addBodyPart(body);
我正在尝试使用 javamail 创建一封电子邮件,我可以在其中附加许多文件,还可以配置正文消息、目的地和许多设置...最后,我将这封电子邮件保存在一个临时文件中,以便在outlook 2016 我现在可以打开 outlook 并使用带开关 /eml 的 outlook 命令行传递 eml 文件。 问题是尝试使用开关 /a 将一个文件附加到 outlook,我可以在正文消息的页脚看到签名,但是当我使用创建的 eml 文件时,我看不到任何签名。
我尝试做的是使用 txt 文件从不同格式(htm、rtf 和 txt)加载漫游文件夹中预先保存的签名,没有问题,可以将其放入 eml 文件中的消息中,但使用rtf 我无法像我在 ms word 中看到的那样可视化内容,使用 htm 文件图像(如果存在)仍然不可见。
我想知道如何使用两者之一(html 或 rtf 文件)自动将签名包含在正文消息的底部。 希望有人已经研究过同一主题。
我认为您可以拍摄签名快照并将其保存在特定目录中,然后通过插入图像发送 HTML 电子邮件。您可以找到有关如何在邮件正文中发送内联 HTML 图片的内容 here。希望对你有帮助。
问题主要出在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() && 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() && 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 文件夹中的图像路径。
然后我创建了一个图像作为联合文件(附在电子邮件中) 然后我将签名中的 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=)([\"|\'])(.*)([\"|\'])",
"cid:image");
MimeBodyPart body = new MimeBodyPart();
body.setDisposition(MimePart.INLINE);
body.setContent("<br><br><br>" + signature, "text/html");
mmp.addBodyPart(body);