imap java 接收_java mail用imap协议收邮件报错

本文详细记录了使用Java的IMAP协议接收邮件时遇到的错误及解决过程,包括登录成功后的邮件内容获取阶段出现的IOException:No content。分析了错误原因并提出了解决方案。
摘要由CSDN通过智能技术生成

A1 AUTHENTICATE PLAIN

+

AGh5OTE1QHNvaHUuY29tAGFpeGluMTU4Njc4MDE0ODA=

A1 OK LOGIN succeeded

A2 CAPABILITY

* CAPABILITY IMAP4rev1 IDLE

A2 OK CAPABILITY completed

DEBUG: connection available -- size: 1

A3 EXAMINE INBOX

* 8 EXISTS

* 0 RECENT

* FLAGS (\answered \seen \flagged \deleted \draft \recent)

* OK [UIDVALIDITY 1]

A3 OK [READ-ONLY] EXAMINE successful

A4 FETCH 1 (BODYSTRUCTURE)

* 1 FETCH (BODYSTRUCTURE ((("text" "plain" ("charset" "gbk") NIL NIL "base64" 13 1) ("text" "html" ("charset" "gbk") NIL NIL "base64" 90 2) "alternative") ("image" "jpeg" ("name" "52332084@2193DD6A.484D264E.jpg") "<52332084@2193DD6A.484D264E.jpg>" NIL "base64" 484331) "related" ("type" "multipart/alternative" "boundary" "----=_NextPart_4E264D48_DF3CF948_6ADD9321") ("inline" NIL) NIL))

A4 OK FETCH completed

javax.mail.internet.MimeMultipart@1ff5ea7

A5 FETCH 2 (BODYSTRUCTURE)

* 2 FETCH (BODYSTRUCTURE (("text" "plain" ("charset" "gbk") NIL NIL "base64" 337 5) ("text" "html" ("charset" "gbk") NIL NIL "base64" 1144 16) "alternative" ("boundary" "----=_NextPart_4E268F00_086C0490_1C0AD190") ("inline" NIL) NIL))

A5 OK FETCH completed

javax.mail.internet.MimeMultipart@9f2a0b

A6 FETCH 3 (BODYSTRUCTURE)

* 3 FETCH (BODYSTRUCTURE ((("text" "plain" ("charset" "gb2312") NIL NIL "base64" 272 4) ("text" "html" ("charset" "gb2312") NIL NIL "base64" 4296 56) "alternative") ("image" "jpeg" ("name" "01.jpg") "" NIL "base64" 483982) "related" ("boundary" "=====002_Dragon633484364877_=====" "type" "multipart/alternative") ("inline" NIL) NIL))

A6 OK FETCH completed

javax.mail.internet.MimeMultipart@1813fac

A7 FETCH 4 (BODYSTRUCTURE)

* 4 FETCH (BODYSTRUCTURE ((("text" "plain" ("charset" "gbk") NIL NIL "base64" 268 4) ("text" "html" ("charset" "gbk") NIL NIL "base64" 1371 19) "alternative") ("image" "jpeg" ("name" "1D89C612@E9B0AA0D.F214294E.jpg") "<1D89C612@E9B0AA0D.F214294E.jpg>" NIL "base64" 81201) "related" ("type" "multipart/alternative" "boundary" "----=_NextPart_4E2914F2_0855F2C0_0DAAB0E9") ("inline" NIL) NIL))

A7 OK FETCH completed

javax.mail.internet.MimeMultipart@7b7072

A8 FETCH 5 (BODYSTRUCTURE)

* 5 FETCH (BODYSTRUCTURE ("text" "plain" ("charset" "UTF-8") NIL NIL "base64" 1495 1 NIL ("inline" NIL) NIL))

A8 OK FETCH completed

A9 FETCH 5 (BODY[TEXT]<0.1495>)

* 5 FETCH (BODY[TEXT]<0.1495> {17}

5Y+R55Sf5aSn5bmF

)

A9 OK FETCH completed

DEBUG IMAP: IMAPProtocol noop

A10 NOOP

Exception in thread "main" java.io.IOException: No content

at com.sun.mail.imap.IMAPInputStream.fill(IMAPInputStream.java:159)

A10 OK NOOP No operation performed

at com.sun.mail.imap.IMAPInputStream.read(IMAPInputStream.java:208)

at com.sun.mail.imap.IMAPInputStream.read(IMAPInputStream.java:234)

at com.sun.mail.util.BASE64DecoderStream.getByte(BASE64DecoderStream.java:358)

at com.sun.mail.util.BASE64DecoderStream.decode(BASE64DecoderStream.java:249)

at com.sun.mail.util.BASE64DecoderStream.read(BASE64DecoderStream.java:144)

at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)

at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)

at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)

at java.io.InputStreamReader.read(InputStreamReader.java:167)

at com.sun.mail.handlers.text_plain.getContent(text_plain.java:125)

at javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:775)

at javax.activation.DataHandler.getContent(DataHandler.java:522)

at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1419)

at com.tengzhi.mail.MailUtil.receiveMail(MailUtil.java:131)

at com.tengzhi.mail.MailUtil.main(MailUtil.java:188)

Java中,使用IMAP(Internet Message Access Protocol)协议接收邮件是一种常见的做法。IMAP协议允许邮件客户端访问服务器上的邮件,并在服务器上进行邮件的管理,如读取、删除、移动等操作。下面是一个简单的示例,展示了如何使用Java连接IMAP服务器并接收邮件。 首先,你需要添加JavaMail API依赖到你的项目中。如果你使用Maven,可以在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency> ``` 然后,你可以使用以下代码来连接IMAP服务器并获取邮件列表: ```java import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class ImapMailReceiver { public static void main(String[] args) { // 设置邮件服务器的属性 Properties props = new Properties(); props.put("mail.store.protocol", "imaps"); // 使用IMAP协议 props.put("mail.imap.host", "imap.example.com"); // 替换为你的IMAP服务器地址 props.put("mail.imap.port", "993"); // IMAP服务器端口,通常是993 props.put("mail.imap.socketFactory.port", "993"); // 安全端口 props.put("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.imap.socketFactory.fallback", "false"); // 创建Session实例 Session emailSession = Session.getInstance(props); try { // 连接邮件服务器 Store store = emailSession.getStore("imaps"); store.connect("imap.example.com", "username", "password"); // 替换为你的邮箱和密码 // 获取文件夹 Folder emailFolder = store.getFolder("INBOX"); // 获取件箱文件夹 emailFolder.open(Folder.READ_ONLY); // 以只读方式打开文件夹 // 读取邮件 Message[] messages = emailFolder.getMessages(); for (Message message : messages) { System.out.println("Subject: " + message.getSubject()); System.out.println("From: " + message.getFrom()[0]); System.out.println("Text: " + message.getContent()); } emailFolder.close(false); // 关闭文件夹 store.close(); // 关闭连接 } catch (MessagingException mex) { mex.printStackTrace(); } } } ``` 请确保替换`imap.example.com`, `username`, `password`为你的IMAP服务器地址和邮箱账户的用户名与密码。 在实际使用中,你可能还需要处理异常情况,比如网络中断、认证失败等,并且对于复杂的邮件处理,可能需要使用`Part`和`MimeMessage`类来更深入地解析邮件内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值