邮件原理与JavaMail开发

1Java邮件开发介绍

为什么要学习javamail开发

现在很多WEB应用在开发时都需要集成邮件发送功能,例如: 

给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail

给过生日的注册会员自动发送一封表示祝贺的E-Mail 

将网站的最新活动信息通过E-Mail发送给所有的注册会员。

等等 …...

这些功能的实现都需要软件开发人员在开发WEB应用中编写相应的邮件处理程序。

2邮件服务器和电子邮箱 

1邮件服务器:

要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sinasohu163等等他们都有自己的邮件服务器。

这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

2电子邮箱:

电子邮箱(E-mail地址)的获得需要在邮件服务器上进行申请 ,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个帐户。用户在邮件服务器上申请了一个帐号后,邮件服务器就会为这个帐号分配一定的空间,用户从而可以使用这个帐号以及空间,发送电子邮件和保存别人发送过来的电子邮件。

3邮件传输协议和邮件服务器类型 

1SMTP协议(发送邮件)

用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的。

因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为SMTP服务器。(25)

2POP3协议(接收)

同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅格式,POP3协议用于定义这种通讯格式。

因而,通常我们也把处理用户pop3请求(邮件接收请求)的邮件服务器称之为POP3服务器。(110)

4、电子邮件的传输过程 

下图用于演示lisi@sina.comwangwu@sohu.com帐户相互发送邮件的过程。

6、手工演示电子邮件的发送

1准备实验环境

提前在sohu sina上注册一个免费帐号

获取smtppop3服务器的名称

sina或 sohu会在其帮助中心里提示管理当前注册帐号的邮件服务器的主机名。

编写base64编码程序对用户名和密码进行编码。

手工使用SMTP协议发送电子邮件

手工使用POP3协议接收电子邮件

2如何收发邮件客户端软件 outlook / foxmail

3安装本地邮件服务器 – 易邮

outlook 连接本地邮件服务器 IPv6问题 

============手动发送邮件==============================

D:\Documents and Settings\park>telnet smtp.sina.cn 25

ehlo park

auth login

aXRoZWltYV9wYXJrQHNpbmEuY24=

cXExMjMzMjE=

mail from:<itheima_park@sina.cn>

rcpt to:<itheima_park@sohu.com>

Data

from:<itheima_park@sina.cn>

to:<itheima_park@sohu.com>

subject:  测试邮件

xxx 自作主张

.

Quit

=============Base64编码===============================

public class Base64 {

public static void main(String[] args) throws Exception {

System.out.print("请输入用户名:");

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

String userName = in.readLine();

System.out.print("请输入密码:");

String password = in.readLine();

BASE64Encoder encoder = new BASE64Encoder();

System.out.println("编码后的用户名为:" 

+ encoder.encode(userName.getBytes()));

System.out.println("编码后的密码为:" 

+ encoder.encode(password.getBytes()));

}

}

7、SMTP协议

SMTP协议 

1ehlo 主机名 (smtp2)

2auth login //经过base64编码后的用户名和密码

3mail from:<itcast1111@sohu.com>

4rcpt to:<itcast1111@sina.com>

5Data   .号代表邮件内容的结束

6quit

8、创建邮件——RFC822文档

1RFC822文档规定了如何编写一封简单邮件

邮件头和邮件体,两者使用空行分隔

邮件头

from字段 (发件人)

to字段 (收件人)

subject字段 (邮件标题)

cc(抄送)、bcc字段(暗送)

邮件体

邮件内容 

(2)利用RFC822文档漏洞发送假冒邮件

9POP3协议

POP3协议

1user<SP>username<CRLF> 

2pass<SP>password<CRLF>  

3stat<CRLF> 返回邮箱的统计信息

4list<SP>[msg#]<CRLF>返回某一封邮件的统计信息

5retr<SP>msg#<CRLF>  最重要的一个命令

6quit<CRLF> 

使用POP3协议手工接收邮件

10、使用JavaMail API 创建简单邮件 

1Message message = new MimeMessage(session);

2message.setFrom(new InternetAddress("aaa@estore.com"));

3message.setRecipient(RecipientType.TO, 

new InternetAddress("bbb@estore.com"));

4message.setSubject("简单邮件");

5message.setText("简单邮件正文");

11JavaMailMyEclipsejar 冲突解决

1JavaMailjava.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream错误

2原因

MyEclipsejavaee.jar中的mail包与JavaMail包冲突

3解决

MyEclipse目录下,找javaee.jar包,用WinRar打包,删除里面的mail目录和activation目录然后加入mail.jaractivition.jar

12使用JavaMail API收发邮件 

JavaMail API按其功能划分通常可分为如下三大类:

创建和解析邮件内容的API Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。 

1发送邮件的APITransport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。 

2接收邮件的APIStore类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。 

3Session类 

Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的TransportStore对象,以及为客户端创建Message对象时提供信息支持。 

13邮件发送程序

使用JavaMail发送一封简单的邮件:

创建包含邮件服务器的网络连接信息的Session对象。 

创建代表邮件内容的Message对象。 

创建Transport对象、连接服务器、发送Message、关闭连接。 

==============JavaMail发送简单邮件-=====================

@Test

public void test1() throws Exception, MessagingException{

Properties prop = new Properties();

prop.setProperty("mail.transport.protocol", "smtp");

prop.setProperty("mail.smtp.host", "localhost");

// prop.setProperty("mail.smtp.auth", "true");

prop.setProperty("mail.debug", "true");

Session session = Session.getInstance(prop);

Message msg = new MimeMessage(session);

msg.setFrom(new InternetAddress("aa@park.cn"));

msg.setRecipient(RecipientType.TO, new InternetAddress("bb@park.cn"));

msg.setSubject("来自javaMail的测试邮件!");

msg.setText("来自javaMail的正文内容。。");

Transport tran = session.getTransport();

tran.connect("aa", "123");

tran.send(msg, msg.getAllRecipients());

}

=========================================================

public static void main(String[] args) throws MessagingException {

Properties prop = new Properties();

prop.setProperty("mail.transport.protocol", "smtp");

prop.setProperty("mail.smtp.host", "smtp.sina.cn");

prop.setProperty("mail.smtp.auth", "true");

prop.setProperty("mail.debug", "true");

Session session = Session.getInstance(prop);

Message msg = new MimeMessage(session);

msg.setFrom(new InternetAddress("itheima_park@sina.cn"));

msg.setRecipient(RecipientType.TO, new InternetAddress("itheima_park@sohu.com"));

msg.setSubject("这是我写的标题XXXXXXXXXX");

msg.setText("这是邮件的正文");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaMail 是 Java 的一个邮件处理库,可以用它来发送和接收邮件。以下是使用 JavaMail 获取邮件源码的示例代码: ```java import java.util.Properties; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.MimeMessage; public class GetEmailSourceCode { public static void main(String[] args) throws Exception { // 邮箱登录信息 String host = "imap.xxx.com"; String username = "[email protected]"; String password = "your_password"; // 连接邮件服务器 Properties props = new Properties(); props.setProperty("mail.store.protocol", "imap"); props.setProperty("mail.imap.host", host); Session session = Session.getInstance(props); Store store = session.getStore("imap"); store.connect(host, username, password); // 获取收件箱 Folder inbox = store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); // 获取最新的一封邮件 Message message = inbox.getMessage(inbox.getMessageCount()); // 获取邮件源码 MimeMessage mimeMessage = (MimeMessage) message; String sourceCode = mimeMessage.getContent().toString(); System.out.println(sourceCode); // 关闭连接 inbox.close(false); store.close(); } } ``` 在代码中,我们首先定义了邮件服务器的登录信息,包括主机名、用户名和密码。然后,我们使用 JavaMail 的 `Properties` 类来设置邮件协议和主机名等参数,并使用 `Session.getInstance()` 方法创建一个邮件会话对象。接着,我们使用 `store.connect()` 方法连接到邮件服务器。 然后,我们通过 `store.getFolder()` 方法获取收件箱,并使用 `inbox.open()` 方法打开它。接下来,我们调用 `inbox.getMessage()` 方法获取最新的一封邮件,并将其转换为 `MimeMessage` 对象。最后,我们可以通过调用 `mimeMessage.getContent()` 方法获取邮件源码。 最后,我们关闭连接,包括收件箱和存储对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值