上次我们已经介绍过,如何实现纯文本发送邮件。今天再来为大家介绍下,在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("这是一段文本<img src='cid:test.png'>", "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工具网。
推荐阅读: