论坛首页 Java企业应用论坛

为什么用javamail向163发送邮件,每封信都带有一个附件的符号???

浏览 9310 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-09  
为什么用javamail向163发送邮件,每封信都带有一个附件的符号???
当你没有发送附件时,163也会显示一个大头针的符号,这表明有附件,可是打开这封信,信里是没有附件的,这是对的,现在我的问题就是,不管你有没有发送带附件的邮件,163都会显示一个大头针的符号 (就是有附件的符号),这个怎么解决,下面是我的代码,大家帮我看看哪写错了:

public HashMap send(){
		HashMap map=new HashMap();
		map.put("state", "success");
		String message="邮件发送成功!";
		Session session=null; 
		Properties props = System.getProperties(); 
		props.put("mail.smtp.host", smtpServer);
		if(ifAuth){ //服务器需要身份认证 
			props.put("mail.smtp.auth","true");    
			SmtpAuth smtpAuth=new SmtpAuth(username,password);
			session=Session.getDefaultInstance(props, smtpAuth);  
		}else{
			props.put("mail.smtp.auth","false");
			session=Session.getDefaultInstance(props, null);
		}
		session.setDebug(true); 
		Transport trans = null;   
		try { 
			MimeMessage msg = new MimeMessage(session);
			try{
				Address from_address = new InternetAddress(from, displayName);
				msg.setFrom(from_address);
			}catch(java.io.UnsupportedEncodingException e){
				e.printStackTrace(); 
			} 
			InternetAddress[] address={new InternetAddress(to)};
			msg.setRecipients(Message.RecipientType.TO,address);
			msg.setSubject(subject); 
			Multipart mp = new MimeMultipart();
			MimeBodyPart mbp = new MimeBodyPart();
			mbp.setContent(content.toString(), "text/html;charset=gb2312");
		    mp.addBodyPart(mbp);   
		    if(!file.isEmpty()){//有附件 
				Enumeration efile=file.elements();
				while(efile.hasMoreElements()){  
					mbp=new MimeBodyPart(); 
					filename=efile.nextElement().toString(); //选择出每一个附件名
					FileDataSource fds=new FileDataSource(filename); //得到数据源 
					mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart
					mbp.setFileName(fds.getName());  //得到文件名同样至入BodyPart
					mp.addBodyPart(mbp); 
				}   
				file.removeAllElements(); 	
		    }  
			msg.setContent(mp); //Multipart加入到信件
			msg.setSentDate(new Date()); 	//设置信件头的发送日期
			//发送信件
		    msg.saveChanges();  
			trans = session.getTransport("smtp");
			trans.connect(smtpServer, username, password);
			trans.sendMessage(msg, msg.getAllRecipients());
			trans.close();
			
		}catch(AuthenticationFailedException e){	
	         map.put("state", "failed");
			 message="邮件发送失败!错误原因:\n"+"身份验证错误!";
			 e.printStackTrace();  
		}catch (MessagingException e) { 
			 message="邮件发送失败!错误原因:\n"+e.getMessage(); 
			 map.put("state", "failed");
			 e.printStackTrace();
			 Exception ex = null;
			 if ((ex = e.getNextException()) != null) {
				 System.out.println(ex.toString());
				 ex.printStackTrace(); 
			 }  
		} 
		//System.out.println("\n提示信息:"+message); 
        map.put("message", message);
		return map;
	} 
	
   发表时间:2007-05-09  
为什么用javamail向163发送邮件,每封信都带有一个附件的符号???
0 请登录后投票
   发表时间:2007-05-09  
可能是不是因为这样:file.isEmpty()的值不管是否为真,file这个对象在你的类里都存在,所以就会有附件。
0 请登录后投票
   发表时间:2007-05-09  
不是这个原因,我把这部份全去了,还是一样
0 请登录后投票
   发表时间:2007-05-09  
msg.setContent(mp);

应该是如果文件为空,你就不要用下面的对象

Multipart mp = new MimeMultipart(); 
MimeBodyPart mbp = new MimeBodyPart(); 
0 请登录后投票
   发表时间:2007-05-09  
直接Msg.setContent("内容","text/html;charset=gb2312");
0 请登录后投票
   发表时间:2007-05-15  
redleaf 写道
为什么用javamail向163发送邮件,每封信都带有一个附件的符号???
当你没有发送附件时,163也会显示一个大头针的符号,这表明有附件,可是打开这封信,信里是没有附件的,这是对的,现在我的问题就是,不管你有没有发送带附件的邮件,163都会显示一个大头针的符号 (就是有附件的符号),这个怎么解决,下面是我的代码,大家帮我看看哪写错了:

public HashMap send(){
            .............
				    if(!file.isEmpty()){//有附件 
				Enumeration efile=file.elements();
				while(efile.hasMoreElements()){  
					mbp=new MimeBodyPart(); 
					filename=efile.nextElement().toString(); //选择出每一个附件名
					FileDataSource fds=new FileDataSource(filename); //得到数据源 
					mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart
					mbp.setFileName(fds.getName());  //得到文件名同样至入BodyPart
					mp.addBodyPart(mbp); 
				}   
				file.removeAllElements(); 	
		    }   
           ........	
	

这里判断如果没有附件,就直接msg.setContent(text,"gbk")吧,这样就不会提示有附件符号了.
0 请登录后投票
   发表时间:2007-05-31  
ok,已解决cn
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics