Java文件如何用qq邮箱发送_java中怎么发送复杂的邮件?在QQ邮箱中怎么操作?
上次我们已经介绍过,如何实现纯文本发送邮件。今天再来为大家介绍下,在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邮箱中怎么操作?相关推荐
- java qq验证手机号码_java正则表达式表单验证类工具类(验证邮箱、手机号码、qq号码等)...
package util; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 使用正则表达式进行表单验证 * ...
- java文件编译成功但是不能运行_Java在dos界面运行java源文件编译成功,但运行虚拟机时出现错误:“找不到或无法加载主类”的问题...
(一)首先检查环境变量配置有没有问题, 1PATH为%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 2CLASSSPATH为.;%JAVA_HOME%\lib\dt.jar; ...
- java可以微信qq同时登陆_java实现 微博登录、微信登录、qq登录实现代码_java_脚本之家...
微信,微博,QQ,这是现在目前用的最多的手机 APP,我们做产品哪能不跟他们不沾边,对于登录,我想谁也不想要多少个帐号密码,根本记不住! 为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注 ...
- java 文件拷贝保留原来的属性_Java常用属性拷贝工具类使用总结
开头聊几句 1.网上很多的技术文章和资料是有问题的,要学会辨证的看待,不能随便就拿来用,起码要自己验证一下 2.关注当下,关注此刻,如果你真正阅读本篇文章,请花几分钟时间的注意力阅读,相信你会有收获的 ...
- java文件上传后如何删除_java中上传完文件删除不了的问题
我上传文件,把流都关闭了,然后还是删除不了,我贴下代码,高手看看是什么问题:if(ServletFileUpload.isMultipartContent(request)){DiskFileItem ...
- Java为什么会有默认的背景色_java – 为什么我的背景颜色不会在JFrame中...
参见英文答案 > Setting background color for the JFrame????????????????????????????????????15个 我有两个类文件: ...
- java html转pdf 无法支持中文_java项目实现html转pdf的需求(支持中文和CSS样式)
java项目中用到了html转pdf的需求,现在写一个自己认为最优方案的总结,虽然还是有一些小的bug 为了保证中文的支持需要在被转换的html添加body的添加中文字体样式,保持这个字体和后边转换p ...
- linux mysql 邮件_linux中mysql 自动备份发邮件 到指定邮箱代码
首先 编写 导出的 命令 使用了 mysqladmin ping mysqldump 然后是 添加附件到邮件中发送 使用了对应的com 最后 暂停 看情况 参考: http://hi.baidu.co ...
- cmd运行java语名_怎么用cmd运行java文件
[怎么用cmd运行java文件]怎么在cmd里面执行java文件 找到存放要执行的JAVA的文件目录,然后在目录中运行CMD,运行JAVA程序之前要先编译,1.javac 文件名.java回车2.ja ...
最新文章
- 正则的实例用法,删除包含某些字符的字符串
- 【linux工具】ldconfig:linux配置动态链接库
- Java String 到底是引用传递还是值传递?
- linux 使用split分割大文件
- abb变频器acs880说明书_常见品牌变频器修改功率方法大全
- 《系统集成项目管理工程师》必背100个知识点-36范围变更的遇到的问题
- JavaScript:Scope(域)的基本指南
- 4月24日云栖精选夜读 | 阿里云POLARDB如何助力轻松筹打造5亿用户信赖的大病筹款平台?...
- C下的全局变量和指针 - C/C++ / C语言
- Ceph FINDING AN OBJECT LOCATION
- Android Studio IDE Out of Memory
- 一张图之——JSDuck
- MATLAB绘制微分方程的相图/方向场/向量场
- GPU架构演进十年,从费米到安培
- 2022 年最佳 15 款网络监控工具
- 计算机基础知识高职版,计算机应用基础 课件教学全套课件(高职版大学计算机基础 第7章 计算机网络基础知识 课件.pptx...
- java调用fudannlp_利用FudanNLP进行新闻关键词提取
- 按洲划分的国家和地区代码整理 包含:中文名 英文名 洲 首字母 两位英文代码 三位英文代码 三位数据代码 洲
- 服务器及电脑主机系统安全加固操作手册
- 数据结构与算法(java):线性表(链表-双向链表)