1.创建maven项目
2.导包
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.activation/activation --> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency>
两个有关邮件发送的java包
3.获取qq邮箱授权码
4.普通文本邮件
import com.sun.mail.util.MailSSLSocketFactory; import com.sun.mail.util.LineOutputStream; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; //发送一封简单的邮件。 public class sendmail { public static void main(String[] args) throws Exception { 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); //使用JavaMail发送邮件的5个步骤: //1、创建定义整个应用程序所需的环境信息的 Session 对象。 //QQ才有!其他邮箱不需要。 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名、授权码。 return new PasswordAuthentication("2861532035@qq.com", "自己的授权码"); } }); //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态。 session.setDebug(true); //2、通过session得到transport对象。 Transport ts = session.getTransport(); //3、使用邮箱的用户名和授权码连上SMTP邮件服务器。 ts.connect("smtp.qq.com", "2861532035@qq.com", "自己的授权码"); //4、创建邮件:写邮件。 //注意需要传递Session。 MimeMessage message = new MimeMessage(session); //指明邮件的发件人 message.setFrom(new InternetAddress("2861532035@qq.com")); //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发。 message.setRecipient(Message.RecipientType.TO, new InternetAddress("2861532035@qq.com")); //邮件的标题。 message.setSubject("简单邮件发送实现"); //邮件的文本内容。可以写html语句。 message.setContent("<h2 style='color:red'>你好啊!</h2>", "text/html;charset=UTF-8"); //此处加入下面所需代码 //5、发送邮件 ts.sendMessage(message, message.getAllRecipients()); //6、关闭连接 ts.close(); } }
5.包含图片的非附件邮件
//发送包含图片的复杂邮件========================================== //准备图片数据。 MimeBodyPart image = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource("D:\\桌面\\大二上综测分\\志愿时.jpg")); image.setDataHandler(dh);//在我们的Body中放入这个处理的图片数据。 image.setContentID("bz.jpg");//给图片设置一个id,我们在后面可以使用! // 准备正文数据。 MimeBodyPart text = new MimeBodyPart(); //这里的cid就是上面的哪个setContentID。 text.setContent("这是一封邮件正文带图片<img src='cid:bz.jpg'>的邮件", "text/html;charset=UTF-8"); // 描述数据关系。 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text); mm.addBodyPart(image); mm.setSubType("related");//设置MimeMultipart对象的相对熟悉为related,即发送的数据为文本+非附件资源。 //设置到消息中,保存修改。 message.setContent(mm);//把最后编辑好的邮件放到消息当中。 message.saveChanges();//保存上面的修改。 //发送包含图片的复杂邮件==========================================
6.包含附件的复杂邮件
//发送包含附件的复杂邮件===================================================== /* 编写邮件内容 1.图片 2.附件 3.文本 */ //图片 MimeBodyPart body1 = new MimeBodyPart(); body1.setDataHandler(new DataHandler(new FileDataSource("D:\\桌面\\大二上综测分\\志愿时.jpg"))); body1.setContentID("yhbxb.png"); //图片设置ID //文本 MimeBodyPart body2 = new MimeBodyPart(); body2.setContent("请注意,我不是广告<img src='cid:yhbxb.png'>","text/html;charset=utf-8"); //附件 MimeBodyPart body3 = new MimeBodyPart(); body3.setDataHandler(new DataHandler(new FileDataSource("D:\\桌面\\人文素养活动截图.zip"))); body3.setFileName("test.c"); //附件设置名字 MimeBodyPart body4 = new MimeBodyPart(); body4.setDataHandler(new DataHandler(new FileDataSource("D:\\桌面\\人文素养活动截图.zip"))); body4.setFileName("test.txt"); //附件设置名字 //拼装邮件正文内容 MimeMultipart multipart1 = new MimeMultipart(); multipart1.addBodyPart(body1); multipart1.addBodyPart(body2); multipart1.setSubType("related"); //1.文本和图片内嵌成功! //new MimeBodyPart().setContent(multipart1); //将拼装好的正文内容设置为主体 MimeBodyPart contentText = new MimeBodyPart(); contentText.setContent(multipart1); //拼接附件 MimeMultipart allFile =new MimeMultipart(); allFile.addBodyPart(body3); //附件 allFile.addBodyPart(body4); //附件 allFile.addBodyPart(contentText);//正文 allFile.setSubType("mixed"); //正文和附件都存在邮件中,所以类型设置为mixed; //设置到消息中,保存修改 message.setContent(allFile);//将MimeMultipart放入消息对象中。 message.saveChanges();//保存上面的修改。 //发送包含附件的复杂邮件=====================================================