当前位置: 首页 > 面试题库 >

在Java中发送消息时出现MessagingExceptionIOException?

钱言
2023-03-14
问题内容

我使用以下代码发送邮件。文本消息发送正常,但带有附件的邮件不起作用,它给出了异常。

javax.mail.MessagingException:发送消息时发生IOException;嵌套的异常是:javax.activation.UnsupportedDataTypeException:MIME类型为multipart
/ mixed的无对象DCH;boundary =“ ---- = _ Part_0_10430987.1294298904906”在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:676)在javax.mail.Transport.send0(Transport.java:189)在javax.mail
Gmailer.GMailSender.sendMailAttach(GMailSender.java:114)上的.Transport.send(Transport.java:118)在SendMail.main(SendMail.java:22)上的原因:javax.activation.UnsupportedDataTypeException:没有用于MIME类型的对象DCH多份/混合
boundary =“ ---- = _ Part_0_1_10980987.1294298904906”在javax.activation.ObjectDataContentHandler.writeTo(Unknown
Source)在javax.activation.DataHandler。

带有附件代码的邮件:

public synchronized void sendMailAttach(String subject, String body,
    String sender, String recipients)  {
try {
    MimeMessage message = new MimeMessage(session);

    message.setSender(new InternetAddress(sender));
    message.setSubject(subject);

    // Create the message part 
    BodyPart messageBodyPart = new MimeBodyPart();

    // Fill the message
    messageBodyPart.setText("hi Demo");

    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);

    // Part two is attachment
    messageBodyPart = new MimeBodyPart();
    String filename = "mail.txt";
    DataSource source = new FileDataSource(filename);
    messageBodyPart.setDataHandler(new DataHandler(source));
    messageBodyPart.setFileName(filename);
    multipart.addBodyPart(messageBodyPart);

    // Put parts in message
    message.setContent(multipart);

    if (recipients.indexOf(',') > 0)
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(recipients));
    else
        message.setRecipient(Message.RecipientType.TO,
                new InternetAddress(recipients));
    Transport.send(message);

}
catch (MessagingException e) {
    System.out.println("MessagingException" + e.getMessage());
}
catch (Exception e) {
    System.out.println("Mail Send Exception " + e.getMessage());
}
 }

短信发送代码:

public synchronized void sendMail(String subject, String body,
    String sender, String recipients) throws Exception {
try {
    MimeMessage message = new MimeMessage(session);
    DataHandler handler = new DataHandler(new ByteArrayDataSource(
            body.getBytes(), "text/plain"));
    message.setSender(new InternetAddress(sender));
    message.setSubject(subject);
    message.setDataHandler(handler);
    if (recipients.indexOf(',') > 0)
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(recipients));
    else
        message.setRecipient(Message.RecipientType.TO,
                new InternetAddress(recipients));
    Transport.send(message);
} catch (Exception e) {

}
}

问题答案:

首先,您可以使用MimeBodyPart.attachFile()而不是亲自对DataSource/
DataHandler代码进行整理,从而使代码更加简洁。

其次,尝试使用适当的值在附件部分上设置Content-TypeContent- Disposition标头。(attachFile默认情况下,将为您设置Content-Disposition。)例如,

messageBodyPart = new MimeBodyPart();
messageBodyPart.attachFile(new File("mail.txt"));
messageBodyPart.setHeader("Content-Type", "text/plain; charset=\"us-ascii\"; name=\"mail.txt\"");

编辑:

经过一番思考,这在类加载时一定是不对的。请检查其他SO线程以查看它是否可以解决您的情况。(一般问题:可能是您的类路径中有一个额外的activation.jar;也有其他可能导致它。)



 类似资料:
  • 我在使用discord机器人添加此发送消息时遇到了一个奇怪的错误。我在学习Scratch教程 结果:- `(节点:8480)未经处理的PromisejectionWarning:DiscordAPIError:在C:\Users\Deepanshu\node\u modules\discord处缺少访问权限。js\src\client\rest\RequestHandlers\Sequential

  • 我在discord.py做了一个机器人,希望我的机器人在网络钩子在特定频道发送消息时定位一个角色。有办法这么做吗?现在所有我有的是通道ID和我很确定这是一个客户端事件

  • 我正试图弄清楚如何使用Firebase向Android推送通知,并使用遗留HTTP使其正常工作(https://fcm.googleapis.com/fcm/send)但文件建议使用较新的endpoint(https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send).我似乎无法让它工作,因为我一直得到这样的回应: 使用h

  • 我是Kafka的新手,当我试图发送信息到我得到的主题下面的错误。有人能帮我一下吗? [2018-09-23 13:37:56,613]警告[Producer Clientid=Console-Producer]无法建立到节点-1的连接。代理可能不可用。(org.apache.kafka.clients.NetworkClient)

  • 接口说明 轻推轻应用/订阅号支持发送文本、图片、文本卡片、图文、key-value、文件、待办等消息类型。本接口针对各种消息类型和发送的对象(单发、群发以及给部分人发送)进行了定义。 注:openid是用户关注某个轻应用/订阅号后生成的唯一id,单发和给部分人发送消息必须携带此参数,可以通过如下接口来获取: 根据qt_code获取用户基本信息 获取使用者列表 通过userId获取openid 消息

  • 主动发送消息 use EasyWeChat\Kernel\Messages\TextCard; // 获取 Messenger 实例 $messenger = $app->messenger; // 准备消息 $message = new TextCard([ 'title' => '你的请假单审批通过', 'description' => '单号:1928373, ...