如何在Outlook Javamail中包含签名

时间:2019-04-23 16:47:15

标签: java javamail

我正在尝试使用javamail创建电子邮件,我可以在其中附加许多文件,还可以配置正文消息,目标和许多设置...最后,我将此电子邮件保存在一个临时文件中以在Outlook 2016中使用现在,我可以在其中打开Outlook,并使用Outlook命令行和/ eml开关来传递eml文件。 问题是尝试使用开关/ a将一个文件与Outlook附加在一起,我可以在正文消息的页脚中看到签名,但是当我使用创建的eml文件时,我看不到任何签名。

我试图做的是将预先保存的签名从txt文件以不同格式(htm,rtf和txt)加载到漫游文件夹中,没有问题,可以将其放入eml文件中的消息中,但是使用rtf我不能可视化内容,就像我在ms word中看到的那样,使用htm文件,图像(如果存在)仍然不可见。

我想知道如何使用两者之一(html或rtf文件)将签名自动包含在正文消息的底部。 希望有人已经在同一主题上工作。

2 个答案:

答案 0 :(得分:0)

我认为您可以拍摄签名的快照并将其保存在特定目录中,并通过插入图像来发送HTML电子邮件。您可以找到here的内容,以了解如何在邮件正文中发送内联HTML图像。希望对您有所帮助。

答案 1 :(得分:0)

问题主要出在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=)([\"|\'])(.*)([\"|\'])", 
    "$1$2cid:image$4"); 
    MimeBodyPart body = new MimeBodyPart();
    body.setDisposition(MimePart.INLINE);
    body.setContent("<br><br><br>" + signature, "text/html");
    mmp.addBodyPart(body);