我使用以下代码发送邮件。文本消息发送正常,但带有附件的邮件不起作用,它给出了异常。
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-Type
和Content- 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, ...