1、传输协议:
-
SMTP协议
处理用户邮件发送的请求。
-
POP3协议
处理用户邮件接收请的求。
2、导包:
mail-1.4.7.jar
activation-1.1.1.jar
3、过程:

4、代码:
import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; public class sendMail01 { //简单邮件:纯文本内容 //复杂邮件:文本+图片+附件 //要发送邮件需要获取协议,开启POP3和SMTP服务 public static void main(String[] args) throws Exception { Properties prop = new Properties();//创建一封邮件 //以下三项的Key的值都是固定的 prop.setProperty("mail.host","smtp.qq.com");//设置邮件服务器 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); //==========使用JavaMail发送邮件的6个步骤====== //1、创建定义整个应用程序所需要的环境信息的Session对象 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication(){ //发件人邮箱的用户名和授权码(只有qq是授权码,其它的是密码) return new PasswordAuthentication("1612893803@qq.com","授权码"); } }); //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 session.setDebug(true); //2、通过Session得到transport对象 Transport ts = session.getTransport(); //3、使用邮箱的用户名和授权码连上邮件服务器 ts.connect("SMTP.qq.com","1612893803@qq.com","授权码"); //4、创建邮件 //创建邮件对象 MimeMessage message = new MimeMessage(session); //指明邮件的发件人 message.setFrom(new InternetAddress("1612893803@qq.com")); //指明邮件的收件人 message.setRecipient(Message.RecipientType.TO,new InternetAddress("212694926@qq.com")); //邮件的标题 message.setSubject("只是一个普通的纯文本邮件"); //邮件的文本内容 message.setContent("你好哇,我来了!","text/html;charset=UTF-8"); //5、发送邮件 ts.sendMessage(message,message.getAllRecipients()); //6、关闭连接 ts.close(); } }
5、带附件:
附件格式包含关系:

import com.sun.mail.util.MailSSLSocketFactory; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import java.util.Properties; public class sendMail02 { //简单邮件:纯文本内容 //复杂邮件:文本+图片+附件 /* *MimeMessage类表示整封邮件。 *MimeBodyPart类表示邮件的一个MIME消息。 *MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。 */ //要发送邮件需要获取协议,开启POP3和SMTP服务 public static void main(String[] args) throws Exception { Properties prop = new Properties();//创建一封邮件 //以下三项的Key的值都是固定的 prop.setProperty("mail.host","smtp.qq.com");//设置邮件服务器 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); //==========使用JavaMail发送邮件的6个步骤====== //变量名字定义的有点乱,不想改了。将就下吧 //1、创建定义整个应用程序所需要的环境信息的Session对象 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication(){ //发件人邮箱的用户名和授权码 return new PasswordAuthentication("1612893803@qq.com","授权码"); } }); //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 session.setDebug(true); //2、通过Session得到transport对象 Transport ts = session.getTransport(); //3、使用邮箱的用户名和授权码连上邮件服务器 ts.connect("SMTP.qq.com","1612893803@qq.com","授权码"); //4、创建邮件 //创建邮件对象 MimeMessage message = new MimeMessage(session); //指明邮件的发件人 message.setFrom(new InternetAddress("1612893803@qq.com")); //指明邮件的收件人 message.setRecipient(Message.RecipientType.TO,new InternetAddress("212694926@qq.com")); //邮件的标题 message.setSubject("这是一个有文本、图片、附件的邮件"); //邮件的内容 //================================================= //准备图片数据 DataHandler:处理除文本外的数据 MimeBodyPart image = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource("C:\\Users\\Think\\Documents\\image-20200220200136289.png")); image.setDataHandler(dh); image.setContentID("xx.png");//设置图片ID //ContentID用于为“multipart/related”组合消息中的内嵌资源指定一个唯一标识号,在HTML格式的正文中可以使用这个唯一标识号来引用该内嵌资源。 //注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。 //准备正文数据 MimeBodyPart text = new MimeBodyPart(); text.setContent("这是一个带图片、文本、附件<img src='cid:xx.png'>的邮件","text/html;charset=UTF-8"); //准备附件数据 MimeBodyPart accessory = new MimeBodyPart(); DataHandler dh2 = new DataHandler(new FileDataSource("C:\\Users\\Think\\Pictures\\Saved Pictures\\illust_70110900_20191209_012234.jpg")); accessory.setDataHandler(dh2); accessory.setFileName(MimeUtility.encodeText("yan"));//给附件一个名字,发过去显示的就是这个设定的名字||MimeUtility.encodeText("")解决附件发送过去乱码; //*****************************!!!!!!!********************** /* MimeBodyPart:表示复杂邮件的一个组成部分,它可以表示文本,附件,图片 DataHandler:表示可以读取图片或附件 MimeMultipart:表示二个邮件组成部分的关系,文本和图片的关系是"related"关系 Content-ID:表示图片的编号 related:图片|| mixed:附件 */ //*****************************!!!!!!!********************** //拼接图片和文本 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text); mm.addBodyPart(image); mm.setSubType("related"); //将文本+图片封装成邮件的组成部分,即将关系看作成一个部分 MimeBodyPart context = new MimeBodyPart(); context.setContent(mm); //把附件也加上 MimeMultipart file = new MimeMultipart(); file.addBodyPart(context); file.addBodyPart(accessory); file.setSubType("mixed"); //放到消息中 message.setContent(file);//把编辑好的内容放入消息中 message.saveChanges();//保存修改! //================================================= //5、发送邮件 ts.sendMessage(message,message.getAllRecipients());//message:发送的消息||message.getAllRecipients():获取保存在里面的地址 //6、关闭连接 ts.close(); } //对于,复杂类型的邮件,位置关系特别注意和加入的顺利要一致 }
浙公网安备 33010602011771号