创建数据处理器对象------->创建数据源对象【编码格式】_javamail发送邮件">
当前位置:   article > 正文

使用JavaMail发送各种类型的邮件_javamail发送邮件

javamail发送邮件

目录

一、准备一个JavaMailUtils工具类

二、发送邮件类型

基本步骤:

2.1、发送普通文本内容的邮件

2.2、抄送多个邮箱地址        邮件内容包含HTML标签,要设置编码格式

2.3、发送带有"附件"的邮件

使用:BodyPart  的 子类 MimeBodyPart()

      2.3.1、定义正文 textPart

      2.3.2、定义附件 filePart

       2.3.3、将正文+附件组装成Multipart对象 

       2.3.4、将Multipart对象放入邮件

  整理所有代码

2.4、邮件正文嵌套图片

         2.4.1、邮件正文:

         2.4.2、邮件附件:

 整理所有代码:


 

一、准备一个JavaMailUtils工具类

根据java的基础库中的定规则:

 设置:该类为用final关键字修饰,表明该类不可被继承

            1.1、定义私有构造方法,表明该类不能有对象

            1.2、定义静态的createSession()方法 返回一个session会话对象

                   1.2.1、 定义Properties对象,将SMTP服务器的连接信息进行存储

                     SMTP主机名

                     主机端口号

                     是否需要用户认证

                     是否启用TLS加密

        注意:Properties存储的是键值对;

                   一定要保证键和值的正确性,否则空制台会报553的错误。

                    1.2.1、  创建Session会话

                              参数1:SMTP服务器连接参数

                              参数2:账号和密码的授权认证对象

                    1.2.3、将session设置为开发者模式,便于观察

整理所有代码:

  1. public final class JavaMailUtils {
  2. private JavaMailUtils() {
  3. }
  4. public static Session createSession() {
  5. String username = "邮箱名称(网易163或者162邮箱)";
  6. String password = "相对应的密码";
  7. // STMP服务器连接信息
  8. Properties props = new Properties();
  9. props.put("mail.smtp.host", "smtp.163.com");
  10. props.put("mail.smtp.port", "25");// 端口号 163: 465 || 126:25
  11. props.put("mail.smtp.auth", "true");
  12. props.put("mail.smtp.starttls.emable", "true");
  13. Session session = Session.getInstance(props, new Authenticator() {
  14. @Override
  15. protected PasswordAuthentication getPasswordAuthentication() {
  16. return new PasswordAuthentication(username, password);
  17. }
  18. });
  19. session.setDebug(true);
  20. return session;
  21. }
  22. }

二、发送邮件类型

基本步骤:

      1.创建Session会话  :session
      2.创建邮件对象:MineMessage(session)

             邮件标题: setSubject()

             邮件正文: setText()

             发件人:  setFrom()

             抄送人 : setRecipent()
      3.发送:  Transport.send(message)

2.1、发送普通文本内容的邮件

  1. public static void main(String[] args) {
  2. try {
  3. Session session = JavaMailUtils.createSession();
  4. MimeMessage message = new MimeMessage(session);
  5. message.setSubject("这是一封测试邮件,别害怕!"); // 设置邮件标题
  6. message.setText("爱你孤身走暗巷,爱你走得很安详!"); // 设置邮件正文
  7. message.setFrom(new InternetAddress("billgogoogooo@126.com")); // 发件人
  8. message.setRecipient(RecipientType.TO, new InternetAddress("55094839@qq.com"));
  9. Transport.send(message);
  10. } catch (MessagingException e) {
  11. e.printStackTrace();
  12. }
  13. }

2.2、抄送多个邮箱地址
        邮件内容包含HTML标签,要设置编码格式

message.setText("<b>太阳</b>"utf-8","html");

  1. public static void main(String[] args) {
  2. try {
  3. Session session = JavaMailUtils.createSession();
  4. MimeMessage message = new MimeMessage(session);
  5. message.setFrom(new InternetAddress("163邮箱"));
  6. message.setRecipient(RecipientType.TO, new InternetAddress("QQ邮箱"));
  7. message.setRecipients(RecipientType.CC,
  8. new InternetAddress[] {new InternetAddress("QQ邮箱"),
  9. new InternetAddress("QQ邮箱")});
  10. message.setSubject("测试邮件");
  11. message.setText("<Strong>内容</Strong>","utf-8","html");
  12. Transport.send(message);
  13. } catch (AddressException e) {
  14. e.printStackTrace();
  15. } catch (MessagingException e) {
  16. e.printStackTrace();
  17. }
  18. }

2.3、发送带有"附件"的邮件

大体框架不变:只在基本步骤中的邮件正文部分有所改变

 邮件仅包含正文:setText("----内容------")

 邮件中既包含正文,又包含附件

使用:BodyPart  的 子类 MimeBodyPart()

      2.3.1、定义正文 textPart

            textPart.setContent("------内容----------- ")

      2.3.2、定义附件 filePart

             filePart.setFileName("附件文件显示名称");

              上传附件文件:

设置:数据处理器------->创建数据处理器对象------->创建数据源对象【编码格式】

           filePart.setDataHandler(
                    new DataHandler(
                            new ByteArrayDataSource(
                                    Files.readAllBytes(Paths.get("C:\\Users027.jpg")), 
                                    "application/octet-stream")));

       2.3.3、将正文+附件组装成Multipart对象 

                    定义Mutlipart对象 :multipart

                    调用multipart.addBodyPart()  将正文和附件组装起来

       2.3.4、将Multipart对象放入邮件

                     message调用setContent("multipart")

  整理所有代码

  1. public static void main(String[] args) {
  2. try {
  3. Session session = JavaMailUtils.createSession();
  4. MimeMessage message = new MimeMessage(session);
  5. message.setFrom(new InternetAddress("163邮箱"));
  6. message.setRecipient(RecipientType.TO, new InternetAddress("QQ邮箱"));
  7. message.setRecipients(RecipientType.CC,
  8. new InternetAddress[] {new InternetAddress("QQ邮箱"),
  9. new InternetAddress("QQ邮箱")});
  10. message.setSubject("测试邮件");
  11. BodyPart textPart = new MimeBodyPart();
  12. textPart.setContent("<b>脑子</b>", "text/html;charset=utf-8");
  13. BodyPart filePart = new MimeBodyPart();
  14. filePart.setFileName("李云龙阁下");
  15. filePart.setDataHandler(
  16. new DataHandler(
  17. new ByteArrayDataSource(
  18. Files.readAllBytes(Paths.get("C:\\Users027.jpg")),
  19. "application/octet-stream")));
  20. Multipart multipart = new MimeMultipart();
  21. multipart.addBodyPart(textPart);
  22. multipart.addBodyPart(filePart);
  23. message.setContent(multipart);
  24. Transport.send(message);
  25. } catch (AddressException e) {
  26. e.printStackTrace();
  27. } catch (MessagingException e) {
  28. e.printStackTrace();
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
  32. }

2.4、邮件正文嵌套图片

         2.4.1、邮件正文:

                     可以创建一个StringBuilder对象,

                      调用 append()  :追加正文内容

         2.4.2、邮件附件:

             (和2.3中的附件类似)

设置:数据处理器------->创建数据处理器对象------->创建数据源对象【编码格式】

           调用setHeader()-----设置图片的内容ID

 整理所有代码:

  1. public static void main(String[] args) {
  2. try {
  3. Session session = JavaMailUtils.createSession();
  4. MimeMessage message = new MimeMessage(session);
  5. message.setFrom(new InternetAddress("163邮箱"));
  6. message.setRecipient(RecipientType.TO, new InternetAddress("QQ邮箱"));
  7. message.setRecipients(RecipientType.CC,
  8. new InternetAddress[] {new InternetAddress("QQ邮箱"),
  9. new InternetAddress("QQ邮箱")});
  10. message.setSubject("触不可及");
  11. BodyPart textPart = new MimeBodyPart();
  12. StringBuilder contentText = new StringBuilder();
  13. contentText.append("<h3>触不可及</h3>");
  14. contentText.append("<p>一个残疾富豪和他的黑人伙计之间的故事</p>");
  15. contentText.append("<img src=\"cid:cbkj\"/>");
  16. textPart.setContent(contentText.toString(),"text/html;charset=utf-8");
  17. BodyPart imagePart = new MimeBodyPart();
  18. imagePart.setDataHandler(
  19. new DataHandler(
  20. new ByteArrayDataSource(
  21. Files.readAllBytes(Paths.get("C:\\Pictures\\触不可及.webp")),
  22. "application/octet-stream")));
  23. imagePart.setHeader("Content-ID", "cbkj");
  24. Multipart multipart = new MimeMultipart();
  25. multipart.addBodyPart(textPart);
  26. multipart.addBodyPart(imagePart);
  27. message.setContent(multipart);
  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. }

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

闽ICP备14008679号