`
huangjiateng
  • 浏览: 37861 次
社区版块
存档分类
最新评论

JAVA使用IMAP、POP3、SMTP协议收发邮件

 
阅读更多

package com.gatgets.mail;




import java.io.UnsupportedEncodingException;

import java.util.Date;

import java.util.Properties;




import javax.mail.Authenticator;

import javax.mail.FetchProfile;

import javax.mail.Folder;

import javax.mail.Message;

import javax.mail.Message.RecipientType;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Store;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeUtility;




/**

* 邮件工具类

* 需要导入mail.jar包(j2ee自带)

* @author 王正镇

* @date 2011-8-14

*/

public class EmailUtil {




private String username = null; // 邮箱用户名

private String password = null; // 邮箱密码




/**

* 传入自己的邮箱用户名和密码

* @param username

* @param password

*/

public EmailUtil(String username, String password) {

this.username = username;

this.password = password;

}


/**

* 创建连接会话

* @param props

* @return

*/

public Session createSession(Properties props) {


Session session = Session.getInstance(props, new Authenticator() {

// 返回用户名密码认证

@Override

public PasswordAuthentication getPasswordAuthentication() {

PasswordAuthentication pa = new PasswordAuthentication(username, password);

return pa;

}

});


return session;

}




/**

* 发送邮件(需设置SMTP)

* @throws Exception

*/

public void sendMail(Properties props, SendEmailMessage sem) throws Exception {


Session session = createSession(props);


// 消息

Message msg = new MimeMessage(session);

msg.setFrom(InternetAddress.parse(MimeUtility.decodeText(sem.getFrom()))[0]);

// TO为初级收件人,CC为邮件副本抄送,BCC应该是密秘抄送吧

msg.setRecipients(RecipientType.TO, InternetAddress.parse(sem.getRecipient()));

msg.setSubject(sem.getSubject());

msg.setText(sem.getText());

msg.setSentDate(new Date());


// 发送消息

Transport.send(msg);

}


/**

* 接收邮件(需设置POP3或SAMP)

* @throws Exception

*/

public void receiveMail(Properties props, String protocol) throws Exception {


Session session = createSession(props);

Store store = session.getStore(protocol);

store.connect(); // 连接

Folder inbox = store.getFolder("INBOX"); // 进入根目录

inbox.open(Folder.READ_WRITE); // 只读方式

FetchProfile profile = new FetchProfile();

profile.add(FetchProfile.Item.ENVELOPE); // 获取信封

Message[] msgs = inbox.getMessages(); // 得到所有邮件

inbox.fetch(msgs, profile); // 预获取信息

// 打印

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

System.out.println("发送时间:" + msgs[i].getSentDate());

System.out.println("发送人:" + decodeText(msgs[i].getFrom()[0].toString()));

System.out.println("大小:" + msgs[i].getSize());

System.out.println("标题:" + msgs[i].getSubject());

System.out.println("内容" + msgs[i].getContent());

System.out.println("-------------------");

}


store.close();

}


/**

* 处理中文编码问题

* @param text

* @return

* @throws UnsupportedEncodingException

*/

private String decodeText(String text) throws UnsupportedEncodingException {


if (text == null) {

return null;

}


if (text.startsWith("=?GB") || text.startsWith("=?gb"))

text = MimeUtility.decodeText(text);

else

text = new String(text.getBytes("ISO8859_1"));

return text;

}



}



package com.gatgets.mail;


import java.util.Properties;


/**
* 邮件默认配置类
* 方法中的必要参好,可根据实际情况修改
* @author 王正镇
* @date 2011-8-14
*/
public class DefaultConfigurer {


/**
* 获取SMTP默认配置
* @return
*/
public static Properties getSMTP() {
Properties p = new Properties();
p.setProperty("mail.smtp.host", "smtp.qq.com"); // 按需要更改
p.setProperty("mail.smtp.protocol", "smtp");
p.setProperty("mail.smtp.port", "465");
p.setProperty("mail.smtp.auth", "true");
// SSL安全连接参数
p.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
p.setProperty("mail.smtp.socketFactory.fallback", "false");
p.setProperty("mail.smtp.socketFactory.port", "465");
return p;
}
/**
* 获取POP3收信配置
* @return
*/
public static Properties getPOP3() {
Properties p = new Properties();
p.setProperty("mail.pop3.host", "pop.qq.com"); // 按需要更改
p.setProperty("mail.pop3.port", "995");
// SSL安全连接参数
p.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
p.setProperty("mail.pop3.socketFactory.fallback", "false");
p.setProperty("mail.pop3.socketFactory.port", "995");
return p;}
/**
* 获取IMAP收信配置
* @return
*/
public static Properties getIMAP() {
Properties p = new Properties();
p.setProperty("mail.imap.host", "imap.qq.com"); // 按需要更改
p.setProperty("mail.imap.port", "993");
// SSL安全连接参数
p.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
p.setProperty("mail.imap.socketFactory.fallback", "false");
p.setProperty("mail.imap.socketFactory.port", "993");
return p;}
}


package com.gatgets.mail;


/**
* 发送邮件消息包装属性类
*
* @author 王正镇
* @date 2011-8-14
*/
public class SendEmailMessage {


private String type; // 格式类型,如 text/html;charset=gbk
private String from; // 发送人
private String subject; // 标题
private String text; // 内容
private String recipient; // 接收人,多个接收人用逗号分隔
private String datetime; // 发送时间


public String getFrom() {
return from;
}


public void setFrom(String from) {
this.from = from;
}


public String getSubject() {
return subject;
}


public void setSubject(String subject) {
this.subject = subject;
}


public String getText() {
return text;
}


public void setText(String text) {
this.text = text;
}


public String getRecipient() {
return recipient;
}


public void setRecipient(String recipient) {
this.recipient = recipient;
}


public String getDatetime() {
return datetime;
}


public void setDatetime(String datetime) {
this.datetime = datetime;
}


public String getType() {
return type;
}


public void setType(String type) {
this.type = type;
}


}


package com.gatgets.mail;




/**
* 测试类
* @author 王正镇
* @date 2011-8-14
*/
public class TestEmail {


/**
* 程序入口点
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// 默认情况下,在这里输入QQ号和密码,便可收信与发信
EmailUtil eu = new EmailUtil("xxx", "xxx");
SendEmailMessage sem = new SendEmailMessage();
sem.setFrom("wzz<xxx@gmail.com>");
sem.setRecipient("xxx@qq.com,zzz@163.com");
sem.setSubject("镇长");
sem.setText("hello world");
eu.sendMail(DefaultConfigurer.getSMTP(), sem);
System.out.println("发送成功");
// 收邮件
eu.receiveMail(DefaultConfigurer.getPOP3(), "pop3"); // pop3收信
System.out.println("收取完毕");
// 使用IMAP收信会抛出 Failed to load IMAP envelope 异常
//eu.receiveMail(DefaultConfigurer.getIMAP(), "imap"); // imap收信
}
}


分享到:
评论
1 楼 hualikejava 2013-09-30  
pop邮箱发送搞定,谢

相关推荐

    Python使用POP3和SMTP协议收发邮件的示例代码

    ### Python使用POP3和SMTP协议收发邮件的示例代码详解 #### 一、概述 在互联网技术领域中,电子邮件仍然是一个重要的通信工具。对于软件开发者来说,掌握如何使用编程语言来实现邮件的发送和接收是一项实用技能。...

    使用java简单实现基于smtp协议的邮件收发

    总之,使用 Java 和 SMTP 协议实现邮件收发是一个多步骤的过程,涉及到配置 SMTP 服务器、创建和设置邮件对象、以及发送和接收操作。记得根据实际的邮箱服务商进行适配,以确保代码的兼容性和有效性。

    邮件服务器支持SMTP/POP3/IMAP/WebMail.

    标题中的“邮件服务器支持SMTP/POP3/IMAP/WebMail”揭示了邮件系统的核心功能,这些协议和技术在电子邮件服务中扮演着至关重要的角色。现在,让我们深入了解一下这些知识点。 1. SMTP(Simple Mail Transfer ...

    精选_基于SMTP协议和POP3协议实现的邮件收发客户端_源码打包

    本资源“精选_基于SMTP协议和POP3协议实现的邮件收发客户端_源码打包”提供了一个完整的邮件客户端的源代码,帮助开发者理解和实现自己的邮件应用。 SMTP协议主要用于邮件的发送。它定义了两台计算机之间如何交换...

    用VC做邮件收发SMTP、POP3程序

    本主题聚焦于使用VC++实现电子邮件的发送和接收,主要涉及到SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)这两种网络协议。 SMTP是互联网上用于发送电子邮件的标准协议,它定义...

    基于SMTP的邮件收发系统

    - 存储系统:保存邮件,可能包括IMAP(Internet Message Access Protocol)或POP3(Post Office Protocol version 3)协议来供客户端访问。 5. 邮件验证:防止垃圾邮件,SMTP服务器可能会使用反垃圾邮件技术,如...

    QQ邮箱POP3、SMTP配置使用说明

    POP3(Post Office Protocol version 3)协议主要用于下载邮件,而SMTP(Simple Mail Transfer Protocol)则用于发送邮件。以下是如何配置QQ邮箱的POP3和SMTP服务的详细步骤: 1. **开启POP3/SMTP服务**: - 首先...

    邮件收发系统 SMTP POP3

    邮件收发系统是互联网通信的重要组成部分,SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)是两种核心的电子邮件协议,用于实现邮件的发送和接收。本项目仿照知名的邮件客户端软件...

    邮件服务器支持SMTP,POP3协议

    在本项目中,我们重点关注的是支持SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)协议的邮件服务器实现。这两种协议在电子邮件系统中分别扮演着发送和接收的角色。 SMTP,即简单...

    使用telnet协议来收发邮件(SMTP和POP3) q.docx

    SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)是互联网上用于电子邮件收发的两个主要协议。SMTP用于发送邮件,而POP3则用于接收邮件。本文将详细解释这两个协议的工作原理以及...

    smtp pop3

    ### 电子邮件SMTP/POP3收发协议的研究与实现 电子邮件作为互联网上最广泛的应用之一,其背后的协议和技术显得尤为重要。本文旨在深入探讨SMTP(简单邮件传输协议)与POP3(邮局协议第三版)这两种核心协议的工作...

    smtp发邮件和pop3收邮件功能

    在“smtp && pop3 收发邮件”这个压缩包文件中,可能包含了实现SMTP和POP3功能的相关代码示例或教程,帮助用户了解如何在实际项目中集成这些协议。学习这些内容可以帮助开发者更好地理解电子邮件系统的内部运作,并...

    java收发邮件完整版

    它提供了处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等协议的能力。要使用JavaMail API,你需要引入相关的依赖库,比如`javax.mail`和`javax.mail-api`。 发送邮件的关键步骤如下...

    邮箱实现原理。POP3,SMTP

    在编程中,开发人员通常会使用邮件收发相关的类库来简化邮件处理,例如Python的smtplib和poplib库,Java的JavaMail API等,这些库提供了方便的接口来执行SMTP和POP3操作。 了解和掌握SMTP和POP3的原理及编程,对于...

    邮件库 IMAP/STMP/POP3 Email Library C/C++

    这个库集成了Internet邮件访问协议(IMAP)、简单邮件传输协议(SMTP)和邮局协议第3版(POP3),涵盖了电子邮件系统中的主要通信方式。 1. **IMAP (Internet Message Access Protocol)** IMAP是一种客户端与...

    POP3和SMTP查询器0分

    例如,"pop3smtp"这个压缩包文件可能包含了各种邮件服务提供商的POP3和SMTP服务器设置,便于用户参考。 在设置邮件客户端时,用户需要输入正确的POP3和SMTP服务器地址,同时还需要提供用户名(通常为完整电子邮件...

    javamail收发邮件加密和不加密

    它支持多种协议,包括POP3、IMAP和SMTP,这些协议分别用于接收、检索和发送邮件。在使用JavaMail时,了解如何进行加密和非加密通信对于确保数据安全至关重要。 1. **POP3(Post Office Protocol version 3)**: -...

    C#使用Pop3接收邮件(可接收163,QQ邮箱等)

    这可能是由于安全或性能考虑,因此,如果你需要获取历史邮件,可能需要考虑使用IMAP协议或者API接口,如QQ邮箱的SMTP/POP3/IMAP API。 在实际项目中,你还需要考虑错误处理和异常捕获,确保在出现问题时能够优雅地...

    Java Mail POP3 Client.zip

    Java Mail POP3 Client是一个用于实现电子邮件收发功能的Java应用程序,它基于JavaMail API和POP3(Post Office Protocol version 3)协议。POP3是一种广泛使用的邮件存储和检索协议,适用于下载邮件到本地客户端...

Global site tag (gtag.js) - Google Analytics