改寫後的使用javamail pop3收信的javabean

本文提供了一个使用Java接收POP3邮件的示例代码。通过该示例,读者可以了解到如何利用JavaMail API连接到POP3服务器,并获取邮箱中的邮件内容。代码详细展示了设置属性、获取Store、打开文件夹及读取邮件的过程。
 /*
*Author:tyfun
*DateTime:2003.01.10
*Package:com.westarsoft.mail
*/

package com.westarsoft.mail;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.*;

public class GetMail {
    public static String receive(String popServer, String popUser, String popPassword) {
        String mailContent = "";
        Store store = null;
        Folder folder = null;
        try {
            Properties props = System.getProperties();
            Session session = Session.getDefaultInstance(props, null);
            store = session.getStore("pop3");
            store.connect(popServer, popUser, popPassword);
            folder = store.getDefaultFolder();
            if(folder == null) throw new Exception("No default folder");
            folder = folder.getFolder("INBOX");
            if(folder == null) throw new Exception("No POP3 INBOX");
            folder.open(Folder.READ_ONLY);
            Message[] msgs = folder.getMessages();
            for(int msgNum = 0; msgNum < msgs.length; msgNum++) {
                mailContent = mailContent + getMessage(msgs[msgNum]) + "/n/n/n/n";
            }
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
        finally {
            try {
                if (folder!=null) folder.close(false);
                if (store!=null) store.close();
            }
            catch (Exception ex2) {
                ex2.printStackTrace();
            }
        }
        return mailContent;
    }

    public static String getMessage(Message message) {
        String mailContent = null;
        try {
            String from = ((InternetAddress)message.getFrom()[0]).getPersonal();
            if(from==null) from = ((InternetAddress)message.getFrom()[0]).getAddress();
            mailContent = "FROM: "+from;
            String subject = message.getSubject();
            mailContent = mailContent + "/n" +"SUBJECT: "+subject;
            Part messagePart = message;
            Object content = messagePart.getContent();
            if(content instanceof Multipart) {
                messagePart = ((Multipart)content).getBodyPart(0);
                mailContent = mailContent + "/n" +"[ Multipart Message ]";
            }
            mailContent = mailContent + "/n" +"CONTENT: "+content.toString();
            String contentType = messagePart.getContentType();
            mailContent = mailContent + "/n" +"CONTENT:"+contentType;
            if(contentType.startsWith("text/plain") || contentType.startsWith("text/html")) {
                InputStream is = messagePart.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                String thisLine = reader.readLine();
                while(thisLine!=null) {
                    mailContent = mailContent + "/n" +thisLine;
                    thisLine = reader.readLine();
                }
            }
        }
        catch(Exception ex) {
            ex.printStackTrace();
        }
        return mailContent;
    }    
}





<%
        GetMail mail = new GetMail();
        String content = mail.receive("pop3.server.com","user","password");
        if((content.trim() == null)||(content.trim() == "")) {
            System.out.println("No mail!");
        }
        else {
            System.out.println("You got a new mail!");
        }
%> 
### 解决 JavaMail POP3 接收邮件中文乱码问题 当使用JavaMail API通过POP3协议接收电子邮件时,可能会遇到字符编码不匹配导致的中文乱码问题。为了确保接收到的邮件能够正确显示中文内容,需要采取一些措施来处理字符集转换。 #### 设置正确的字符编码 在读取邮件内容之前,应该先尝试检测并设置合适的字符编码方式。通常情况下,默认采用UTF-8作为通用字符集可以有效减少乱码现象的发生。对于特定情况下的GBK或GB2312编码,则需特别指定: ```java // 获取消息体内容 Object content = message.getContent(); if (content instanceof String) { // 如果是字符串形式的消息体,则重新按照utf-8解码 byte[] bytes = ((String) content).getBytes("ISO-8859-1"); String decodedContent = new String(bytes, "UTF-8"); // 或者试用 "GBK", "GB2312" } else if (content instanceof Multipart){ // 对于多部分邮件,遍历各个子部件进行相同操作... } ``` #### 处理MimeMessage中的文本内容 针对包含HTML或者富文本格式的邮件,在解析这些类型的邮件内容时也需要考虑其内部可能存在的不同编码声明。可以通过`setText()`方法为每个BodyPart设定恰当的内容类型和编码参数[^4]: ```java MimeMultipart multipart = (MimeMultipart)message.getContent(); for(int i=0;i<multipart.getCount();i++){ BodyPart bodyPart=multipart.getBodyPart(i); if(bodyPart.isMimeType("text/plain")){ Object o = bodyPart.getContent(); if(o instanceof String){ String s=(String)o; System.out.println(s); } // 设定文本内容及其编码 bodyPart.setText(decodedText,"UTF-8"); } else if(bodyPart.isMimeType("text/html")) { // 同样地调整html内容的编码 bodyPart.setContent(decodedHtml,"text/html;charset=UTF-8"); } } ``` #### 调整Session属性配置 另外一种常见的做法是在创建会话实例时就定义好默认使用的字符集,这样可以在一定程度上简化后续的操作流程。例如,在初始化`Properties`对象时加入如下设置[^2]: ```properties props.put("mail.mime.charset","UTF-8"); ``` 以上就是解决JavaMail POP3收取邮件过程中可能出现的中文乱码的一些常见策略和技术细节说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值