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收信
}
}
分享到:
相关推荐
### Python使用POP3和SMTP协议收发邮件的示例代码详解 #### 一、概述 在互联网技术领域中,电子邮件仍然是一个重要的通信工具。对于软件开发者来说,掌握如何使用编程语言来实现邮件的发送和接收是一项实用技能。...
总之,使用 Java 和 SMTP 协议实现邮件收发是一个多步骤的过程,涉及到配置 SMTP 服务器、创建和设置邮件对象、以及发送和接收操作。记得根据实际的邮箱服务商进行适配,以确保代码的兼容性和有效性。
标题中的“邮件服务器支持SMTP/POP3/IMAP/WebMail”揭示了邮件系统的核心功能,这些协议和技术在电子邮件服务中扮演着至关重要的角色。现在,让我们深入了解一下这些知识点。 1. SMTP(Simple Mail Transfer ...
本资源“精选_基于SMTP协议和POP3协议实现的邮件收发客户端_源码打包”提供了一个完整的邮件客户端的源代码,帮助开发者理解和实现自己的邮件应用。 SMTP协议主要用于邮件的发送。它定义了两台计算机之间如何交换...
本主题聚焦于使用VC++实现电子邮件的发送和接收,主要涉及到SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)这两种网络协议。 SMTP是互联网上用于发送电子邮件的标准协议,它定义...
- 存储系统:保存邮件,可能包括IMAP(Internet Message Access Protocol)或POP3(Post Office Protocol version 3)协议来供客户端访问。 5. 邮件验证:防止垃圾邮件,SMTP服务器可能会使用反垃圾邮件技术,如...
POP3(Post Office Protocol version 3)协议主要用于下载邮件,而SMTP(Simple Mail Transfer Protocol)则用于发送邮件。以下是如何配置QQ邮箱的POP3和SMTP服务的详细步骤: 1. **开启POP3/SMTP服务**: - 首先...
邮件收发系统是互联网通信的重要组成部分,SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)是两种核心的电子邮件协议,用于实现邮件的发送和接收。本项目仿照知名的邮件客户端软件...
在本项目中,我们重点关注的是支持SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)协议的邮件服务器实现。这两种协议在电子邮件系统中分别扮演着发送和接收的角色。 SMTP,即简单...
SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)是互联网上用于电子邮件收发的两个主要协议。SMTP用于发送邮件,而POP3则用于接收邮件。本文将详细解释这两个协议的工作原理以及...
### 电子邮件SMTP/POP3收发协议的研究与实现 电子邮件作为互联网上最广泛的应用之一,其背后的协议和技术显得尤为重要。本文旨在深入探讨SMTP(简单邮件传输协议)与POP3(邮局协议第三版)这两种核心协议的工作...
在“smtp && pop3 收发邮件”这个压缩包文件中,可能包含了实现SMTP和POP3功能的相关代码示例或教程,帮助用户了解如何在实际项目中集成这些协议。学习这些内容可以帮助开发者更好地理解电子邮件系统的内部运作,并...
它提供了处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等协议的能力。要使用JavaMail API,你需要引入相关的依赖库,比如`javax.mail`和`javax.mail-api`。 发送邮件的关键步骤如下...
在编程中,开发人员通常会使用邮件收发相关的类库来简化邮件处理,例如Python的smtplib和poplib库,Java的JavaMail API等,这些库提供了方便的接口来执行SMTP和POP3操作。 了解和掌握SMTP和POP3的原理及编程,对于...
这个库集成了Internet邮件访问协议(IMAP)、简单邮件传输协议(SMTP)和邮局协议第3版(POP3),涵盖了电子邮件系统中的主要通信方式。 1. **IMAP (Internet Message Access Protocol)** IMAP是一种客户端与...
例如,"pop3smtp"这个压缩包文件可能包含了各种邮件服务提供商的POP3和SMTP服务器设置,便于用户参考。 在设置邮件客户端时,用户需要输入正确的POP3和SMTP服务器地址,同时还需要提供用户名(通常为完整电子邮件...
它支持多种协议,包括POP3、IMAP和SMTP,这些协议分别用于接收、检索和发送邮件。在使用JavaMail时,了解如何进行加密和非加密通信对于确保数据安全至关重要。 1. **POP3(Post Office Protocol version 3)**: -...
这可能是由于安全或性能考虑,因此,如果你需要获取历史邮件,可能需要考虑使用IMAP协议或者API接口,如QQ邮箱的SMTP/POP3/IMAP API。 在实际项目中,你还需要考虑错误处理和异常捕获,确保在出现问题时能够优雅地...
Java Mail POP3 Client是一个用于实现电子邮件收发功能的Java应用程序,它基于JavaMail API和POP3(Post Office Protocol version 3)协议。POP3是一种广泛使用的邮件存储和检索协议,适用于下载邮件到本地客户端...