路人甲101 2023-11-06 11:51 采纳率: 0%
浏览 7

java 邮箱回执问题

message.setHeader("Disposition-Notification-To", "xxxxx@qq.com");

 Enumeration<Header> headers = message.getAllHeaders();
            System.out.println("---------------");
            while (headers.hasMoreElements()) {
                Header header = headers.nextElement();
                System.err.println(header.getName()+":"+header.getValue());
                if (header.getName().equals("Disposition-Notification-To")) {
                    String value = header.getValue();
                    System.out.println(value);
                }
            }

我确认我收到了回执 但是我在回执中并没有获取到Disposition-Notification-To 的参数 这个是怎么回事呢

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-06 15:43
    关注

    【以下回答由 GPT 生成】

    回答: 该原因可能是由于某些邮件服务器不支持或限制了Disposition-Notification-To字段的传递。目前,很多大型的邮件服务提供商都不再支持该字段,因为它容易被滥用。所以,你在接收到回执时无法获取到该参数的值。

    这里有两种解决方案:

    1. 使用Outlook提供的“回执”功能 Outlook是目前比较常见的邮件客户端之一,它提供了"回执"功能,可以在发送邮件时选择是否请求接收方发送回执。使用这种方式,你无需修改代码,只需要在发送邮件时选择请求回执即可。

    2. 使用JavaMail库中的MDN(Message Disposition Notification)功能 JavaMail库中提供了MDN功能,可以通过在邮件中插入特定的附件来请求回执。下面是一个示例代码:

    import javax.mail.*;
    import javax.mail.internet.*;
    
    Properties props = new Properties();
    Session session = Session.getDefaultInstance(props, null);
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress("<sender-email>"));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("<recipient-email>"));
    message.setSubject("<subject>");
    
    MimeBodyPart mdn = new MimeBodyPart();
    mdn.setDisposition("notification-mdn");
    mdn.setContent("MDN read receipt", "text/plain");
    mdn.setHeader("Reporting-UA", "JavaMail");
    mdn.setHeader("Original-Recipient", "rfc822;<sender-email>");
    mdn.setHeader("Disposition", "manual-action/MDN-sent-manually;processed");
    
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(mdn);
    
    message.setContent(multipart);
    
    Transport.send(message);
    

    请将""和""分别替换为发件人和收件人的邮箱地址。

    该代码中创建了一个MimeBodyPart对象mdn,通过设置其Disposition属性为"notification-mdn"来请求回执。其余的header信息可以根据需要进行设置。

    使用这种方式,你可以自行控制回执功能的实现。但请注意,这种方式需要发送邮件的邮件服务器支持MDN功能。

    希望以上解决方案能对你有帮助。如果仍有问题,请提供更多关于你的邮件服务器和接收回执的环境信息,以便提供更准确的解决方案。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月6日

悬赏问题

  • ¥15 如何加快视频观看速度?
  • ¥15 HP P2000存储 硬盘损坏两块如何更换
  • ¥15 c#的richTextBox控件有更好的替代品吗
  • ¥15 ntrip协议发送失败
  • ¥15 关于#c语言#的问题:c语言main函数括弧里为什么有时候加void
  • ¥15 如何利用R语言对语料库之间数据差异性分析
  • ¥20 如何制作支付宝扫码跳转到发红包
  • ¥15 STM32F103C8T6使用标准库stm32f10x.h驱动ws2812
  • ¥20 我是数控机床电气工程师,主要是做840DSL与one,请问如何自学
  • ¥20 显示器休眠后重新唤醒出现蓝屏,蓝屏代码为DRIVER-POWER.STATE-FAILURE