java发送邮件354_JavaMail邮件发送<一>

电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如果通过java代码来创建电子邮件,并连接邮件服务器发送邮件。

1. 电子邮件协议

电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

拓展->对常用电子邮件协议的简单介绍

1.1、STMP

SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。通常它工作在两种情况下:一是邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。SMTP是一个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。

SMTP的连接和发送过程

(a)建立TCP连接

(b)客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;

服务器端正希望以OK作为响应,表明准备接收

(c)客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;

服务器端则表示是否愿意为收件人接收邮件

(d)协商结束,发送邮件,用命令DATA发送

(e)以.表示结束输入内容一起发送出去

(f)结束此次发送,用QUIT命令退出

实例:

C: telent SMTP.163.com 25  //以telenet方式连接163邮件服务器

S: 220 163.com Anti-spam GT for Coremail System //220为响应数字,其后的为欢迎信息

C: HELO SMTP.163.com //除了HELO所具有的功能外,EHLO主要用来查询服务器支持的扩充功能

S: 250-mail

S: 250-AUTH LOGIN PLAIN

S: 250-AUTH=LOGIN PLAIN

S: 250 8BITMIME //最后一个响应数字应答码之后跟的是一个空格,而不是'-'

C: AUTH LOGIN   //请求认证

S: 334 dxNlcm5hbWU6  //服务器的响应——经过base64编码了的“Username”=

C: Y29zdGFAYW1heGl0Lm5ldA==  //发送经过BASE64编码了的用户名

S: 334 UGFzc3dvcmQ6  //经过BASE64编码了的"Password:"=

C: MTk4MjIxNA==  //客户端发送的经过BASE64编码了的密码

S: 235 auth successfully  //认证成功

C: MAIL FROM: bripengandre@163.com  //发送者邮箱

S: 250 … .  //“…”代表省略了一些可读信息

C: RCPT TO: bripengandre@smail.hust.edu.cn //接收者邮箱

S: 250 … .    // “…”代表省略了一些可读信息

C: DATA //请求发送数据

S: 354 Enter mail, end with "." on a line by itself

C: Enjoy Protocol Studing

C: .

S: 250 Message sent

C: QUIT //退出连接

S: 221 Bye

1.2、POP3

POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。

协议特性

POP3协议默认端口:110

POP3协议默认传输协议:TCP

POP3协议适用的构架结构:C/S

POP3协议的访问模式:离线访问

POP3示意图如下:

c5dd4900f9037a94c8aed8e3d83369ca.png

2、创建一封简单的电子邮件

JAVA邮件发送的大致过程是这样的:

1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。

2、构建一个properties文件,该文件中存放SMTP服务器地址等参数。

3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。

4、构建邮件内容,一般是javax.mail.internet.MimeMessage对象,并指定发送人,收信人,主题,内容等等。

5、使用javax.mail.Transport工具类发送邮件。

Other>>>>>>>>

首先创建一个 Java 工程,把下载好的 javax.mail.jar 作为类库加入工程,这里不多说。

邮件创建步骤:

创建一个邮件对象(MimeMessage);

设置发件人,收件人,可选增加多个收件人,抄送人,密送人;

设置邮件的主题(标题);

设置邮件的正文(内容);

设置显示的发送时间;

保存到本地。

示例代码:

import java.util.Properties;

import javax.mail.Authenticator;

import javax.mail.Message;

import javax.mail.Message.RecipientType;

import javax.mail.MessagingException;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

public class JavaMailTest {

public static void main(String[] args) throws AddressException,

MessagingException {

// 配置发送邮件的环境属性

final Properties props = new Properties();

/*

* 可用的属性: mail.store.protocol / mail.transport.protocol / mail.host /mail.user / mail.from

*/

// 表示SMTP发送邮件,需要进行身份验证

props.put("mail.smtp.auth", "true");

props.put("mail.smtp.host", "smtp.163.com");

// 发件人的账号

props.put("mail.user", "#########@163.com");

// 访问SMTP服务时需要提供的密码

props.put("mail.password", "############");

// 构建授权信息,用于进行SMTP进行身份验证

Authenticator authenticator = new Authenticator() {

@Override

protected PasswordAuthentication getPasswordAuthentication() {

// 用户名、密码

String userName = props.getProperty("mail.user");

String password = props.getProperty("mail.password");

return new PasswordAuthentication(userName, password); // 返回需要进行验证的用户名和密码

}

};

// 使用环境属性和授权信息,创建邮件会话

Session mailSession = Session.getInstance(props, authenticator);

// 创建邮件消息

MimeMessage message = new MimeMessage(mailSession);

// 设置发件人

InternetAddress form = new InternetAddress(props.getProperty("mail.user"));

message.setFrom(form);

// 设置收件人

InternetAddress to = new InternetAddress("########@qq.com");

message.setRecipient(RecipientType.TO, to);

// 设置邮件标题

message.setSubject("这是测试邮件");

// 设置邮件的内容体

message.setContent("Java Mail,小试牛刀~", "text/html;charset=UTF-8");

// 发送邮件

Transport.send(message);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于使用JavaMail发送和读取邮件的问题,我可以给你一些简单的介绍。 首先,你需要导入JavaMail的jar包,然后创建Session对象,设置邮件服务器的配置信息和账号授权信息。例如: ```java Properties props = new Properties(); props.setProperty("mail.smtp.host", "smtp.example.com"); props.setProperty("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your_username", "your_password"); } }); ``` 然后,你可以使用Message对象来创建邮件内容,并使用Transport对象将邮件发送出去。例如: ```java Message message = new MimeMessage(session); message.setFrom(new InternetAddress("sender@example.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com")); message.setSubject("Testing JavaMail"); message.setText("Hello World!"); Transport.send(message); ``` 如果你需要读取邮件,也可以使用JavaMail提供的API。你需要连接到邮件服务器,打开收件箱,并遍历所有邮件。例如: ```java Store store = session.getStore("pop3"); store.connect("pop3.example.com", "your_username", "your_password"); Folder inbox = store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); Message[] messages = inbox.getMessages(); for (int i = 0; i < messages.length; i++) { Message message = messages[i]; System.out.println("Subject: " + message.getSubject()); } inbox.close(false); store.close(); ``` 这只是JavaMail的简单使用方式,如果你需要更多的功能,可以参考JavaMail的官方文档或者其他相关的教程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值