java - 如何从邮件中读取附件?
问题描述
我正在使用 JavaMail 来阅读电子邮件。如果我收到带有附件文件的普通邮件,那是我可以阅读的所有文件,但如果我收到转发的邮件,我无法获取附件。这是我的代码:
class Msg(src: IMAPMessage) {
lazy val multipart: MimeMultipart = src.getContent.asInstanceOf[MimeMultipart]
def parts = (0 until multipart.getCount)
.map(multipart.getBodyPart)
def files = {
parts
.filter(s => {
println(s + " " + s.getFileName + " " + s.getContent + " " + s.getLineCount)
true})
.filter(_.getFileName != null)
.map(part => part.getFileName -> part.getContent.toString)
}
}
object MailMain {
def main(args: Array[String]): Unit = {
new ImapMail("host_name", "user_name", "password", ssl)
.messages(true)
.foreach(m => println(m.files))
}
当我尝试通过part.getContent.toString
我收到内容来获取内容时com.sun.mail.util.BASE64DecoderStream@67d48005
。我的问题是什么?
解决方案
显然,内容是一个流,如果你想看到它的内容。
// Assume a obj is an instance of com.sun.mail.util.BASE64DecoderStream.
if (obj.isInstanceOf[InputStream]) {
val is: InputStream = obj.asInstanceOf[InputStream]
var ch: Int = -1
while ((ch = is.read()) != -1) System.out.write(ch)
}
推荐阅读
- javascript - 在 Angular 中使用 Rxjs 更新来自不同 Json 源的 Json 中的数据
- angular - 在移动设备上运行 Angular PWA
- c# - 将由具有交叉引用的复杂对象组成的复杂对象通过 POST 表单和 EF 传递到数据库中
- r - 获取数据框中行的最小值的列的名称
- java - 成功登录google oauth2时出现重定向错误
- xcode - Xcode:归档时不显示分发应用程序
- tensorflow - 如何在张量流中构建 svm?
- jenkins - 多个构建的 Jenkins 电子邮件通知
- python - 用另一个列表的最接近的值替换一个列表的值
- postgresql - Spring Security + PostgreSql - 由于没有错误消息,如何调试身份验证出了什么问题?