JAVA发送邮件
来源:互联网 发布:常用的数据分析模型 编辑:程序博客网 时间:2024/06/16 07:37
JAVA MAIL邮件发送简介及用途
JAVA MAIL是利用现有的邮箱账户向指定邮箱发送邮件信息,项目实际用途还是比较多的,如用户账户密码找回验证,登录验证,邮箱注册等.....本文以QQ邮箱为例向大家展示如何通过javax.mail.jar来实现邮件推送。
JAVA MAIL资源下载
大家可以从SUN官网下载javax.mail.jar,也可以从我的个人资源处下载该固件:
http://download.csdn.net/download/brianang/10044961
本文档源码Demo同步下载:
http://download.csdn.net/download/brianang/10044974
JAVA MAIL API主要内容
在JavaMail中存放的核心类:
Session,Message,Address,Authenticator,Transposrt,Store,Folder;在javax\mail\internet文件夹下存放着常用的子类。
Session
Session类定义邮件的基本会话,获取方式可以通过Session提供的getDefaultInstance()或getInstance()静态工厂方法获取Session会话对象
EXP:
Properties properties = new Properties();Session session = Session.getDefaultInstance();或Session session = Session.getInstance();
我们可以通过Session的setDebug()来设置是否启用调试监控模式
EXP:
session.setDebug(true);
Message
创建Session后即可创建邮件信息体,SUN公司提供了Message这个类来帮助开发者完成信息体构建,但由于Message是一个抽象类,在具体使用时我们通过internet下的MimeMesage来具体实现信息体的构建。
EXP:
MimeMessage mimeMessage = new MimeMessage(session);创建好MimeMessage后便开始设置邮件信息体的具体参数:
EXP:
mimeMessage.setFrom(new InternetAddress(sendAccount,sendUserName,"utf-8"));mimeMessage.setReplyTo(new InternetAddress(sendAccount,sendUserName,"utf-8"));
setRecipient():设置收件人信息
EXP:
mimeMessage.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveAccount,receiveUserName,"utf-8"));
addRecipient():添加收件人信息
EXP:
mimeMessage.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveAccount,receiveUserName,"utf-8"));
setSubject():设置邮件主题
EXP:
mimeMessage.setSubject("测试邮件","utf-8"));
setContent():设置邮件内容,也可以通过setText()方法设置邮件内容
EXP:
mimeMessage.setContent("<p>这是一条测试邮件!</p>","text/html")或mimeMessage.setText("这是一条测试邮件!");可以看出这两个方法是有区别的,setText只能设置简单的文本信息,而setContext还可以设置超文本标签语言,所以在实际的使用中根据自己的实际情况来选择使用什么方法。
EXP:
mimeMessage.setSentDate(emailSendDate);添加带有附件的邮件
EXP:
Message message = new MimeMessage(session);message.setFrom(new InternetAddress(from));message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));message.setSubject("Hello JavaMail Attachment");BodyPart messageBodyPart = new MimeBodyPart();messageBodyPart.setText("Pardon Ideas");Multipart multipart = new MimeMultipart();multipart.addBodyPart(messageBodyPart);messageBodyPart = new MimeBodyPart();DataSource source = new FileDataSource(filename);messageBodyPart.setDataHandler(new DataHandler(source));messageBodyPart.setFileName(filename);multipart.addBodyPart(messageBodyPart);message.setContent(multipart);Transport.send(message);
Address
Address即邮件地址类,和Message一样Address也是一个抽象类,所以要通过InternetAddress子类来构建邮件地址对象,构建邮件地址对象时可以传入用户名,也可以不传
EXP:
Address address = new InternetAddress("123321@QQ.com");或Address address = new InternetAddress("123321@qq.com","wangjunwei");
收件人配置
- 邮件地址创建后通过上文可以看到我们可以通过Message的setFrom或setReplyTo来设置发件人信息,如果存在多个发件人通过addFrom方法来实现。
- 可以通过Message的setRecipient方法来设置收件人信息,在设置收件人信息是我们通过Message.RecipientType来区分收件人:
- Message.RecipientType.TO:发送
- Message.RecipientType.CC:抄送
- Message.RecipientType.BCC:密送
Authenticator
Properties properties = new Properties();Authenticator authenticator = new MyAuthenticator();Session session = Session.getDefaultInstance(properties,authenticator);
Transport
Transport.send();
mimeMessage.saveChanges();Transport transport = session.getTransport("smtp");transport.connect(host, username, password);transport.sendMessage(message, message.getAllRecipients());transport.close();
JAVA MAIL邮件发送源码展示
创建邮件
/** * 创建邮件 * @param session 邮件会话 * @param sendAccount 发送账号 * @param sendUserName 发送用户名 * @param receiveAccount 接收账号 * @param receiveUserName 接收用户名 * @param emailTitel 邮件标题 * @param emailContent 邮件内容 * @param emailSendDate 邮件发送时间 * @return 邮件对象 * @throws Exception */public static MimeMessage createMimeMessage(Session session,String sendAccount,String sendUserName,String receiveAccount,String receiveUserName,String emailTitel,String emailContent,Date emailSendDate) throws Exception{MimeMessage mimeMessage = new MimeMessage(session);mimeMessage.setFrom(new InternetAddress(sendAccount,sendUserName,"utf-8"));//收件人mimeMessage.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveAccount,receiveUserName,"utf-8"));//添加收件人mimeMessage.addRecipient(MimeMessage.RecipientType.TO,new InternetAddress(receiveAccount,receiveUserName,"utf-8"));//设置抄送mimeMessage.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress(receiveAccount,receiveUserName,"utf-8"));//设置密送mimeMessage.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress(receiveAccount,receiveUserName,"utf-8"));//设置标题mimeMessage.setSubject(emailTitel,"utf-8");//设置邮件正文mimeMessage.setContent(emailContent,"text/html;charset=UTF-8");//设置发件时间mimeMessage.setSentDate(emailSendDate);//保存邮件设置mimeMessage.saveChanges();return mimeMessage;}
发送邮件
private static String EmailSendAccount = "misslove3290@qq.com";private static String EmailSendAccountPWD = "eonpaepqktxubfbi";private static String EmailSendSMTPHOST = "smtp.qq.com";public static void SendEmail(String sendAccount,String sendUserName,String receiveAccount,String receiveUserName,String emailTitel,String emailContent,Date emailSendDate) throws Exception{Properties properties = new Properties();properties.setProperty("mail.transport.protocol", "smtp");//设置邮件协议properties.setProperty("mail.smtp.host", EmailSendSMTPHOST);//设置邮件授权参数properties.setProperty("mail.smtp.auth", "true");//设置认证方式// PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),// 如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,// 打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。// SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,// 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,// QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)/*final String smtpPort = "465";properties.setProperty("mail.smtp.port", smtpPort);properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");properties.setProperty("mail.smtp.socketFactory.fallback", "false");properties.setProperty("mail.smtp.socketFactory.port", smtpPort);*///根据配置创建会话对象, 用于和邮件服务器交互Session session = Session.getDefaultInstance(properties);// 设置为debug模式, 可以查看详细的发送 logsession.setDebug(true);// 创建一封邮件MimeMessage mimeMessage = createMimeMessage(session, sendAccount, sendUserName, receiveAccount,receiveUserName, emailTitel, emailContent, emailSendDate);// 创建邮件传输对象Transport transport = session.getTransport();transport.connect(EmailSendAccount, EmailSendAccountPWD);transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());transport.close();}
测试
public static void main(String[] args) throws Exception {Email.SendEmail("misslove3290@qq.com","王俊伟","524579270@qq.com", "wangjunwei", "测试邮件", "测试邮件正文。。。", new Date());}
注意:
- [java]Java发送邮件
- java 邮件发送 --- 简单的邮件发送
- JAVA发送邮件及springboot发送邮件
- 用java发送邮件
- 用Java发送邮件
- java发送邮件源码
- java发送邮件
- Java发送邮件
- Java发送邮件程序
- java发送Email邮件
- 怎样用java发送邮件
- 利用java发送邮件
- java 邮件发送
- java邮件发送
- java邮件发送
- java定时发送邮件
- java发送邮件代码
- Java Mail 发送邮件
- [HAOI2015]数字串拆分(矩阵乘法)
- javascript之贪吃蛇案例
- 词嵌入2017年进展全面梳理:趋势和未来方向
- 数据结构学习笔记(二) 链表之单链表的基本操作
- XML解析SAX与DOM
- JAVA发送邮件
- [Leetcode][python]Largest Rectangle in Histogram
- 「安卓干货铺」节后送书福利-感谢大家一直以来对我的支持!
- fastdfs-nginx-module_v1.16.tar.gz 下载
- 整数的大数加减
- 算法分析与设计week07--435. Non-overlapping Intervals
- 递归实现pow内建函数和欧几里德算法
- 171022系统虚拟机管理2
- GalaxyOJ-947 (三分)