当前位置:   article > 正文

java实现发送邮件_java发送邮件

java发送邮件

1.概述:SMTP协议为邮件发送协议,在java应用程序中,可以使用SMTP协议实现发送邮件的功能。

2.创建Session会话

在使用SMTP协议之前,需要导入扩展包javax.mail。

下载地址:https://mvnrepository.com/artifact/com.sun.mail/javax.mail

还要在自己邮箱的设置页面开启SMTP服务和获取授权码

 注意:授权密码只出现一次,获取后保存下来。

  1. public static void main(String[] args) {
  2. //封装服务器连接信息
  3. Properties pros=new Properties();
  4. pros.put("mail.smtp.host", "smtp.163.com");
  5. pros.put("mail.smtp.port", "25");
  6. pros.put("mail.smtp.auth", "true");
  7. pros.put("mail.smtp.starttls.enable","true" );
  8. //创建Session会话
  9. //参数一:服务器连接信息
  10. //参数二:账号密码校验对象(用户认证对象)
  11. Session session=Session.getInstance(pros, new Authenticator() {
  12. String userName="邮箱账号";
  13. String password="授权码";
  14. @Override
  15. protected PasswordAuthentication getPasswordAuthentication() {
  16. return new PasswordAuthentication(userName, password);
  17. }
  18. });
  19. System.out.println(session);
  20. }

在上面的代码中,我们将与服务器连接的信息封装在Properties对象中,在创建Session对象时,需要传入两个参数 ,第一个参数就是我们封装的服务器连接信息,第二个参数为用户认证对象,因为Authenticator为抽象类,所以创建一个匿名子类对象并将邮箱账号和授权码传入。

运行结果:

 如果我们可以正常的输出Session对象,则我们与服务器连接成功。为了以后开发方便,我们将创建Session对象的过程封装到成一个工具类的静态方法,如下图所示:

  1. public final class JavaMailUtils {
  2. private JavaMailUtils() {
  3. }
  4. public static Session createSession() {
  5. Properties pros=new Properties();
  6. pros.put("mail.smtp.host", "smtp.163.com");
  7. pros.put("mail.smtp.port", "25");
  8. pros.put("mail.smtp.auth", "true");
  9. pros.put("mail.smtp.starttls.enable","true" );
  10. //创建Session
  11. Session session=Session.getInstance(pros, new Authenticator() {
  12. String userName="邮箱账号";
  13. String password="授权码";
  14. @Override
  15. protected PasswordAuthentication getPasswordAuthentication() {
  16. return new PasswordAuthentication(userName, password);
  17. }
  18. });
  19. session.setDebug(true);
  20. return session;
  21. }
  22. }

3.发送普通文本邮件

与服务器连接成功后,接下来就需要写邮件了,java中一封邮件就是一个MimeMessage对象 ,通过MimeMessage对象设置收件人,发件人,主题以及邮件内容等等。最后使用Transport.send()方法发送邮件。

  1. public static void main(String[] args) {
  2. //1.创建Session
  3. try {
  4. Session session=JavaMailUtils.createSession();
  5. System.out.println(session);
  6. //2.创建邮件对象
  7. MimeMessage message=new MimeMessage(session);
  8. //设置邮件主题
  9. message.setSubject("这是一个测试邮件");
  10. //设置邮件内容
  11. message.setText("测试邮件");
  12. //设置发件人
  13. message.setFrom(new InternetAddress("邮箱账号"));
  14. //设置收件人
  15. message.setRecipient(RecipientType.TO, new InternetAddress("邮件账号"));
  16. //3.发送邮件
  17. Transport.send(message);
  18. } catch (AddressException e) {
  19. e.printStackTrace();
  20. } catch (MessagingException e) {
  21. e.printStackTrace();
  22. }
  23. }

执行上述代码后,就可以在收件人的邮箱中收到邮件。

 邮箱内容:

4.发送带有附件的邮件

在生活中,我们经常会发送带有附件的邮件,接下来,我们就通过java程序发送带有附件的邮件,要发送带有附件的邮件,不能直接设置正文内容,需要用到BodyPart的子类对象分别设置正文和附件的内容,然后整合后一起添加到MimeMessage对象中。

  1. public static void main(String[] args) {
  2. try {
  3. //1.创建Session会话
  4. Session session=JavaMailUtils.createSession();
  5. //2.创建邮件对象
  6. MimeMessage message=new MimeMessage(session);
  7. message.setSubject("这是一个带有附件的测试邮件");
  8. message.setFrom(new InternetAddress("发件人邮箱账号"));
  9. message.setRecipient(RecipientType.TO,new InternetAddress("收件人邮箱账号") );
  10. //设置正文
  11. BodyPart textPart=new MimeBodyPart();
  12. //设置正文内容并标明含有html标签
  13. textPart.setContent("带有<b>附件</b>的邮件", "text/html;charset=utf-8");
  14. //设置附件
  15. BodyPart filePart=new MimeBodyPart();
  16. filePart.setFileName("四级成绩.jpg");
  17. filePart.setDataHandler(
  18. new DataHandler(
  19. new ByteArrayDataSource(
  20. Files.readAllBytes(Paths.get("附件文件路径")), "application/octet-stream")));
  21. //整合正文和附件
  22. Multipart part=new MimeMultipart();
  23. part.addBodyPart(textPart);
  24. part.addBodyPart(filePart);
  25. //添加正文和邮件
  26. message.setContent(part);
  27. //3.发送邮件
  28. Transport.send(message);
  29. } catch (AddressException e) {
  30. e.printStackTrace();
  31. } catch (MessagingException e) {
  32. e.printStackTrace();
  33. } catch (IOException e) {
  34. e.printStackTrace();
  35. }
  36. }

上面的代码中,在设置正文内容的时候还标明了含有html标签,这样我们就可以在内容中使用html标签了。

执行上述代码得到:

 5.发送在正文嵌套图片的邮件

我们有时候需要在邮件的正文中嵌套图片,那么这个功能在java程序中如何实现呢?

在发送带有附件的邮件时,我们将邮件分为了两个BodyPart对象,整合后直接添加到MimeMessage中,在正文嵌套图片中,也是将正文和图片创建为两个BodyPart对象,只不过这次需要在正文里通过img标签引用图片。

  1. //1.创建Session会话
  2. Session session=JavaMailUtils.createSession();
  3. //2.创建邮件对象
  4. MimeMessage message=new MimeMessage(session);
  5. message.setSubject("这是一个正文嵌套图片的测试邮件");
  6. message.setFrom(new InternetAddress("发件人邮箱账号"));
  7. message.setRecipient(RecipientType.TO,new InternetAddress("主收件人邮箱账号") );
  8. message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("抄送人邮箱账号1"),
  9. new InternetAddress("抄送人邮箱账号2")});
  10. //设置正文
  11. BodyPart textPart=new MimeBodyPart();
  12. StringBuilder text=new StringBuilder();
  13. text.append("<h1>测试邮件</h1>");
  14. //cid:zjb表示引用编号为zjb的BodyPart对象
  15. text.append("<img src=\"cid:zjb\"/>");
  16. textPart.setContent(text.toString(), "text/html;charset=utf-8");
  17. //设置图片
  18. BodyPart imagePart=new MimeBodyPart();
  19. imagePart.setDataHandler(
  20. new DataHandler(
  21. new ByteArrayDataSource(
  22. Files.readAllBytes(Paths.get("图片路径")),
  23. "application/octet-stream")));
  24. //设置图片编号,便于设置正文时引用
  25. imagePart.setHeader("Content-ID", "zjb");
  26. Multipart part=new MimeMultipart();
  27. part.addBodyPart(textPart);
  28. part.addBodyPart(imagePart);
  29. message.setContent(part);
  30. //3.发送邮件
  31. Transport.send(message);

 我们除了设置一个主收件人,还可以设置多个抄送人,因为抄送人可以设置多个(可以实现群发),所以设置抄送人的时候为一个InternetAddress类型数组,RecipientType.TO表示该收件人为主收件人,RecipientType.CC表示该收件人为抄送人。

执行代码得到:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/728301
推荐阅读
相关标签
  

闽ICP备14008679号