如何在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);