闲来无事,想了解一下java怎么发送邮件,然后百度了一下,看看别人的样例,自己整合了一套代码。

jar包的话只需要下一个:mail.jar;从百度云盘下载:

https://pan.baidu.com/s/1c2yvL2w

里面也有工程代码,下面我主要讲讲具体是怎么实现的。

首先因为是针对qq邮箱,所以对别的邮箱要有稍稍改动。其实我一开始是想写成163邮箱的,因为限制太大,老是被认为垃圾邮件发布出去,所以就用qq邮箱了。

前期准备:先要到qq邮箱的设置下,点击账户选项,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,然后开启POP3/SMTP服务。接着就会获取一段授权密码。记下来等下发邮件需要用到。

代码如下:解释在注释下

import java.io.UnsupportedEncodingException;

import java.util.Date;

import java.util.Properties;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.Authenticator;

import javax.mail.BodyPart;

import javax.mail.Message.RecipientType;

import javax.mail.MessagingException;

import javax.mail.Multipart;

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 javax.mail.internet.MimeUtility;

/**

* 发送邮件的测试程序(适用qq邮箱)

* 通过本人的qq邮箱: xxx@qq.com 发送邮件

* @author miaoch

*

*/

public class MailTest {

//发送的邮箱 内部代码只适用qq邮箱

private static final String USER = "xxx@qq.com";

//授权密码 通过QQ邮箱设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务->开启POP3/SMTP服务获取

private static final String PWD = "wtyvpggofkubbhci";

private String[] to;

private String[] cc;//抄送

private String[] bcc;//密送

private String[] fileList;//附件

private String subject;//主题

private String content;//内容,可以用html语言写

public void sendMessage() throws MessagingException, UnsupportedEncodingException {

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

final Properties props = new Properties();

//下面两段代码是设置ssl和端口,不设置发送不出去。

props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

//props.setProperty("mail.smtp.port", "465");

props.setProperty("mail.smtp.socketFactory.port", "465");

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

props.setProperty("mail.transport.protocol", "smtp");// 设置传输协议

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

props.put("mail.smtp.host", "smtp.qq.com");//QQ邮箱的服务器 如果是企业邮箱或者其他邮箱得更换该服务器地址

// 发件人的账号

props.put("mail.user", USER);

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

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

// 构建授权信息,用于进行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);

BodyPart messageBodyPart = new MimeBodyPart();

Multipart multipart = new MimeMultipart();

// 设置发件人

InternetAddress form = new InternetAddress(

props.getProperty("mail.user"));

message.setFrom(form);

//发送

if (to != null) {

String toList = getMailList(to);

InternetAddress[] iaToList = new InternetAddress().parse(toList);

message.setRecipients(RecipientType.TO, iaToList); // 收件人

}

//抄送

if (cc != null) {

String toListcc = getMailList(cc);

InternetAddress[] iaToListcc = new InternetAddress().parse(toListcc);

message.setRecipients(RecipientType.CC, iaToListcc); // 抄送人

}

//密送

if (bcc != null) {

String toListbcc = getMailList(bcc);

InternetAddress[] iaToListbcc = new InternetAddress().parse(toListbcc);

message.setRecipients(RecipientType.BCC, iaToListbcc); // 密送人

}

message.setSentDate(new Date()); // 发送日期 该日期可以随意写,你可以写上昨天的日期(效果很特别,亲测,有兴趣可以试试),或者抽象出来形成一个参数。

message.setSubject(subject); // 主题

message.setText(content); // 内容

//显示以html格式的文本内容

messageBodyPart.setContent(content,"text/html;charset=utf-8");

multipart.addBodyPart(messageBodyPart);

//保存多个附件

if(fileList!=null){

addTach(fileList, multipart);

}

message.setContent(multipart);

// 发送邮件

Transport.send(message);

}

public void setTo(String[] to) {

this.to = to;

}

public void setCc(String[] cc) {

this.cc = cc;

}

public void setBcc(String[] bcc) {

this.bcc = bcc;

}

public void setSubject(String subject) {

this.subject = subject;

}

public void setContent(String content) {

this.content = content;

}

public void setFileList(String[] fileList) {

this.fileList = fileList;

}

private String getMailList(String[] mailArray) {

StringBuffer toList = new StringBuffer();

int length = mailArray.length;

if (mailArray != null && length < 2) {

toList.append(mailArray[0]);

} else {

for (int i = 0; i < length; i++) {

toList.append(mailArray[i]);

if (i != (length - 1)) {

toList.append(",");

}

}

}

return toList.toString();

}

//添加多个附件

public void addTach(String fileList[], Multipart multipart) throws MessagingException, UnsupportedEncodingException {

for (int index = 0; index < fileList.length; index++) {

MimeBodyPart mailArchieve = new MimeBodyPart();

FileDataSource fds = new FileDataSource(fileList[index]);

mailArchieve.setDataHandler(new DataHandler(fds));

mailArchieve.setFileName(MimeUtility.encodeText(fds.getName(),"UTF-8","B"));

multipart.addBodyPart(mailArchieve);

}

}

//以下是演示demo

public static void main(String args[]) {

MailTest mail = new MailTest();

mail.setSubject("这个是标题");

mail.setContent("这个是内容");

//收件人 可以发给其他邮箱(163等) 下同

mail.setTo(new String[] {"xxx@qq.com","xxx@qq.com"});

//抄送

mail.setCc(new String[] {"xxx@qq.com","xxx@qq.com"});

//密送

mail.setBcc(new String[] {"xxx@qq.com","xxx@qq.com"});

//发送附件列表 可以写绝对路径 也可以写相对路径(起点是项目根目录)

mail.setFileList(new String[] {"file\\附件1.txt","file\\附件2.txt"});

//发送邮件

try {

mail.sendMessage();

System.out.println("发送邮件成功!");

} catch (Exception e) {

System.out.println("发送邮件失败!");

e.printStackTrace();

}

}

}

java通过qq邮箱发送_java通过qq邮箱发送邮件相关推荐

  1. java发送qq邮箱验证_JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)

    JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...

  2. java通过qq邮箱发送_java实现发送QQ邮箱

    需下载mail.jar包 获取16位SMTP命令步骤 默认是关闭的 ,将他开启获取16位SMTP命令 点击进行验证获取16位SMTP命令 package com.zking.test; import ...

  3. java企业邮箱发送_java使用网易163企业个性域名邮箱发送邮件教程

    本文作者具有著作权,转载前倾注明来源:留在青山的博客 在我的很久之前的一篇博文里,我使用简单的代码 实现了java发送126邮箱邮件的功能,但是今天我自己注册了一个个性化的域名,我想通过我自己的域名邮 ...

  4. java实现支付宝第三方登录_Java 实现QQ第三方登录(附赠:完整代码)

    老铁,转发+关注+私信 获取完整代码 前言:很多时候我们都需要如下的第三方登录,用QQ帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户. 下面让我们来实现吧,可以参考官网文档,也可以看我下 ...

  5. Java实现邮箱发送(阿里云邮箱推送)

    Java mail邮箱发送 1. 邮箱信息实体类 2. jar包依赖 3. 发送邮箱实现 绑定阿里云域名,创建域名账户,并配置解析域名账户,获得发送邮箱的权限,上限两百封,超出要¥- 阿里云邮件推送控 ...

  6. Java文件如何用qq邮箱发送_java中怎么发送复杂的邮件?在QQ邮箱中怎么操作?

    上次我们已经介绍过,如何实现纯文本发送邮件.今天再来为大家介绍下,在java中怎么发送复杂的邮件,以及在QQ邮箱中的具体操作流程. 首先我们来了解一下,MIME(多用途互联网邮件扩展类型).它分为两类 ...

  7. java模拟网易邮箱登录_java实现163邮箱发送邮件到qq邮箱成功案例

    下载和上传附件.发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,现在终于成功以163邮箱发送邮件到qq邮箱,以下是相 ...

  8. java中邮箱发送_java实现邮箱发送(java mail)

    导包:mail.jar import java.util.Properties; import javax.mail.Message; import javax.mail.Message.Recipi ...

  9. java邮箱发送_java邮箱发送报错

    展开全部 package com.gpt.util.email; import java.io.FileOutputStream; import java.util.List; import java ...

  10. java mail 邮箱发送_Java Mail 发送邮件

    什么是 SMTP 协议 SMTP或简单的邮件传输协议,是一种将电子邮件从一台服务器发送到另一台服务器的快速简便的方法.通过 SendGrid 等第三方服务商提供的SMTP服务,我们可以通过第三方服务器 ...

最新文章

  1. 阿里云MWC 2019发布7款产品:Blink每秒可完成17亿次计算
  2. mysql 遍历二叉树_【自考】数据结构之二叉树遍历
  3. Objective-C基础笔记(3)OC的内存管理
  4. ERP软件的追加开发环节存在特殊价值
  5. UITableView基本用法
  6. iOS开发_统计xcode代码行数
  7. 懒货福利:html css中用Unicode编码代替img图片
  8. oracle awr报告 开关,【Oracle之AWR报告解析】
  9. Java实现 LeetCode 273 整数转换英文表示
  10. 重装系统后git库不能使用_重装系统后git库初始化
  11. 每日一问 --什么是正弦信号?正弦信号有哪些特性?
  12. 一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。
  13. Windows系统安装时,新硬盘手动命令创建主分区和逻辑分区
  14. 中兴手机怎么与计算机连接网络连接不上,手机可以连接wifi电脑连接不上怎么办?...
  15. 第五章 树16 AcWing 1628. 判断红黑树
  16. EC20 AT指令 列举
  17. Chrome浏览器使用指南
  18. C++重点之“引用变量”用法
  19. VS2017打包安装程序下载地址
  20. 大专生如何进大厂?大专生做程序员就没有春天吗?一面二面顺利通过,三面成功拿下拼多多offer!

热门文章

  1. windows电脑连接公共wifi登陆界面无法弹出怎么办?
  2. 安卓CameraX基于虹软人脸识别程序开发
  3. win10-两电脑通过一根网线连接
  4. 2's complement 与 1's complement
  5. 一文了解上拉电阻和下拉电阻(二)
  6. 计算机专业的书普遍都这么贵,你们都是怎么获取资源的?---给你们推荐一些编程电子书籍下载网站
  7. 加来道雄 基因编辑 纳米机器人_同样基因编辑技术,为什么2位学者获得诺奖,中国贺建奎被痛骂?!...
  8. 影响国债收益率的因素
  9. 重做完系统后服务器打印机用不,重装系统后打印机不能使用?重装系统后打印机打印乱码...
  10. 动画:面试官问我 JS「变量提升」我头皮发麻,最后把这篇动画甩给了他