专栏首页大数据-数据人生关于自动发送邮件的常见错误解决方法

关于自动发送邮件的常见错误解决方法

关于自动发送邮件的com/sun/mail/util/LineInputStream解决方法

关于java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 解决方法: 这里是myeclipse8.6自带的javaee.jar里面的mail.jar 和另外引入的mail.jar冲突 解决方法是找myeclipse自带的jar删除mail.jar和activition.jar 查看自己javaee.jar的位置: 找到本地文件 用winrar打开 找到 mail 和activition 文件夹,然后右键“删除文件” 。 重启服务,发送邮件就可以了。

--------------------------------------------

收邮件: Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 当出现以上错误时,恭喜您已经离接收邮件不远了,否则请您解决好所有的异常后再来看这个帖子。

javax.mail和javax.activation这两个包已经在javaEE5当中属于基础包了,就是JDK中自带了已经,但是里面的方法与现在外面的mail.jar和activation.jar有一些出入,所以初学者在直接copy别人代码的时候往往会出现上面的错误。 废话不多说下面是解决方法 进到

X:\Program Files\MyEclipse 6.5\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806\data\libraryset\EE_5

这个路径里,可以看到javaee.jar,用rar把这个文件打开,然后进到javax文件夹里,删除mail.jar和activation.jar(我的javaee.jar里,这两个东西是文件夹,总之删掉就OK,不过要注意备份一下)

删掉之后运行下面的代码,经行简单的修改以后就可以实现接收邮件的功能了!我已经测试过完全可行。

package com.oa.mail;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Properties;

import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;

import sun.misc.BASE64Decoder;

public class MailReceiver{

public static void main(String[] args){

MailReceiver receiver = new MailReceiver();
receiver.setHost("pop3.pchome.com.tw");
receiver.setUsername("xxxxxx");//您的邮箱账号
receiver.setPassword("yyyyyy");//您的邮箱密码
receiver.setAttachPath("f:\\email");//您要存放附件在什么位置?绝对路径
try{
receiver.reveiveMail();
} catch (Exception e){
e.printStackTrace();
}
}

public void reveiveMail() throws Exception {

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("pop3");
store.connect(getHost(), getUsername(), getPassword());

Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
System.out.println("Messages''s length: " + message.length);

//FetchProfile profile = new FetchProfile();
//profile.add(FetchProfile.Item.ENVELOPE);
//folder.fetch(message, profile);

for (int i = 0; i < message.length; i++) {

//message[i].setFlag(Flags.Flag.DELETED, true);//必须先设置:folder.open(Folder.READ_WRITE);
handleMultipart(message[i]);
}
if (folder != null) {
folder.close(true);
}
if (store != null) {
store.close();
}
}

private void handleMultipart(Message msg) throws Exception {

String disposition;
Multipart mp = (Multipart) msg.getContent();
int mpCount = mp.getCount();
for (int m = 0; m < mpCount; m++) {
handle(msg);
BodyPart part = mp.getBodyPart(m);
disposition = part.getDisposition();
if (disposition != null && disposition.equals(Part.ATTACHMENT)) {
saveAttach(part, getAttachPath());
} else {
System.out.println(part.getContent());
}
}
}

private static void handle(Message msg) throws Exception {

System.out.println("邮件主题:" + msg.getSubject());//测试
System.out.println("邮件作者:" + msg.getFrom()[0].toString());
System.out.println("发送日期:" + msg.getSentDate());
}

private static void saveAttach(BodyPart part, String filePath) throws Exception {

String temp = part.getFileName();
String s = temp.substring(8, temp.indexOf("?="));
String fileName = base64Decoder(s);
System.out.println("有附件:" + fileName);

InputStream in = part.getInputStream();
FileOutputStream writer = new FileOutputStream(new File(filePath+"\\" + fileName));
byte[] content = new byte[255];
while ((in.read(content)) != -1) {
writer.write(content);
}
writer.close();
in.close();
}

private static String base64Decoder(String s) throws Exception {

BASE64Decoder decoder = new BASE64Decoder();
byte[] b = decoder.decodeBuffer(s);

return (new String(b));
}

private String host = null;
private String username = null;
private String password = null;
private String attachPath = null;

public String getAttachPath() {
return attachPath;
}

public void setAttachPath(String attachPath) {
this.attachPath = attachPath;
}

public String getHost() {
return host;
}

public void setHost(String host) {
this.host = host;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux连接信息维护

    近期由于客户端机器连接过多,导致程序报错,详见:《Spark异常:address》。这里总结下该如何查看和维护Linux机器。首先查看机器的连接数统计:

    幽鸿
  • 关于图片验证码的若干问题

    图片验证码是在登录、注册中防止机器注册、灌水等的常用一种小技术。现在贴出我的一种实现代码,也是借鉴别人的。现在主要的java类如下:

    幽鸿
  • spring mvc 的@PathVariable对应中文乱码解决办法

    最近博客的目录改用Restful风格时,少不了用到@PathVariable注解,可是发现URL带中文的时候,接受参数时竟然乱码。常见的解决乱码访问无非下面几种...

    幽鸿
  • SpringBoot入门建站全系列(十)邮件发送功能

    Spring Mail API都在org.springframework.mail及其子包org.springframework.mail.javamail中封...

    品茗IT
  • SpringBoot @ConfigurationProperties详解

    本文将会详细讲解@ConfigurationProperties在Spring Boot中的使用。

    程序那些事
  • apache的开源项目-模板引擎(Velocity)_学习了两天就上手啦_源码下载

    首先,如果你对Velocity不是很了解,还是建议你去apache的官方网站上去走走....

    Hongten
  • (19)Struts2_表单标签

    qubianzhong
  • Java中的transient关键字

    用户1205080
  • 带你玩正则1--数据遍地是,看你取不取

    implementation 'com.google.code.gson:gson:2.8.5'

    张风捷特烈
  • Spring Security项目Spring MVC开发RESTful API(二)

    楠楠

扫码关注云+社区

领取腾讯云代金券