java - 如何覆盖默认的唯一边界字符串并使用 JavaMail 的 MimeMultipart 创建我们自己的边界?

标签 java jakarta-mail mime-types mime-message

我有一个我使用的网络应用程序,它需要一个特定的边界字符串,例如(“公司 mime 边界”)。

当我这样做时,我没有找到覆盖 MimeMultipart 的默认行为的方法

多部分 mp = new MimeMultipart();

唯一的边界字符串总是由构造函数创建,我想覆盖此行为以拥有我自己的边界字符串,但无法这样做,因为我没有找到任何 API。

即使我将它设置为内容类型,它也不起作用并且总是创建一个唯一的边界字符串,因为 MimeMultipart 正在创建一个默认字符串。

mimeMsg.setHeader("Content-Type","multipart/mixed;boundary="company mime boundary");

任何人都可以就此提出建议/帮助我。

如何覆盖此默认行为?

最佳答案

来自 javax.mail.Multipart :

The mail.mime.multipart.ignoreexistingboundaryparameter System property may be set to true to cause any boundary to be ignored and instead search for a boundary line in the message

尝试将此属性设置为 true 然后添加您自己的使用

mimeMsg.setHeader("Content-Type","");

我还没有实现它,但我相信它可以工作

更新

尝试子类化 MimeMultipart 类并覆盖 getBoundaryMethod()。请参阅下面的一些示例代码:

import javax.activation.DataSource;
import javax.mail.MessagingException;
import javax.mail.internet.ContentType;
import javax.mail.internet.MimeMultipart;
public class MyMimeMultyPart extends MimeMultipart {
    /**
     * DataSource that provides our InputStream.
     */
    protected DataSource ds;

    /**
     * Indicates if the data has been parsed.
     */
    protected boolean parsed = true;

    private ContentType type;

    public MyMimeMultyPart(DataSource dataSource) throws MessagingException {
        super(dataSource);
    }

    public MyMimeMultyPart(String subtype) {
        type = new ContentType("multipart", subtype, null);
        type.setParameter("boundary", getBoundary());
        contentType = type.toString();
    }

    public MyMimeMultyPart() {
        super();
    }

    private static int part;

    private synchronized static String getBoundary() {
        int i;
        synchronized (MimeMultipart.class) {
            i = part++;
        }
        StringBuffer buf = new StringBuffer(64);
        buf.append("----=_Part_").append(i).append('_').append((new Object()).hashCode()).append('.').append(System.currentTimeMillis());
        return buf.toString();
    }
}

关于java - 如何覆盖默认的唯一边界字符串并使用 JavaMail 的 MimeMultipart 创建我们自己的边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234024/

相关文章:

java - 使用 IMAP 邮寄 : How to detect that a message has been moved from one folder to another?

spring - 如何更改异常处理程序中的内容类型

Java电子邮件程序不发送电子邮件

java - 有没有更有效的方法来更新 ListView 或循环遍历字符串数组

Java Swing 如何在自定义 ColorChooserPanel 中创建颜色样本?

java - ViewPager.setAdapter() 抛出 NullPointException; viewPager 和 pagerAdapter 似乎不为空?

java - 自动发送电子邮件

python - Boto SES - send_raw_email() 给多个收件人

google-chrome - 资源解释为文档,但使用 MIME 类型 image/jpeg 传输

java - 在构造函数中做很多坏事吗?