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 ...
随机推荐
- Cosh.3
查壳.没有 拖 OD 查找字符串 找到有用的东西 顺线往上看 找到 大概算入口处 下断 就从这里开始 单步下去吧 name的变幻 Serial的变幻 直接翻译出来了 继续看看 ...
- 将对象序列化,反序列化到XML
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- python-selenium之firefox、Chrome、Ie运行
测试脚本是否支持在不同浏览器运行firefox浏览器运行脚本 from selenium import webdriver driver=webdriver.Firefox() driver.get( ...
- 第三个Sprint团队贡献分
201306114322 邵家文 50分 201306114319 陈俊金 10分 201306114320 李新 10分 201306114324 朱浩龙 10分
- ubuntu 14.04安装右键打开终端功能
命令行运行,安装完成后需重启: sudo apt-get install nautilus-open-terminal
- VLOOKUP
vlookup(查找目标,查找范围, 返回值的列数,精确或模糊查找) 1. 查找目标:查找的内容或者单元格引用. 2. 查找范围: 选定一个查找区域. 注意一: 查找目标一定要在该区域的第一列. 注意 ...
- (实用篇)php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中.内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI <?php class ...
- entity framework 数据加载三种方式的异同(延迟加载,预加载,显示加载)
三种加载方式的区别 显示加载: 显示加载
- Android---闪频页和倒计时
android闪频的实现非常简单,使用Handler对象的postDelayed()方法就可以实现.在这个方法里传递一个Runnable对象和一个延迟的时间.该方法实现了一个延迟执行的效果,延迟的时间 ...
- include/linux/tasks.h
#ifndef _LINUX_TASKS_H#define _LINUX_TASKS_H /* * This is the maximum nr of tasks - change it if you ...