当前位置:   article > 正文

Java Email —— 使用Java发送电子邮件_java 发送邮件

java 发送邮件

目录

一、准备SMTP登录信息

二、发送文本邮件

三、发送HTML邮件

四、发送带有附件的邮件

五、发送内嵌图片的HTML邮件

一、准备SMTP登录信息

将自己邮箱中的POP3/SMTP服务开启

获取授权密码(只显示一次) 

 

JavaMail相关的依赖Jar包加入至当前项目

下载连接:https://javaee.github.io/javamail/

确定邮箱的主机名和端口号后,创建Session会话(创建JavaMailUtils工具类,便于以后使用)

  1. // 工具类
  2. public final class JavaMailUtils {
  3. private JavaMailUtils() {
  4. }
  5. public static Session createSession() {
  6. // SMTP服务器连接信息
  7. Properties props = new Properties();
  8. props.put("mail.smtp.host", "smtp.126.com"); // SMTP主机名
  9. props.put("mail.smtp.port", "25"); // 主机端口号
  10. props.put("mail.smtp.auth", "true"); // 是否需要用户认证
  11. props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密
  12. // 创建Session会话(参数1:smtp服务器连接参数,参数2:账号和密码的授权认证对象)
  13. Session session = Session.getInstance(props, new Authenticator() {
  14. protected PasswordAuthentication getPasswordAuthentication() {
  15. // 邮箱账号信息
  16. String userName = "billgogoogooo@126.com"; // 邮箱发送账号
  17. String password = "AJUKHUUVLKRFPUHD"; // 账号授权密码
  18. return new PasswordAuthentication(userName, password);
  19. }
  20. });
  21. // 设置为开发模式
  22. session.setDebug(true);
  23. return session;
  24. }
  25. }

二、发送文本邮件

       发送邮件时,我们首先需要创建一个MimeMessage类型的对象message,然后通过message调用MimeMessage类中setSubject()、message.setText()等方法设置邮件的属性,最后调用Transport.send(message)方法即可发送成功。

  1. public class textEmail {
  2. public static void main(String[] args) {
  3. try {
  4. Session session = JavaMailUtils.createSession(); //创建session对象
  5. MimeMessage message = new MimeMessage(session); //创建message对象
  6. message.setSubject("测试邮件"); //设置邮件标题
  7. message.setText("网易邮箱给QQ邮箱发消息了!"); // 设置邮件正文
  8. message.setFrom(new InternetAddress("xxxxxx@163.com")); //设置发送方地址
  9. message.setRecipient(RecipientType.TO, new InternetAddress("xxxxxx@qq.com")); //设置接收方地址
  10. message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("xxxxxx@qq.com"),new InternetAddress("xxxxxx@qq.com")}); //群发(抄送多人)
  11. Transport.send(message); //发送邮件
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. }
  15. }
  16. }

三、发送HTML邮件

       发送HTML邮件与发送文本邮件类似,我们只需要将文本邮件中的

message.setText("网易邮箱给QQ邮箱发消息了!");

改为

message.setText("<p>网易邮箱</p>给QQ邮箱发消息了!", "utf-8", "html");

 即可。(根据需求插入相应的HTML标签)

四、发送带有附件的邮件

       发送带有附件的邮件时,我们不能直接调用setText()方法,而应该先创建BodyPart类型的对象textPart和filePart分别设置邮件的正文和附件(附件以图片为例),然后在创建一个Multipart对象multipart,最后,通过setContent()方法把Multipart添加到Message中后,调用Transport.send(message)方法即可发送成功。

  1. public class attachmentEmail {
  2. public static void main(String[] args) {
  3. try {
  4. Session session = JavaMailUtils.createSession(); //创建session对象
  5. MimeMessage message = new MimeMessage(session); //创建message对象
  6. message.setSubject("测试邮件"); //设置邮件标题
  7. message.setFrom(new InternetAddress("xxxxxx@163.com")); //设置发送方地址
  8. message.setRecipient(RecipientType.TO, new InternetAddress("xxxxxx@qq.com")); //设置接收方地址
  9. message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("xxxxxx@qq.com"),new InternetAddress("xxxxxx@qq.com")}); //群发(抄送多人)
  10. //正文
  11. BodyPart textPart=new MimeBodyPart(); //创建textPart对象
  12. //textPart.setContent("<p>网易邮箱</p>给QQ邮箱发消息了!", "text/plain;charset=utf-8"); //添加纯文本
  13. textPart.setContent("<p>网易邮箱</p>给QQ邮箱发消息了!", "text/html;charset=utf-8"); //添加HTML文本
  14. //附件
  15. BodyPart filePart=new MimeBodyPart(); //创建filePart对象
  16. filePart.setFileName("2.jpg"); //附件文件显示名称(不一定和真实文件名一致)
  17. filePart.setDataHandler(new DataHandler(
  18. new ByteArrayDataSource(Files.readAllBytes(Paths.get("D://test//1.jpg")), "application/octet-stream"))); //上传附件文件
  19. Multipart multipart=new MimeMultipart(); //创建multipart对象
  20. multipart.addBodyPart(textPart); //将textPart对象放入multipart
  21. multipart.addBodyPart(filePart); //将filePartt对象放入multipart
  22. message.setContent(multipart); //将multipart对象放入邮件
  23. Transport.send(message); //发送邮件
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }

注意:二进制文件可以用application/octet-stream,Word文档则是application/msword。 

五、发送内嵌图片的HTML邮件

       发送内嵌图片的HTML邮件与发送带有附件的邮件类似,在此基础上我们需要在邮件附件中通过调用setHeader()方法设置图片的内容ID,然后在邮件正文中加入<img src=\"cid:cbkj\"/>。

  1. public class pictureEmail {
  2. public static void main(String[] args) {
  3. try {
  4. Session session = JavaMailUtils.createSession(); //创建session对象
  5. MimeMessage message = new MimeMessage(session); //创建message对象
  6. message.setSubject("测试邮件"); //设置邮件标题
  7. message.setFrom(new InternetAddress("xxxxxx@163.com")); //设置发送方地址
  8. message.setRecipient(RecipientType.TO, new InternetAddress("xxxxxx@qq.com")); //设置接收方地址
  9. message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("xxxxxx@qq.com"),new InternetAddress("xxxxxx@qq.com")}); //群发(抄送多人)
  10. //正文
  11. BodyPart textPart=new MimeBodyPart();
  12. StringBuilder contentText=new StringBuilder();
  13. contentText.append("<h3>网易邮箱/h3>");
  14. contentText.append("<p>给QQ邮箱发消息了!</p>");
  15. contentText.append("<img src=\"cid:xxx\"/>");
  16. textPart.setContent(contentText.toString(),"text/html;charset=utf-8");
  17. //附件
  18. BodyPart imagePart=new MimeBodyPart();
  19. imagePart.setDataHandler(new DataHandler(
  20. new ByteArrayDataSource(Files.readAllBytes(Paths.get("D://test//1.jpg")), "application/octet-stream"))); //
  21. imagePart.setHeader("Content-ID", "xxx"); //图片的内容ID
  22. Multipart multipart=new MimeMultipart(); //创建multipart对象
  23. multipart.addBodyPart(textPart); //将textPart对象放入multipart
  24. multipart.addBodyPart(filePart); //将filePartt对象放入multipart
  25. message.setContent(multipart); //将multipart对象放入邮件
  26. Transport.send(message); //发送邮件
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }

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

闽ICP备14008679号