Java实现发送邮件,图片,附件
- 格式:pdf
- 大小:146.80 KB
- 文档页数:4
Java实现发送邮件,图⽚,附件
1、JavaMail 介绍
JavaMail 是sun公司(现以被甲⾻⽂收购)为⽅便Java开发⼈员在应⽤程序中实现邮件发送和接收功能⽽提供的⼀套标准开发包,它⽀持⼀些常⽤的邮件协议,如前⾯所讲的SMTP,POP3,IMAP,还有MIME等。我们在使⽤JavaMail API 编写邮件时,⽆须考虑邮件的底层实现细节,只要调⽤JavaMail 开发包中相应的API类就可以了。JavaMail 下载地址:2、JavaMail API
JavaMail API 按照功能可以划分为如下三⼤类:①、创建和解析邮件的API②、发送邮件的API③、接收邮件的API
以上三种类型的API在JavaMail 中由多个类组成,但是主要有四个核⼼类,我们在编写程序时,记住这四个核⼼类,就很容易编写出Java邮件处理程序。
Message 类:javax.mail.Message 类是创建和解析邮件的核⼼ API,这是⼀个抽象类,通常使⽤它的⼦类javax.mail.internet.MimeMessage 类。它的实例对象表⽰⼀份电⼦邮件。客户端程序发送邮件时,⾸先使⽤创建邮件的 JavaMail API 创建出封装了邮件数据的 Message 对象,然后把这个对象传递给邮件发送API(Transport 类) 发送。客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message 类的实例中,客户端程序在使⽤邮件解析API从这个对象中解析收到的邮件数据。Transport 类:javax.mail.Transport 类是发送邮件的核⼼API 类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如 SMTP 协议,客户端程序创建好Message 对象后,只需要使⽤邮件发送API 得到 Transport 对象,然后把 Message 对象传递给 Transport 对象,并调⽤它的发送⽅法,就可以把邮件发送给指定的 SMTP服务器。Store 类:javax.mail.Store 类是接收邮件的核⼼ API 类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如 POP3 协议,客户端程序接收邮件时,只需要使⽤邮件接收 API 得到 Store 对象,然后调⽤ Store 对象的接收⽅法,就可以从指定的 POP3 服务器获得邮件数据,并把这些邮件数据封装到表⽰邮件的 Message 对象中。Session 类:javax.mail.Session 类⽤于定义整个应⽤程序所需的环境信息,以及收集客户端与邮件服务器建⽴⽹络连接的会话信息,例如邮件服务器的主机名、端⼝号、采⽤的邮件发送和接收协议等。Session 对象根据这些信息构建⽤于邮件收发的 Transport 和 Store 对象,以及为客户端创建 Message 对象时提供信息⽀持。3、使⽤ JavaMail 发送简单的纯⽂本邮件
我是⽤的 sun的javax.mail.jar
com.sun.mail
javax.mail
1.6.2
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
/**
* 简单的发送邮件
*/
public class JavaEmailDemo {
public static void main(String[] args) throws Exception {
//1. 创建参数配置, ⽤于连接邮件服务器的参数配置
Properties props = new Properties();
//邮箱协议
props.setProperty("mail.transport.protocol", "smtp");//使⽤协议:mstp
//邮箱协议地址
//发件⼈邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, ⼀般格式为: smtp.xxx.com
props.setProperty("mail.smtp.host", "smtp.qq.com");//协议地址
//邮箱协议端⼝号
props.setProperty("mail.smtp.port", "465");//协议端⼝号
//邮箱是否需要授权
props.setProperty("mail.smpt.auth", "true");//需要授权
//qq:需要 ssl安全认证
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
//没经过 ssl认证的不处理
props.setProperty("mail.smtp.socketFactory.fallback", "false");
//ssl 端⼝号
props.setProperty("mail.smtp.socketFactory.port", "465");
//2. 根据配置创建会话对象, ⽤于和邮件服务器交互
Session session = Session.getInstance(props);
//开启⽇志
session.setDebug(true);
//3. 创建邮件
Message message = createMessage(session, "888888@qq.com", "666666@qq.com");
//4. 根据 session 获取传输对象
Transport transport = session.getTransport();
//5. 使⽤ 邮箱账号 和 密码 连接邮件服务器, 这⾥认证的邮箱必须与 message 中的发件⼈邮箱⼀致, 否则报错
/*
* PS_01: 成败的判断关键在此⼀句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log, * ======>仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
* ======>类型到对应邮件服务器的帮助⽹站上查看具体失败原因。
* PS_02: 连接失败的原因通常为以下⼏点, 仔细检查代码:
* ======>(1) 邮箱没有开启 SMTP 服务;
* ======>(2) 邮箱密码错误, 例如某些邮箱开启了独⽴密码;
* ======>(3) 邮箱服务器要求必须要使⽤ SSL 安全连接;
* ======>(4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
* ======>(5) 如果以上⼏点都确定⽆误, 到邮件服务器⽹站查找帮助。
* PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
* */
transport.connect("888888@qq.com", "aaaaaaa");//邮箱,授权码
//6. 发送邮件,, 发到所有的收件地址,
// message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件⼈, 抄送⼈, 密送⼈
transport.sendMessage(message, message.getAllRecipients());
//7. 关闭连接
transport.close();
System.out.println("发送成功");
}
/**
*
* @param session 和服务器交互的会话
* @param addresser 发件⼈邮箱
* @param receiver 收件⼈邮箱
* @return MimeMessage 简单邮件
* @throws Exception
*/
public static Message createMessage(Session session, String addresser, String receiver) throws Exception {
//邮件:标题,正⽂,收件⼈,发件⼈, {附件,图⽚}
//1. 创建⼀封邮件
MimeMessage message = new MimeMessage(session);
//2. From: 发件⼈(昵称有⼴告嫌疑,避免被邮件服务器误认为是滥发⼴告以⾄返回失败,请修改昵称)
/*
* 发件⼈
* setFrom(Address address)
* InternetAddress(String 发件⼈, String 发件⼈的名字, String 字符集)
* */
Address address = new InternetAddress(addresser, "jack", "utf-8");
message.setFrom(addresser);//addFrom 是数组,setFrom 是单个
//3. 收件⼈
/*
* 收件⼈
* setRecipients(RecipientType type, Address[] addresses)
* setRecipient(RecipientType type, Address address)
* ==>type:收件⼈类型;to 普通收件⼈,cc 抄送,bcc 密送
* ==>address:收件⼈
* */
message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress(receiver, "rose普通收件⼈", "utf-8"));
//4. 主题
/*
* 主题
* setSubject(String 主题, String 字符集)
* */
message.setSubject("⼭⿁谣", "utf-8");
//5. 正⽂ (可以使⽤html标签)(内容有⼴告嫌疑,避免被邮件服务器误认为是滥发⼴告以⾄返回失败,请修改发送内容)
/*
* 正⽂
* setContent(Object 正⽂, String 类型)
* */
message.setContent("你被⼭西挖矿⼤学录取了,请于2⽉30⽇25时61分61秒,请及时到来.", "text/html;charset=utf-8");
//6. 设置发件时间
/*
* 发送时间
* */
message.setSentDate(new Date());
//7. 保存设置
/*
* 保存邮件
* */
message.saveChanges();
return message;
}
}
4、使⽤ JavaMail 发送带图⽚、附件的邮件