上次我们已经介绍过,如何实现纯文本发送邮件。今天再来为大家介绍下,在java中怎么发送复杂的邮件,以及在QQ邮箱中的具体操作流程。

首先我们来了解一下,MIME(多用途互联网邮件扩展类型)。它分为两类:

1.MimeBodyPart类:

javax.mail.internet.MimeBodyPart类,它表示的是一个MIME消息,它和MimeMessage类一样都是从Part接口继承过来。

2.MimeMultipart类:

javax.mail.internet.MimeMultipart是抽象类

,Multipart的实现子类,它用来组合多个MIME消息。一个MimeMultipart对象可以包含多个代表MIME消息的MimeBodyPart对象。

接下来是实际的操作代码展示:package org.westos.email;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.*;

import javax.mail.internet.*;

import java.security.GeneralSecurityException;

import java.util.Properties;

public class SendComplexEmail

{

public static void main(String[] args) throws GeneralSecurityException, MessagingException

{

Properties prop = new Properties();

prop.setProperty("mail.host", "smtp.qq.com");

设置QQ邮件服务器

prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议

prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码

// QQ邮箱设置SSL加密

MailSSLSocketFactory sf = new MailSSLSocketFactory();

sf.setTrustAllHosts(true);

prop.put("mail.smtp.ssl.enable", "true");

prop.put("mail.smtp.ssl.socketFactory", sf);

//1、创建定义整个应用程序所需的环境信息的 Session 对象

Session session = Session.getDefaultInstance(prop, new Authenticator()

{

@Override

protected PasswordAuthentication getPasswordAuthentication()

{

//传入发件人的姓名和授权码

return new PasswordAuthentication("619046217@qq.com", "16位授权码");

}

});

//2、通过session获取transport对象

Transport transport = session.getTransport();

//3、通过transport对象邮箱用户名和授权码连接邮箱服务器

transport.connect("smtp.qq.com", "619046217@qq.com", "16位授权码");

//4、创建邮件,传入session对象

MimeMessage mimeMessage = complexEmail(session);

//5、发送邮件

transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());

//6、关闭连接

transport.close();

}

public static MimeMessage complexEmail(Session session) throws MessagingException

{

//消息的固定信息

MimeMessage mimeMessage = new MimeMessage(session);

//发件人

mimeMessage.setFrom(new InternetAddress("619046217@qq.com"));

//收件人

mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("619046217@qq.com"));

//邮件标题

mimeMessage.setSubject("带图片和附件的邮件");

//邮件内容

//准备图片数据

MimeBodyPart image = new MimeBodyPart();

DataHandler handler = new DataHandler(new FileDataSource("E:\\IdeaProjects\\WebEmail\\resources\\测试图片.png"));

image.setDataHandler(handler);

image.setContentID("test.png"); //设置图片id

//准备文本

MimeBodyPart text = new MimeBodyPart();

text.setContent("这是一段文本", "text/html;charset=utf-8");

//附件

MimeBodyPart appendix = new MimeBodyPart();

appendix.setDataHandler(new DataHandler(new FileDataSource("E:\\IdeaProjects\\WebEmail\\resources\\测试文件.txt")));

appendix.setFileName("test.txt");

//拼装邮件正文

MimeMultipart mimeMultipart = new MimeMultipart();

mimeMultipart.addBodyPart(image);

mimeMultipart.addBodyPart(text);

mimeMultipart.setSubType("related"); //文本和图片内嵌成功

//将拼装好的正文内容设置为主体

MimeBodyPart contentText = new MimeBodyPart();

contentText.setContent(mimeMultipart);

//拼接附件

MimeMultipart allFile = new MimeMultipart();

allFile.addBodyPart(appendix); //附件

allFile.addBodyPart(contentText); //正文

allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed

//放到Message消息中

mimeMessage.setContent(allFile);

mimeMessage.saveChanges(); //保存修改

return mimeMessage;

}

}

接下来为大家介绍一下在QQ邮箱中的具体操作:

首先我们需要使用到的jar包:mail.jar和activation.jar。同时,QQ邮箱需获取相应的权限:QQ邮箱→邮箱设置→账户→POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务→开启POP3/SMTP服务,然后获取16位授权码。通过一张图片为大家具体展示下:

以上就是有关于java中发送复杂邮件的具体操作方法,并通过图片为大家展示在QQ邮箱中的具体操作。想要了解更多java常见问题,敬请关注奇Q工具网。

推荐阅读:

Java文件如何用qq邮箱发送_java中怎么发送复杂的邮件?在QQ邮箱中怎么操作?相关推荐

  1. java qq验证手机号码_java正则表达式表单验证类工具类(验证邮箱、手机号码、qq号码等)...

    package util; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 使用正则表达式进行表单验证 * ...

  2. java文件编译成功但是不能运行_Java在dos界面运行java源文件编译成功,但运行虚拟机时出现错误:“找不到或无法加载主类”的问题...

    (一)首先检查环境变量配置有没有问题, 1PATH为%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 2CLASSSPATH为.;%JAVA_HOME%\lib\dt.jar; ...

  3. java可以微信qq同时登陆_java实现 微博登录、微信登录、qq登录实现代码_java_脚本之家...

    微信,微博,QQ,这是现在目前用的最多的手机 APP,我们做产品哪能不跟他们不沾边,对于登录,我想谁也不想要多少个帐号密码,根本记不住! 为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注 ...

  4. java 文件拷贝保留原来的属性_Java常用属性拷贝工具类使用总结

    开头聊几句 1.网上很多的技术文章和资料是有问题的,要学会辨证的看待,不能随便就拿来用,起码要自己验证一下 2.关注当下,关注此刻,如果你真正阅读本篇文章,请花几分钟时间的注意力阅读,相信你会有收获的 ...

  5. java文件上传后如何删除_java中上传完文件删除不了的问题

    我上传文件,把流都关闭了,然后还是删除不了,我贴下代码,高手看看是什么问题:if(ServletFileUpload.isMultipartContent(request)){DiskFileItem ...

  6. Java为什么会有默认的背景色_java – 为什么我的背景颜色不会在JFrame中...

    参见英文答案 > Setting background color for the JFrame????????????????????????????????????15个 我有两个类文件: ...

  7. java html转pdf 无法支持中文_java项目实现html转pdf的需求(支持中文和CSS样式)

    java项目中用到了html转pdf的需求,现在写一个自己认为最优方案的总结,虽然还是有一些小的bug 为了保证中文的支持需要在被转换的html添加body的添加中文字体样式,保持这个字体和后边转换p ...

  8. linux mysql 邮件_linux中mysql 自动备份发邮件 到指定邮箱代码

    首先 编写 导出的 命令 使用了 mysqladmin ping mysqldump 然后是 添加附件到邮件中发送 使用了对应的com 最后 暂停 看情况 参考: http://hi.baidu.co ...

  9. cmd运行java语名_怎么用cmd运行java文件

    [怎么用cmd运行java文件]怎么在cmd里面执行java文件 找到存放要执行的JAVA的文件目录,然后在目录中运行CMD,运行JAVA程序之前要先编译,1.javac 文件名.java回车2.ja ...

最新文章

  1. 正则的实例用法,删除包含某些字符的字符串
  2. 【linux工具】ldconfig:linux配置动态链接库
  3. Java String 到底是引用传递还是值传递?
  4. linux 使用split分割大文件
  5. abb变频器acs880说明书_常见品牌变频器修改功率方法大全
  6. 《系统集成项目管理工程师》必背100个知识点-36范围变更的遇到的问题
  7. JavaScript:Scope(域)的基本指南
  8. 4月24日云栖精选夜读 | 阿里云POLARDB如何助力轻松筹打造5亿用户信赖的大病筹款平台?...
  9. C下的全局变量和指针 - C/C++ / C语言
  10. Ceph FINDING AN OBJECT LOCATION
  11. Android Studio IDE Out of Memory
  12. 一张图之——JSDuck
  13. MATLAB绘制微分方程的相图/方向场/向量场
  14. GPU架构演进十年,从费米到安培
  15. 2022 年最佳 15 款网络监控工具
  16. 计算机基础知识高职版,计算机应用基础 课件教学全套课件(高职版大学计算机基础 第7章 计算机网络基础知识 课件.pptx...
  17. java调用fudannlp_利用FudanNLP进行新闻关键词提取
  18. 按洲划分的国家和地区代码整理 包含:中文名 英文名 洲 首字母 两位英文代码 三位英文代码 三位数据代码 洲
  19. 服务器及电脑主机系统安全加固操作手册
  20. 数据结构与算法(java):线性表(链表-双向链表)

热门文章

  1. Asp.net MVC代替php
  2. Junit中的异常测试
  3. 解决zabbix-4系列监控图形中文乱码问题
  4. 【干货】如何从0到1构建用户画像系统.pdf(附76页pdf下载链接)
  5. 1024程序员节:心疼被段子手黑得最惨的你们
  6. 赛道二周冠分享:石头哥有些心里话要说一说
  7. BST:Transformer在推荐领域的应用
  8. 深度学习基础 | 从Language Model到RNN
  9. 妙啊!类别不平衡上的半监督学习
  10. 【论文复现】Hierarchical Attention Networks for Document Classification