JAVA代码发送邮件示例和解释
下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,好在昨晚终于走通代码成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释:
- package test;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.Properties;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import javax.mail.Address;
- import javax.mail.Authenticator;
- import javax.mail.BodyPart;
- import javax.mail.Message;
- import javax.mail.PasswordAuthentication;
- import javax.mail.Session;
- import javax.mail.Transport;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeBodyPart;
- import javax.mail.internet.MimeMessage;
- import javax.mail.internet.MimeMultipart;
- import com.sun.mail.util.MailSSLSocketFactory;
- ///**
- // *
- // * @author zengyuan
- // * @date Jan 15, 2016 - 9:55:48 AM
- // * @Description 邮件发送测试类
- // */
- public class sendMailTest {
- public static void main(String[] args) throws Exception {
- // 配置信息
- Properties pro = new Properties();
- pro.put("mail.smtp.host", "smtp.163.com");
- pro.put("mail.smtp.auth", "true");
- // SSL加密
- MailSSLSocketFactory sf = null;
- sf = new MailSSLSocketFactory();
- // 设置信任所有的主机
- sf.setTrustAllHosts(true);
- pro.put("mail.smtp.ssl.enable", "true");
- pro.put("mail.smtp.ssl.socketFactory", sf);
- // 根据邮件的会话属性构造一个发送邮件的Session,这里需要注意的是用户名那里不能加后缀,否则便不是用户名了
- //还需要注意的是,这里的密码不是正常使用邮箱的登陆密码,而是客户端生成的另一个专门的授权码
- MailAuthenticator authenticator = new MailAuthenticator("tuzongxun123",
- "客户端授权码");
- Session session = Session.getInstance(pro, authenticator);
- // 根据Session 构建邮件信息
- Message message = new MimeMessage(session);
- // 创建邮件发送者地址
- Address from = new InternetAddress("tuzongxun123@163.com");
- // 设置邮件消息的发送者
- message.setFrom(from);
- // 验证收件人邮箱地址
- List<String> toAddressList = new ArrayList<>();
- toAddressList.add("1160569243@qq.com");
- StringBuffer buffer = new StringBuffer();
- if (!toAddressList.isEmpty()) {
- String regEx = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
- Pattern p = Pattern.compile(regEx);
- for (int i = 0; i < toAddressList.size(); i++) {
- Matcher match = p.matcher(toAddressList.get(i));
- if (match.matches()) {
- buffer.append(toAddressList.get(i));
- if (i < toAddressList.size() - 1) {
- buffer.append(",");
- }
- }
- }
- }
- String toAddress = buffer.toString();
- if (!toAddress.isEmpty()) {
- // 创建邮件的接收者地址
- Address[] to = InternetAddress.parse(toAddress);
- // 设置邮件接收人地址
- message.setRecipients(Message.RecipientType.TO, to);
- // 邮件主题
- // message.setSubject("java邮件测试");
- message.setSubject("为什么错了");
- // 邮件容器
- MimeMultipart mimeMultiPart = new MimeMultipart();
- // 设置HTML
- BodyPart bodyPart = new MimeBodyPart();
- // 邮件内容
- // String htmlText = "java邮件测试111";
- String htmlText = "为什么错了";
- bodyPart.setContent(htmlText, "text/html;charset=utf-8");
- mimeMultiPart.addBodyPart(bodyPart);
- // 添加附件
- List<String> fileAddressList = new ArrayList<String>();
- fileAddressList
- .add("C:\\Users\\tuzongxun123\\Desktop\\新建 Microsoft Office Word 文档.docx");
- if (fileAddressList != null) {
- BodyPart attchPart = null;
- for (int i = 0; i < fileAddressList.size(); i++) {
- if (!fileAddressList.get(i).isEmpty()) {
- attchPart = new MimeBodyPart();
- // 附件数据源
- DataSource source = new FileDataSource(
- fileAddressList.get(i));
- // 将附件数据源添加到邮件体
- attchPart.setDataHandler(new DataHandler(source));
- // 设置附件名称为原文件名
- attchPart.setFileName(MimeUtility.encodeText(source
- .getName()));
- mimeMultiPart.addBodyPart(attchPart);
- }
- }
- }
- message.setContent(mimeMultiPart);
- message.setSentDate(new Date());
- // 保存邮件
- message.saveChanges();
- // 发送邮件
- Transport.send(message);
- }
- }
- }
- class MailAuthenticator extends Authenticator {
- /**
- * 用户名
- */
- private String username;
- /**
- * 密码
- */
- private String password;
- /**
- * 创建一个新的实例 MailAuthenticator.
- *
- * @param username
- * @param password
- */
- public MailAuthenticator(String username, String password) {
- this.username = username;
- this.password = password;
- }
- public String getPassword() {
- return password;
- }
- @Override
- protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(username, password);
- }
- public String getUsername() {
- return username;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
JAVA代码发送邮件示例和解释的更多相关文章
- JAVA代码发送邮件示例和解释(二)
之前有使用过一次在程序中发邮件的功能,也写了一篇相关的笔记,当时使用的是163邮箱,经过测试多个163账号都是可行的.但是最近把账号换成中国移动@chinamobilesz.com这种结尾的时候,却一 ...
- demo1 spark streaming 接收 kafka 数据java代码WordCount示例
1. 首先启动zookeeper windows上的安装见zk 02之 Windows安装和使用zookeeper 启动后见: 2. 启动kafka windows的安装kafka见Windows上搭 ...
- javaMail (java代码发送邮件)
第一在邮件账户设置开启以下两个 需要发送短信获取 授权码. 代码如下: package com.hjb.javaMail; import javax.mail.*; import javax.mai ...
- spark streaming 接收 kafka 数据java代码WordCount示例
http://www.cnblogs.com/gaopeng527/p/4959633.html
- 使用Java代码发送邮件
- 在Android源码中查找Java代码中native函数对应的C++实现
Android源码中很多关键代码都是C++实现的,java通过jni来调用,经常会看到java中这样的代码: static native Thread currentThread(); 如何根据方法名 ...
- JMETER通过java代码通过代码/ JMETER API实现示例进行负载测试
本教程试图解释Jmeter的基本设计,功能和用法,Jmeter是用于在应用程序上执行负载测试的优秀工具.通过使用jmeter GUI,我们可以根据我们的要求为请求创建测试样本并执行具有多个用户负载的样 ...
- 在Eclipse中运行JAVA代码远程操作HBase的示例
在Eclipse中运行JAVA代码远程操作HBase的示例 分类: 大数据 2014-03-04 13:47 3762人阅读 评论(2) 收藏 举报 下面是一个在Windows的Eclipse中通过J ...
- 提高Java代码质量的Eclipse插件之Checkstyle的使用具体解释
CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发者遵守某些编码规范的工具.它可以自己主动化代码规范检查过程.从而使得开发者从这项重要可是枯燥的任务中解脱出来. Ch ...
随机推荐
- USACO 刷水
BZOJ 1666 水.. BZOJ 1579 分层图最短路. BZOJ 1782 从一开始若某头牛停在U,那么U的子树的时间都会加一用BIT维护DFS序就行了 BZOJ 1572 贪心+堆 排序后查 ...
- 驱动实现led,pwm和中断基础知识
2015.4.8星期三 晴天 今天老师讲的内容是内核编写led和pwm驱动,实现花样灯和放歌的功能.理解应用和驱动的对接,最后自己实现了在放歌的时候根据歌曲的节奏亮灭一个小灯,应为两个独立的驱动都已经 ...
- iOS UITextField限制输入数字
有时候项目中要求文本框中只能输入数字,如:价格.公里数.费用等等,一般的文本框不限制输入的格式,这时候只能强制限制输入框的输入格式了,代码如下: #import "ViewControlle ...
- layabox 引擎
layabox H5引擎性能之王LayaAir http://ldc.layabox.com/
- 记录一些PHP7RCC1编译问题
1,php7rc1源码编译undefined symboles的问题 自己计划将php7环境部署到cubieboard上,懒得去找别人预编译的版本,所以动手从源码编译,中间遇到了一个小问题,此处记录一 ...
- SqlServer 触发器
--创建insert类型的触发器create trigger tgr_product_insert --创建触发器 on product --所针对的表 for insert --触发 ...
- mysql my.cnf 配置详解
#配置多实例声明[mysqld_multi]mysqld = /data/mysql_bin/bin/mysqld_safemysqladmin = /data/mysql_bin/bin/mysql ...
- css 文本气泡样式
1.简易气泡 eg: html部分: <div class="bubble">我是气泡文本</div> css部分: //小三角.bubble:before ...
- sdk 简单说明文档草稿。
SDK初始化: HighApi为SDK核心类,请客户端持有其唯一单例对API进行调用. HighApi构造器函数 HighApi(Context appContext, final String ap ...
- CentOS7 安装 net-speeder 提升 VPS 网络性能
参考:http://blog.csdn.net/u010027419/article/details/46129639 1.安装依赖库 先安装epel源 rpm -Uvh http://dl.fedo ...